gpt4 book ai didi

prolog - 递减 Prolog 中的相同变量

转载 作者:行者123 更新时间:2023-12-04 02:07:03 30 4
gpt4 key购买 nike

像这样:

decr(X, X) :-
X is X-1.

我想用它来递减父规则中的数字,如果这个数字等于 0,例如,父规则返回 false。

最佳答案

Prolog 是声明性的:声明性语言的一个特性是一旦设置了一个变量,就不能再给它另一个值。在 Prolog 中,回溯当然可以“取消接地”一个变量,而且你可以将一个部分接地的表达式分配给一个变量(比如 X=f(1,_)),但是当你深入调用时堆栈,每个表达式只能进一步接地

因此:您必须使用另一个变量。喜欢:

decr(X,NX) :-
NX is X-1.

这也是合乎逻辑的:这里你定义了decr(X,X) 并且由于Prolog 中谓词的参数没有输入/输出方向,不清楚是否你想像 decr(4,3)decr(X,3)decr(4,X) 这样调用它>decr(X,Y)。那么 Prolog 如何“知道”您的第二个 X 应该是“新的 X”?因此,它是 Prolog 的一个“基本属性”,您不能使用 X,调用谓词,突然间 X 具有不同的值(但是它可以 - 如前所述之前 - 进一步接地,但整数不能进一步接地)。

它会总是出错或失败的原因是,要么 X 没有被实例化:(比如 decr(_,_) ) 在这种情况下,Prolog 无法计算 X is _-1,或者您已经为其中一个参数指定了一个数字 (decr(X,3), decr( 4,X)decr(3,3)),但在那种情况下,您要求两个操作数可以统一(因为它们都是 X)和同时相差一个,矛盾。

关于prolog - 递减 Prolog 中的相同变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42466637/

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