переменная cond не имеет значения - PullRequest
0 голосов
/ 02 мая 2019

Я новичок в Лиспе.Я просто хочу создать короткую программу.Речь идет о тестировании условия и делать что-то, когда это правда.Поэтому, если 3 по модулю 2 не соответствует действительности (что, очевидно, не соответствует действительности), я хочу вывести результат 7 + 9 + 11.Я получаю ошибку *** - COND: переменная / = не имеет значения.

Я уже пытался изменить cond на когда.Но это не сработало, и я получаю ту же ошибку.

(cond (/ = 0 (mod 3 2))

do (+ 7 9 11)

)

Я ожидаю 27 как результат, а не ошибку.

1 Ответ

1 голос
/ 02 мая 2019

Похоже, что вы пытаетесь войти в программу, подобную этой.

(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.

...