(require 'debug)
(setq debug-on-quit t)
(setq x 2)
(setq n 3)
(setq r 1)
(while (< 0 n)
(setq n (- n 1))
(setq r (* r x))) ;; такая версия нравится
(defun power (x n)
(if (= 0 n)
1
(if (= 1 n)
x
(if (< 1 n)
(setq r (* r (power x (- n 1))))))))
(trace-function 'power) ;; Lisp nesting exceeds ‘max-lisp-eval-depth’ не понятно где я накосячил аж Emacs виснет.
(power 2 3)
;;Этот алгоритм, просто супер, но результат, зараза, 7.9999999998
(defun pow (x n)
(exp (* n (log x))))
(pow 2 3)
такие вот мысли. Нужно поменять expt x y в коде из-за её
If both arguments are integers and y is positive, the result is an integer; in this case, overflow causes truncation, so watch out. If x is a finite negative number and y is a finite non-integer, expt returns a NaN.