Prolog中未被捕获的例外

时间:2016-01-28 07:30:54

标签: prolog

我是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)

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才能使规则成功。