[英]Why SWI-Prolog doesn't display 'false' when there aren't any more results to show
我正在關注 Prolog 書,目前正在嘗試以下示例。 我的事實是;
parent(tom, bob).
parent(pam, bob).
parent(tom, liz).
parent(bob, ann).
parent(bob, pat).
parent(pat, jim).
我查詢 Prolog 為:
?- parent(X, Y).
結果是;
X = tom,
Y = bob ;
X = pam,
Y = bob ;
X = tom,
Y = liz ;
X = bob,
Y = ann ;
X = bob,
Y = pat ;
X = pat,
Y = jim
為什么 Prolog 最后不顯示“ false ”以表明不再有可能的結果?
此外,我嘗試了以下查詢。 但它給了我不同的結果,這是出乎意料的,給出了額外的“假”。 你能告訴我這是什么原因嗎?
?- parent(Y,jim), parent(X,Y).
Y = pat,
X = bob.
?- parent(X,Y), parent(Y,jim).
X = bob,
Y = pat ;
false.
我正在使用 SWI-Prolog 版本(線程,64 位,版本 8.2.4)。
SLD 解析,Prolog 的證明過程,隱含地定義了替代計算的搜索樹。
Prolog 使用深度優先策略搜索此樹,一次一個分支,遇到故障節點時回溯。
僅當搜索期間訪問的最后一個節點是故障節點時,SWI-Prolog 才會打印false
。
考慮程序:
parent(tom,bob). % parent.1
parent(pam,bob). % parent.2
parent(tom,liz). % parent.3
parent(bob,ann). % parent.4
parent(bob,pat). % parent.5
parent(pat,jim). % parent.6
搜索樹是:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.