虽然 Tudor 和 gokhans 的答案提供了想要的结果,但我认为还有一个更优雅的解决方案。
便携式解决方案
以下内容适用于大多数 Prolog 实现:
operation(X, Y, Operator, Result):-
Goal =.. [Operator, X, Y],
Result is Goal.
扩展但 SWI-Prolog 特定的解决方案
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.