Mat*_*att 6 procedure prolog undefined
我刚刚开始使用 Prolog,并且已经在一个看似简单的示例中遇到了问题。这是我的 .pl 文件:
hacker(P) :- mountaindew(P), doesntsleep(P).
hacker(P) :- writesgoodcode(P).
writesgoodcode(jeff).
Run Code Online (Sandbox Code Playgroud)
然后,在将程序加载到 swipl 中后,我在提示符下用这一行测试它
writesgoodcode(jeff).
Run Code Online (Sandbox Code Playgroud)
我以为它会显示 true,但我收到此错误:
?- hacker(jeff).
ERROR: hacker/1: Undefined procedure: mountaindew/1
Exception: (7) hacker(jeff) ?
Run Code Online (Sandbox Code Playgroud)
该程序运行良好,但这并不能解决我的问题:
hacker(P) :- writesgoodcode(P).
writesgoodcode(jeff).
$ swipl -s dumb.pl
% dumb.pl compiled 0.00 sec, 1,112 bytes
?- hacker(jeff).
true.
Run Code Online (Sandbox Code Playgroud)
谁能解释为什么我原来的程序不起作用?根据我的理解,Prolog 应该“跳过”第一条语句,因为它没有足够的信息,并检查下一行。它确实有足够的信息用于第二行,因此它应该评估为真。任何帮助或正确方向的观点都会很棒。谢谢。
正如错误消息所示,您有一个未定义的过程mountaindew/1。要使您的代码返回 true,您的选择是:
dynamic(mountaindew/1)set_prolog_flag(unknown, fail)