我是Prolog的新手 我从在线视频中获得了这个编码
what_age(Other) :-
Grade is Other -5,
format('~w Go to the college',[Grade]).
但是当我更改下面的代码时
what_age(Other) :-
Other -5,
format('~w ~s Go to the college',[Other]).
我收到错误
- what_age(30).
uncaught exception: error(existence_error(procedure,(-)/2),what_age/1)
答案 0 :(得分:1)
你的Prolog翻译表达了Prolog语言本身的错误,这使得这个消息有点神秘。
error(existence_error(procedure,(-)/2),what_age/1)
这基本上说:在你对谓词what_age
(arity 1)的定义中,你指的是一个名为(-)
的arity 2的不存在的过程。
规则的这一部分出现错误:
Other - 5
您的程序没有为减号运算符定义任何规则;因此错误。
如果您希望在此进行计算,请再想一想。与大多数其他编程语言不同,算法表达式在Prolog中未被评估。 1+2
不是3. 1+2
就是这样;一个有两个参数的运算符。要强制进行评估,您需要的是'是'运营商。这正是原始代码中所做的:
Grade is Other - 5
此处没有错误,只是因为运营商(is)/2
已定义(内置)规则。此规则将对右侧的任何术语(此处为:Other - 5
)进行算术评估,并将该计算的结果与左侧的术语(Grade
)统一起来。例如,如果Other
为8,则Grade
必须为3才能使规则成功。