gpt4 book ai didi

Prolog动态算术表达式

转载 作者:行者123 更新时间:2023-12-02 11:33:06 26 4
gpt4 key购买 nike

我是 Prolog 新手,想定义一个简单的谓词,它根据我选择在算术表达式中使用的函数来计算结果。

所以,这是我的想法:

operation(X,Y, Op, Result):-
Result is X Op Y.

现在,我期待 Prolog 会这样:

operation(3,4,'+', X).
X = 7.

但正如您可能猜到的那样,Prolog 无法将 Op 识别为算术运算。有谁知道这是怎么可能的吗?

我在互联网上找不到任何东西,尽管我认为这是相当基本的。

提前致谢!

最佳答案

尽管 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.

关于Prolog动态算术表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22981805/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com