gpt4 book ai didi

parameters - 如何将谓词作为参数传递给 Prolog 中的另一个谓词?

转载 作者:行者123 更新时间:2023-12-04 17:18:50 25 4
gpt4 key购买 nike

我有这 3 个谓词:

times(X, Y):-
Result is X * Y.
minus(X, Y):-
Result is X - Y.
plus(X, Y):-
Result is X + Y.

我想通过例如 times(2,2)plus(X, Y)像这样 plus(times(2,2), minus(X, Y)) .

最佳答案

首先,您需要了解 Prolog 谓词实际描述的是什么:它们不是函数,而是值之间的关系。所以如果你想有一个加法谓词,这需要是一个带三个参数的谓词:plus(A, B, Sum) .因此,在 Prolog 中,结果不像在许多其他语言中那样免费显示。

代替

plus(X, Y):-
Result is X + Y.

你需要写
plus(X, Y, Result) :-
Result is X + Y.

接下来你想要的是进一步传递中间值。在支持函数的语言中,这是一项非常容易的任务。但是在 Prolog 中,函数符号是未解释的。因此,要么您对关系中的所有内容进行编码,要么实现您自己的 (is)/2 版本。 .
对于初学者,宁可坚持第一个选项。因此,而不是
..., plus(times(2,2), minus(X, Y)) ...

现在写
..., times(2, 2, R), plus(R, minus(X, Y), S), ...

S作为最终结果。

请注意,如果直接在关系中编码表达式,则必须引入中间变量,如 R以上。

很明显,对于这样的目的,(直接)关系符号不太优雅。对于非常精确的区域,Prolog 也提供表达式,特别是 (is)/2然后在更一般的设置 library(clpfd) .

但是,作为初学者,最好先习惯关系表示法。学习 successor arithmetics 可能是一个更好的主意第一的。使用前 library(clpfd) 并在使用之前 (is)/2 .

关于parameters - 如何将谓词作为参数传递给 Prolog 中的另一个谓词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26453574/

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