簡體   English   中英

當沒有更多結果要顯示時,為什么 SWI-Prolog 不顯示“假”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM