Проверьте запуском
LISPEX
((lambda (x) (if #t x 0)) 42)Наблюдаемый результат
OUTPUT
42Как рассуждать
- У
ifобязательна ветвьelse;beginи тела процедур сохраняют порядок слева направо. lambdaподдерживает фиксированные и точечные параметры;set!меняет существующую ячейку;defineсоздаёт или обновляет верхнеуровневую ячейку.quoteвозвращает неизменяемые литеральные данные; вычислитель не обрабатывает их элементы как выражения.
Контракты форм
| Форма | Арность / вычисление | Результат или ошибка |
|---|---|---|
quote | один datum; элементы не вычисляются | неизменяемые данные |
if | условие, истинная и ложная ветви; сначала условие | пакет выбранной ветви; E320, если условие даёт не одно значение |
lambda | параметры и 1..N форм тела | замыкание; E302 при неверной арности |
set! | имя и правая часть с одним значением | ноль значений; E303, если имя не связано |
let / letrec | список связываний и 1..N форм тела | последний пакет; E321 при раннем чтении letrec |
Частая ошибка
Удобные поверхностные формы перечислены в справочнике производных форм.
Куда дальше
Держите эту страницу рядом при написании кода. За последовательным объяснением вернитесь к карте синтаксиса или соответствующей главе.