下面的代码不能运行
:- arithmetic_function(i/2).
i(X,Y,Z) :-
Z is X+Y.
calcola :-
write('Give me an expression'),nl,
read(ESP),
Z is ESP,nl,nl,
write(Z).
但下面是
:- arithmetic_function(i/2).
i(X,Y,Z) :-
Z is X+Y.
calcola :-
write('Give me an expression'),nl,
Z is 4 i 2,nl,nl,
write(Z).
为什么?似乎"read"函数不能正常工作
from sw - prolog邮件列表([SWIPL] Ann: sw - prolog 5.11.23, 23 Jun):
-
修改:用户自定义的算术函数已从内核。有一个新的库(算法)来模拟旧的行为部分。值得注意的是:
- 这个库必须在arithmet_function/1加载之前加载使用。
- 它只涵盖作为参数可见的算术函数/2,>/2等。
- 一个新的谓词arithmet_expression_value/2可以用来用嵌入的用户算法计算表达式,变成
作为一个先导,当我用is/2
测试时它失败了,但当我用arithmetic_expression_value/2
时它成功了:
:- arithmetic_function(i/2).
:- op(20, xfx, i).
i(X, Y, Z) :-
Z is X + Y.
calcola :-
writeln('Give me an expression'),
read(ESP),
arithmetic_expression_value(ESP, Z), nl,
write(Z).
对于@gusbro,它可以开箱即用。我在这里使用的是windows swi-pl !
其他人可能有线索说明为什么我们失败了!