Мне нужно создать предикат Пролога для степени двойки с натуральными числами. Натуральные числа: 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).
И он отлично работает с первым примером, но во второй входит в бесконечный цикл..
Как это исправить?