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 раза на каждом уровне рекурсии