【发布时间】:2012-04-02 04:09:50
【问题描述】:
我需要使用自然数为 2 的幂创建一个 Prolog 谓词。 自然数有:0, s(0), s(s(0)) 等等..
例如:
?- pow2(s(0),P).
P = s(s(0));
false.
?- pow2(P,s(s(0))).
P = s(0);
false.
这是我的代码:
times2(X,Y) :-
add(X,X,Y).
pow2(0,s(0)).
pow2(s(N),Y) :-
pow2(N,Z),
times2(Z,Y).
它与第一个示例完美配合,但在第二个示例中进入无限循环..
我该如何解决这个问题?
【问题讨论】:
标签: prolog exponentiation failure-slice successor-arithmetics non-termination