gpt4 book ai didi

recursion - Prolog递归程序不返回值

转载 作者:行者123 更新时间:2023-12-01 12:28:07 26 4
gpt4 key购买 nike

我还是 Prolog 的新手,我遇到了一个我不知道如何修复的错误。我编写了一个简单的求幂程序,如下所示:

exp(b, 0, R) :- R is 1.         % non-recursive case: exponent is 0
exp(0, e, R) :- R is 0. % non-recursive case: base is 0
exp(Base, Exponent, Result) :- % recurse if base and exponent are non-negative
Base >= 0,
Exponent >= 0,
E1 is Exponent-1,
exp(Base, E1, R1),
Result is Base*R1.

这编译得很好,但是当我运行它并给它一个查询时,比如 exp(2, 4, X)。我遇到了以下输出:

?- exp(2, 4, X).
false.

我做错了什么吗?或者是以某种我不知道的方式格式化结果的问题?

最佳答案

您混淆了变量原子。如果您简单地将两个非递归子句更改为:

exp(_, 0, 1).exp(0, _, 0).

事实上,我建议更改整个程序以在整个过程中使用CLP(FD) 约束:

exp(_, 0, 1).exp(0, _, 0).exp(Base, Exponent, Result):-    Base #>= 0,    Exponent #>= 0,    E1 #= Exponent-1,    exp(Base, E1, R1),    Result #= Base*R1.

现在例如下面至少产生了一个解决方案:

?- exp(2, X, 16).X = 4

而我们之前有:

?- exp(2, X, 16).>=/2: Arguments are not sufficiently instantiated

还要注意最一般的查询:

?- exp(X, Y, Z).Y = 0,Z = 1 ;X = Z, Z = 0 ;X = Z,Y = 1,Z in 0..sup ;X = Z, Z = 0,Y in 0..sup,_G801+1#=Y,_G801 in -1..sup .

关于recursion - Prolog递归程序不返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37528831/

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