Пытаюсь написать хвостовой рекурсей быстрое возведение в степень:
(defun fastexpt-iter (n p count)
(format t "n: ~A p: ~A count: ~A ~%" n p count)
(if (= 1 p)
count
(if (evenp p)
(fastexpt-iter n (/ p 2) (* count count))
(fastexpt-iter n (1- p) (* n count)))))
(defun fastexpt (n p)
(if (zerop p)
1
(if (evenp p)
(fastexpt-iter n p n)
(fastexpt-iter n p 1))))
Не работает. Что я делаю не так?
Пишу эту функцию, потому что не уверен, что встроенная работает по быстрому алгоритму. Мне необходима функция для целых степеней, которая бы быстро возводила числа в степень по модулю. Есть ли в языке такая функция?