我剛開始使用Prolog,並且已經遇到了一個看似簡單的例子。這裏是我的特等文件:SWI-Prolog中的未定義過程不起作用
hacker(P) :- mountaindew(P), doesntsleep(P).
hacker(P) :- writesgoodcode(P).
writesgoodcode(jeff).
然後,在我的程序加載到swipl,我這條線測試它在提示符下
writesgoodcode(jeff).
我認爲它會顯示正確的,但我得到這個錯誤:
?- hacker(jeff).
ERROR: hacker/1: Undefined procedure: mountaindew/1
Exception: (7) hacker(jeff) ?
這個程序能正常工作,但是這並沒有解決我的問題:
hacker(P) :- writesgoodcode(P).
writesgoodcode(jeff).
$ swipl -s dumb.pl
% dumb.pl compiled 0.00 sec, 1,112 bytes
?- hacker(jeff).
true.
任何人都可以解釋爲什麼我的原始程序不起作用?根據我的理解,Prolog應該「跳過」第一條語句,因爲它沒有足夠的信息,並檢查下一行。它確實有足夠的信息,第二行,因此它應該評估真實。任何幫助或正確方向的一點都會很棒。謝謝。