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

为什么?似乎"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 !

其他人可能有线索说明为什么我们失败了!

相关内容

  • 没有找到相关文章

最新更新