我是Prolog的新手,想要定义一个简单的谓词,根据我在算术表达式中选择使用的函数来计算结果。
所以,这是我的想法:
operation(X,Y, Op, Result):-
Result is X Op Y.
现在,我期待Prolog的这个:
operation(3,4,'+', X).
X = 7.
但正如您可能猜到的那样,Prolog无法将Op
识别为算术运算。
有谁知道这是怎么可能的?
我在互联网上找不到任何东西,即使它是相当基本的,我想。
提前致谢!
答案 0 :(得分:4)
虽然Tudor和gokhans的答案提供了想要的结果,但我认为有更优雅的解决方案。
以下内容适用于大多数Prolog实现:
operation(X, Y, Operator, Result):-
Goal =.. [Operator, X, Y],
Result is Goal.
SWI-Prolog允许定义custom arithmetic functions。以下代码扩展了上述内容,以便与来自其他模块的用户定义函数一起使用:
:- meta_predicate(operation(+,+,2,-)).
operation(X, Y, Module:Operator, Result):-
Goal =.. [Operator, X, Y],
Module:(Result is Goal).
请注意,在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.
答案 1 :(得分:-3)
你需要告诉Prolog,如果Op是'+',那么总和X和Y.你可以这样做
operation(X,Y, Op, Result) :-
Op = '+',
Result is X + Y
;
Op = '-',
Result is X - Y.
您可以增加操作次数。