Ядро evaluator состоит из quote, ссылки на переменную, if, последовательности, lambda, применения, присваивания, определения, лексического связывания и фиксированных узлов управления.
Кратко
LISPEX
((lambda (x) (if #t x 0)) 42)Результат
OUTPUT
42Текущие гарантии
- У
ifобязательна ветвь else;beginи тела процедур сохраняют порядок слева направо. lambdaподдерживает фиксированные и точечные параметры;set!меняет существующую ячейку;defineсоздаёт или обновляет верхнеуровневую ячейку.quoteвозвращает неизменяемые литеральные данные; runtime не вычисляет их элементы.
Контракты форм
| Форма | Арность / вычисление | Результат или ошибка |
|---|---|---|
| quote | 1 datum; элементы не вычисляются | неизменяемый datum |
| if | test, consequent, alternate; сначала test | пакет выбранной ветви; E320 если test не одно значение |
| lambda | formals и 1..N форм тела | closure; E302 при неверной арности |
| set! | имя и RHS одного значения | ноль значений; E303 если имя не связано |
| let / letrec | список связываний и 1..N форм тела | последний пакет; E321 при чтении неинициализированного letrec |
Границы
- Удобные surface-формы относятся к справочнику производных форм.