Пролог Функтор - Вычислительный x^y

Я новичок в прологе и пытаюсь научиться программировать. Я хочу знать, как вычислить x^y в Прологе оба являются целыми числами.

Я точно знаю, что это происходит примерно так:

% exp(y,x,z) <- z is x**y

1 ответ

Попробуй это:

?- [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 может быть неточным.

до свидания

PS: есть предложение для нативной целочисленной степенной функции, она будет использовать оператор (^)/2. Для получения дополнительной информации см.:

http://www.complang.tuwien.ac.at/ulrich/iso-prolog/dtc2

Собственная функция power может дать лучшие результаты, если приведенная выше реализация может привести к переполнению или неточным результатам. Вот пример с другими результатами (SWI Prolog 5.11.33):

? - X является круглым (123,0**45,0).
X = 11110408185131957010659080963921001637101840276079092263812695592440203675146350059875116350059871151325184.

? - X 123 ^ 45.
X = 11110408185131956285910790587176451918559153212268021823629073199866111001242743283966127048043.

Другие вопросы по тегам