Я новичок в прологе и пытаюсь научиться программировать. Я хочу знать, как вычислить x^y
в Прологе, оба из которых являются целыми числами.
Я точно знаю, что это происходит примерно так:
% exp(y,x,z) <- z is x**y
Я новичок в прологе и пытаюсь научиться программировать. Я хочу знать, как вычислить x^y
в Прологе, оба из которых являются целыми числами.
Я точно знаю, что это происходит примерно так:
% exp(y,x,z) <- z is x**y
Попробуй это:
?- [user].
exp(X,Y,Z) :- Z is round(X**Y).
Yes
?- exp(3,4,R).
R = 81
Отличие от вашего решения:
1) Оператор (:-)/2 обычно используется в Прологе для определения правил, а не оператор (->)/2.
2) (* * )/2 дает число с плавающей запятой. Есть несколько способов преобразовать число с плавающей запятой в целое число. Помимо floor/1 и truncate/1, функция round/1, вероятно, работает здесь лучше всего, так как результат (**)/2 может быть неточным.
до свидания
P.S.: Есть предложение для собственной целочисленной функции степени, она будет использовать оператор (^)/2. Для получения дополнительной информации см.:
http://www.complang.tuwien.ac.at/ulrich/iso-prolog/dtc2#pow
Собственная функция мощности может давать лучшие результаты, когда приведенная выше реализация может столкнуться с переполнением или неточными результатами. Вот пример с другими результатами (SWI Prolog 5.11.33):
?- X круглое (123,0 ** 45,0).
X = 11110408185131957010659080963921001637101840276079092263812695592440203675146350059871151325184.
?- X is 123^45.
X = 11110408185131956285910790587176451918559153212268021823629073199866111001242743283966127048043.
(^)/2
стало стандартным!
- person false; 17.02.2012