首次在Windows 8上运行prolog SWI 。
这是我的程序(.pl)文件,非常基本只有3个事实:(我是一个完整的prolog初学者)
hello.
a.
b.
当我在prolog-SWI中加载它(咨询)并使用该程序时,我在输出中出现了这个错误:
12 ?- b.
true.
13 ?- a.
true.
14 ?- c.
ERROR: toplevel: Undefined procedure: c/0 (DWIM could not correct goal)
现在,如果这是一个简单的错误,因为c
从未在程序中声明为事实那么这很好,但是在查看了在线示例和我在Prolog类中找到的示例后,这些示例回复当事实在程序中时yes
,而no
当事实在程序中时true
。如果是的话,我会回复no
,如果不是,我会回答这个长错误。
请参阅此example
的链接有雾的回复{{1}}。
答案 0 :(得分:4)
SWI的顶级外壳略有不同,受到Prolog IV外壳的启发。这个想法是你再次回到可执行查询的答案。因此true.
而不是yes
和false.
而不是no
。如果要将答案“粘贴”到下一个查询中,这将特别有用。
?- append(Xs,Ys,[1,4,7]).
Xs = [],
Ys = [1, 4, 7] ;
Xs = [1],
Ys = [4, 7] ;
Xs = [1, 4],
Ys = [7] ;
Xs = [1, 4, 7],
Ys = [] ;
false.
当您处理library(clpfd)
:
?- use_module(library(clpfd)).
true.
?- X #> 3, X#>=Y,abs(X) #< 100.
X in 4..99,
X#>=Y,
Y in inf..99.
另一个问题是许多系统中的常见默认行为:如果没有子句而没有提及特定谓词,系统会假定您输入了错误的名称并相应地给出了错误。
如果您真的坚持(不要!),您可以使用set_prolog_flag(unknown, fail).
将行为时间转换到20世纪70年代后期,但最好立即使用set_prolog_flag(unknown, error)
将其切换回来。