Пролог Функтор - Вычислительный 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.