我刚刚开始使用 Prolog,并且已经遇到了一个看似简单的示例的问题。这是我的 .pl 文件:
hacker(P) :- mountaindew(P), doesntsleep(P).
hacker(P) :- writesgoodcode(P).
writesgoodcode(jeff).
然后,在我将程序加载到 swipl 后,我在提示符下用这一行测试它
writesgoodcode(jeff).
我认为它会显示为 true,但我收到此错误:
?- 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 应该“跳过”第一条语句,因为它没有足够的信息,并检查下一行。它确实为第二行提供了足够的信息,因此它应该评估为真。任何帮助或正确方向的观点都会很棒。谢谢。