функция питания в прологе

Это не отвечает на вопрос непосредственно, но почему в мире кто-либо использовал бы

x = x++;

?

Это полностью побеждает цель post-increment/pre-increment оператора.

7
задан false 1 June 2014 в 23:38
поделиться

1 ответ

Y не уменьшается, вы не можете использовать предикаты, такие как функции. Вы также должны объединить Z с результатом умножения.

pow(_,0,1).

pow(X,Y,Z) :- Y1 is Y - 1,
              pow(X,Y1,Z1), Z is Z1*X.

Существует также встроенная функция мощности, которая будет работать намного быстрее:

pow2(X,Y,Z) :- Z is X**Y.

Также обратите внимание, что pow не является последним вызовом и не может быть оптимизировано для использования только одного кадр стека. Вы должны переформулировать его так:

pow3(X,Y,Z) :- powend(X,Y,1,Z),!.

powend(_,0,A,Z) :- Z is A.
powend(X,Y,A,Z) :- Y1 is Y - 1, A1 is A*X, powend(X,Y1,A1,Z).
17
ответ дан 6 December 2019 в 09:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: