Комментарий начинается символом ';' и продолжается до конца строки. Пробелы, табуляции, переводы строки и страницы цифра = 0123456789 буква = +-.*/<=>!?:$%_&^~ | abcdefghijklmnopqrstuvwxyz | ABCDEFGHIJKLMNOPQRSTUVWXYZ | '\200'...'\377' _______________________________ Целое число: [+ | -] цифра цифра... Пример: 1234 +5678 -9876 _______________________________ Логическая константа: #f | #t Пример: #f #t _______________________________ Идентификатор: + | - | буква (буква | цифра)... Пример: lambda <=? _______________________________ Выражение: логическое | целое | идентификатор | 'выражение | (выражение выражение... [. выражение]) Пример: 123 'a (p q r) (p q . r) _______________________________ Защита от выполнения: (quote expr) | 'expr В качестве значения выдается невычисленный аргумент. Пример: (quote (a b c)) '(a b c)) _______________________________ Определение переменной: (define var expr...) Определяется переменная с именем var, и ее значением становится результат вычисления последнего из expr. Он же выдается в качестве значения всего выражения. Пример: (define x 5) (define f (lambda (x) (x x))) _______________________________ Группирование выражений: (begin expr...) Значение последнего выражения становится результатом. Все переменные, определяемые внутри выражения begin, являются локальными. Пример: (begin (define x 5) (lambda (z) (+ z x))) _______________________________ Создание функции (замыкания): (lambda (arg...) expr...) Возвращается функция с аргументами arg... и телом expr... Все используемые переменные приписываются в момент определения функции (контекст запоминается). Пример: (lambda (x) (cons x x)) _______________________________ Задание локальных определений: (let ((var val)...) expr...) Выражения val вычисляются, затем определяются новые переменные var, им приписываются вычисленные значения, после чего присходит вычисление expr. Значение последнего выражения становится результатом. Пример: (let ((x 5)) (lambda (z) (+ z x)))