Проблема, которую я обнаружил с вашим кодом во время компиляции:
; caught ERROR:
; The variable M occurs more than once in the LET.
Это потому, что Common Lisp (в общем) нечувствителен к регистру - считыватель преобразует все символы в верхний регистр, поэтому при чтении кода m
становится M
. Вы можете создавать символы нижнего регистра (используя, например, синтаксис |m|
), но это не очень распространено.
Когда вы переименовываете M
и m
, например, Mx
и mi
- код работает должным образом, печатает Increment
.