Похоже, что вы пытаетесь войти в программу, подобную этой.
(if (/= 0 (mod 3 2))
(+ 7 9 11))
Здесь if
имеет синтаксис, подобный
(if (PREDICATE)
(RETURN-IF-PREDICATE-TRUE)
(RETURN-IF-PREDICATE-FALSE))
, где RETURN-IF-PREDICATE-FALSE
по умолчанию nil
, если не указано.
Если вы предпочитаете использовать cond
, тогда вы можете сделать
(cond
((/= 0 (mod 3 2)) (+ 7 9 11)))
Здесь cond
имеет синтаксис, подобный
(cond
((P1) (R1))
((P2) (R2))
...
)
где, если предикат P1
равен true, тогда возвращается R1
. В противном случае проверяется следующий предикат и т. Д.
Если в вашем коде, в вашем cond
отсутствует несколько скобок. В общем, вы делаете
;; (incorrect code)
(cond
(P1) do (+ 7 9 11))
, в котором отсутствуют круглые скобки вокруг пары предикат-результат и вокруг макроса do.
Кроме того, здесь нет смысла использовать do
.