76 lines
2.9 KiB
Plaintext
76 lines
2.9 KiB
Plaintext
Комментарий начинается символом ';' и продолжается до конца строки.
|
||
Пробелы, табуляции, переводы строки и страницы
|
||
|
||
цифра = 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)))
|