基本用法

讓我們考慮謂詞 sumDif/2,驗證列表的結構是否與幾個約束相匹配。第一個術語表示要分析的列表,第二個術語表示另一個列表,其中包含第一個列表中我們的約束未知的部分。

為了演示,sumDif/2 識別一個算術表示式來求和 n 個整數。

sumDif([X, +|OpenList], Hole) :-
    integer(X),
    sumDif(OpenList, Hole).

我們知道要驗證的列表的第一個元素是整數,這裡用 X 表示,後面跟著加法符號(+)。稍後仍需要處理的列表的剩餘部分(OpenList)在該級別保持未經驗證。Hole 代表我們不需要驗證的列表部分。

讓我們給出謂詞 sumDif/2 的另一個定義來完成算術表示式的驗證:

sumDif([X|Hole], Hole) :-
    integer(X).

我們期望在開始列表的開頭直接使用一個名為 X 的整數。有趣的是,列表 Hole 的剩餘部分未知,這就是差異列表的全部目的:列表的結構在某一點上是已知的。

最後,在評估列表時會出現缺失的部分:

?- sumDif([1,+,2,+,3], []).
true

這是當使用謂詞時提到列表的末尾,這裡 [] 表示列表不包含其他元素。