基本用法
讓我們考慮謂詞 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
這是當使用謂詞時提到列表的末尾,這裡 []
表示列表不包含其他元素。