Files
retrobsd/src/cmd/scm/Syntax.txt
2014-04-09 14:27:18 +01:00

76 lines
2.9 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Комментарий начинается символом ';' и продолжается до конца строки.
Пробелы, табуляции, переводы строки и страницы
цифра = 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)))