Code Review
Compare your solutions
#| Для этого упражнения нет проверок.
Любое решение будет считаться успешным ответом. |#
(define (expmod base exp m)
(cond ((= exp 0) 1)
((even? exp)
(remainder (* (expmod base (/ exp 2) m)
(expmod base (/ exp 2) m))
m))
(else
(remainder (* base (expmod base (- exp 1) m))
m))))
; Из-за такой записи действительно процесс порядка меняется. Все связано с аппликативным порядком вычислений в Лиспе. Процедура expmod будет выполнена 2 раза на каждом уровне рекурсии