我尝试计算递归函数:
f(x, y) = 0 if x = 0;
f(x, y) = 1 if x = 1;
f(x, y) = y*y*f(x-2,y) if x>1.
我试过这种方式:
f(0,_,0).
f(1,_,1).
f(X,Y,Z):-
X>1,
XX is X-2,
ZZ = Y*Y*Z,
f(XX,Y,ZZ).
我只能获得真/假。如何计算此函数的值?
非常感谢!
答案 0 :(得分:3)
如果您只是使用CLP(FD)约束,则可以轻松将其转换为真正的关系:
:- use_module(library(clpfd)).
f(0, _, 0).
f(1, _, 1).
f(X, Y, Z):-
X #> 1,
XX #= X-2,
Z #= Y*Y*ZZ,
f(XX, Y, ZZ).
示例查询及其结果:
?- f(X, 5, Z).
X = Z, Z = 0 ;
X = Z, Z = 1 ;
X = 2, Z = 0 ;
X = 3, Z = 25 .
答案 1 :(得分:1)
你的最后一条规则对我来说有点奇怪。我会尝试这样的事情:
f(X,Y,Z) :-
X > 1,
XX is X-2,
f(XX,Y,ZZ),
Z is Y * Y * ZZ.