Xer*_*Xes 4 arithmetic-expressions prolog
我是 Prolog 的新手,想定义一个简单的谓词,它根据我选择在算术表达式中使用的函数来计算结果。
所以,这是我的想法:
operation(X,Y, Op, Result):-
Result is X Op Y.
Run Code Online (Sandbox Code Playgroud)
现在,我期待 Prolog 的这一点:
operation(3,4,'+', X).
X = 7.
Run Code Online (Sandbox Code Playgroud)
但是正如您可能猜到的那样,Prolog 不能识别Op为算术运算。有谁知道这怎么可能?
我还没有在互联网上找到任何东西,即使它是相当基本的,我想。
提前致谢!
尽管 Tudor 和 gokhans 的答案提供了想要的结果,但我认为有一个更优雅的解决方案。
以下将适用于大多数 Prolog 实现:
operation(X, Y, Operator, Result):-
Goal =.. [Operator, X, Y],
Result is Goal.
Run Code Online (Sandbox Code Playgroud)
SWI-Prolog 允许定义自定义算术函数。以下代码扩展了上述内容,以便与来自其他模块的此类用户定义函数一起使用:
:- meta_predicate(operation(+,+,2,-)).
operation(X, Y, Module:Operator, Result):-
Goal =.. [Operator, X, Y],
Module:(Result is Goal).
Run Code Online (Sandbox Code Playgroud)
请注意,对用户定义函数的支持在 SWI-Prolog 中已被弃用,并且在其他没有此功能的 Prolog 中不起作用。
使用以下实现的一些示例operation/4:
?- operation(1, 2, mod, X).
X = 1.
?- operation(1, 2, //, X).
X = 0.
?- operation(1, 2, /, X).
X = 0.5.
?- operation(1, 2, -, X).
X = -1.
?- operation(1, 2, +, X).
X = 3.
Run Code Online (Sandbox Code Playgroud)