prolog SWI中未定义的过程错误
首次在windows 8上运行prologSWI 这是我的程序(.pl)文件,非常基本,只有3个事实:(我是一个完整的prolog初学者) 当我在prolog SWI中加载它(consult)并使用该程序时,我的输出中出现以下错误:prolog SWI中未定义的过程错误,prolog,prolog-toplevel,Prolog,Prolog Toplevel,首次在windows 8上运行prologSWI 这是我的程序(.pl)文件,非常基本,只有3个事实:(我是一个完整的prolog初学者) 当我在prolog SWI中加载它(consult)并使用该程序时,我的输出中出现以下错误: 12 ?- b. true. 13 ?- a. true. 14 ?- c. ERROR: toplevel: Undefined procedure: c/0 (DWIM could not correct goal) 现在,如果这是一个简单的错误,因为c从
12 ?- b.
true.
13 ?- a.
true.
14 ?- c.
ERROR: toplevel: Undefined procedure: c/0 (DWIM could not correct goal)
现在,如果这是一个简单的错误,因为c
从未在程序中作为事实陈述过,那么这很好,但是在查看在线示例和我在这些示例的Prolog类中找到的示例后,当事实在程序中时,回答yes
,当事实不在程序中时,回答no
。如果是,我的回答是true
,如果不是,我的回答是长错误
有关详细信息,请参阅此链接
对于foggy,哪里是回复
no
。SWI的顶级外壳稍有不同,灵感来自于的外壳。这样做的目的是让您再次返回一个可执行查询作为答案。因此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)
之类的约束时,它甚至更有用:
?-使用_模块(库(clpfd))。
对。
?-X>3,X>Y,abs(X)<100。
4..99中的X,
X#>=Y,
在inf..99中为Y。
另一个问题是许多系统中常见的默认行为:如果没有子句,也没有提及特定谓词,则系统会假定您键入了错误的名称,并相应地给出一个错误。
如果你真的坚持(不要!),你可以使用set\u prolog\u标志(未知,失败)切换到70年代末的行为时间。
但是最好立即使用set\u prolog\u标志(未知,错误)
?- 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.
?- use_module(library(clpfd)).
true.
?- X #> 3, X#>=Y,abs(X) #< 100.
X in 4..99,
X#>=Y,
Y in inf..99.