В дополнение к принятому ответу, обратите внимание, что с помощью редактора с автоматическим отступом (например, в Emacs) можно легко обнаружить такие ошибки.Ваш код автоматически отступает следующим образом:
(dotimes (x 10)
(if (oddp x)
(format t "x is odd~%"))
(format t "x is even~%"))
Выражения if
и второе format
выровнены по вертикали (это братья и сестры в дереве с корнем в dotimes
), тогда как вы хотите второе format
произойдет, только если тест не пройден, на той же глубине, что и первый.
Замечание
Вы также можете указать некоторый код:
(format t
(if (oddp x)
"x is odd~%"
"x is even~%"))
Или даже:
(format t
"x is ~:[even~;odd~]~%"
(oddp x))
Вышеприведенное опирается на условное форматирование .