我對prolog非常陌生。儘可能在儘可能短的時間內儘可能地學習它。任何幫助是極大的讚賞。我正在使用MacOS Sierra。Prolog編譯錯誤?
我想輸入這些行:
nextto(_A,_B).
nextto(_B,_C).
當我測試使用,序言命令窗口,並執行以下命令:
?- nextto(A,C).
是不是應該返回假的?
因爲,我的編譯結果在真正的,就像這樣:
?- nextto(A,C).
true
我對prolog非常陌生。儘可能在儘可能短的時間內儘可能地學習它。任何幫助是極大的讚賞。我正在使用MacOS Sierra。Prolog編譯錯誤?
我想輸入這些行:
nextto(_A,_B).
nextto(_B,_C).
當我測試使用,序言命令窗口,並執行以下命令:
?- nextto(A,C).
是不是應該返回假的?
因爲,我的編譯結果在真正的,就像這樣:
?- nextto(A,C).
true
在序言_
被認爲是像大寫字母和它有自己的特殊意義是指定匿名變量,所以_A, _B是(匿名)變量(任何以prolog中的大寫字母開頭的變量都不是原子)。您的條款:
nextto(_A,_B). nextto(_B,_C).
實際上意味着謂詞nexxto成功與兩個變量。所以當你查詢neexto(A,C)時。它返回true。 如果您查詢下一個(a,b),它也會返回true。現在a,b是原子而不是變量,因爲它會檢查是否有旁邊的子句(a,b)。在你的條款中。然而,正如我上面所說,你的條款通過_A,_B的每一次統一而成功。的
nextto(_A,_B).
代替:也因爲你的謂詞nexxto總是成功的,你甚至會只寫了一個條款得到同樣的結果
nextto(_A,_B). nextto(_B,_C).
我需要以這樣的方式來代碼,下一步以(A, C)。是錯誤的。 – SAN
我認爲這是不可能的(A,C)。爲什麼不用nextto(a,c)呢? – coder
好吧!非常感謝!!只是因爲好奇而想知道,所以用大寫字母做這件事是不可能的。 – SAN