Prolog读取复合词并将其视为表达式

时间:2011-12-16 16:51:41

标签: prolog logic swi-prolog gnu-prolog

以下代码无效

:- 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).

为什么?好像“阅读”功能无法正常工作

2 个答案:

答案 0 :(得分:3)

来自SWI-Prolog邮件列表([SWIPL] Ann:SWI-Prolog 5。11。23,3月23日):

  • MODIFIED:已删除用户定义的算术函数 内核。有一个新的库(算术)模仿 旧的行为部分。值得注意的是:

    • 必须在arithmetic_function / 1之前加载此库 使用。
    • 它仅涵盖作为参数可见的算术函数 编译时为/ 2,> / 2等。
    • 可以使用新的谓词arithmetic_expression_value / 2 用嵌入式用户算法计算表达式 在运行时实例化。

答案 1 :(得分:1)

作为领导者,当我使用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作为记录!

其他人可能有关于它为什么失败的线索!