簡體   English   中英

當gprolog在這種情況下說“是真的嗎?”而不是“是”時,它是什么意思?

[英]What does it mean when gprolog says “true?” instead of “yes” in this instance?

我正在嘗試寫一個gprolog程序,確認一下,鑒於首歌的一些“合理”背景(聽這里 :-)),當我查詢grandpa(me, me)時會回答是(即,我確實是我自己的爺爺?)。 這是作為我的AI課程的作業,我們自己決定要包括哪些事實和謂詞。 雖然它充滿了冗余和一些我不使用的條款(有些僅僅是為了歌曲),但這里是我一起投入的,並且必須假設步子被認為是完整的/普通的孩子:

  3 male(me).
  4 male(mydad).
  5 male(mybaby).
  6 female(widow).
  7 female(redhead).
  8 grandma(Z, X) :- female(Z), child(Z, Y), child(Y, X).           
  9 grandpa(Z, X) :- male(Z), child(Z, Y), child(Y, X).         
 10 child(me, mydad). 
 11 child(redhead, widow). 
 12 child(mybaby, me).
 13 child(A, B) :- married(B, C), married(A, D), child(D, C).  
 14 child(C, A) :- married(A, B), child(C, B). %step children as children
 15 married(me, widow). 
 16 married(widow, me). 
 17 married(mydad, redhead).

它很草率,但我會說最重要的是第13和第14條。特別是14次嘗試確保,例如,我的父親是我的孩子,因為他與我的繼子結婚,因此是我的女婿。

無論如何,跟蹤顯示運行查詢似乎工作 - 有點:

{trace}
| ?- grandpa(me, me).
      1    1  Call: grandpa(me,me) ? 
      2    2  Call: male(me) ? 
      2    2  Exit: male(me) ? 
      3    2  Call: child(me,_366) ? 
      3    2  Exit: child(me,mydad) ? 
      4    2  Call: child(mydad,me) ? 
      5    3  Call: married(me,_415) ? 
      5    3  Exit: married(me,widow) ? 
      6    3  Call: married(mydad,_440) ? 
      6    3  Exit: married(mydad,redhead) ? 
      7    3  Call: child(redhead,widow) ? 
      7    3  Exit: child(redhead,widow) ? 
      4    2  Exit: child(mydad,me) ? 
      1    1  Exit: grandpa(me,me) ? 

true ? 

(2 ms) yes

我關心的是true? 聲明。 如果我只是按回車, yes會出現,但說像a導致無限循環,與調用堆棧越來越有點過了越來越大的每一輪“真”再次出現。 這里發生了什么? 我認為對查詢的成功“確認”意味着事情的結束。 我沒有看到任何更多變量要檢查!

true vs yes用於區分可能存在更多解決方案的位置。 Prolog可以檢查證明堆棧,尋找選擇點 ,即仍然需要反駁的替代計算正在等待。

擊中a ,你強調導致矛盾的主循環:

...
   Redo: (31) child(redhead, me)
   Call: (32) married(me, _G2289)
   Exit: (32) married(me, widow)
   Call: (32) child(redhead, widow)
   Exit: (32) child(redhead, widow)
   Exit: (31) child(redhead, me)
   Exit: (30) child(redhead, widow)
   Exit: (29) child(redhead, me)
   Exit: (28) child(redhead, widow)
...

(注意:用SWI-Prolog獲得的痕跡,請忽略小的差異)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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