Лисп/Синтаксис: различия между версиями
Ashikbot (обсуждение | вклад) Уточнение ключа сортировки |
Ramir (обсуждение | вклад) мНет описания правки |
||
Строка 8: | Строка 8: | ||
*'''Символьное выражение''' — это ''атом'' либо ''cписок''. |
*'''Символьное выражение''' — это ''атом'' либо ''cписок''. |
||
*'''Список''' выделяется круглыми скобками. |
*'''Список''' выделяется круглыми скобками. |
||
** Внутри списка — либо ничего, либо |
** Внутри списка — либо ничего, либо ''символьные выражения'' через пробел. |
||
*'''Атом''' — это ''число'' либо ''символ'' |
*'''Атом''' — это ''число'' либо ''символ'' |
||
* '''Число''' — это представление (порою точное) значения на данном числовом поле. |
|||
* '''Число''' выражается привычно: 1, 2, 2.71828, 1/2… разве только в десятичных дробях дробная часть отделяется точкой. |
|||
* '''Символ''' в Common Lisp обозначается любым рядом знаков без <code>().;'`</code> и без пробельных символов (табуляции, пробела, перевода строки…) |
* '''Символ''' в Common Lisp обозначается любым рядом знаков без <code>().;'`</code> и без пробельных символов (табуляции, пробела, перевода строки…) |
||
Число — это |
Число — это 9, <code>-9.0</code>, <code>1/9</code>, <code>#o777</code>, <code>#xFF3300</code>, <code>#B00000000/11111111</code>, #C(1.23 3), <code>pi</code> и т. п. «Список» — название для также знакомого понятия ряда, последовательности. А «символ»? Такое же фундаментальное понятие в формальной науке, как число в математике. Это может быть «функция», «переменная», «ссылка», «оператор», «особая мудрёная конструкция»… но всё это понятия не фундаментальные, а вспомогательные, контекстно навеваемые. В начале — знаки, их можно совмещать по правилам, совмещение знаков можно обозначить знаком, правила можно описать совмещением знаков. |
||
* Есть некие ''знаки'' со смыслами. |
|||
* Знаки можно как-то совмещать. |
|||
* Совмещение как-то образует составной смысл. |
|||
** Часто важна очерёдность знаков. |
|||
** Часто можно совмещения совмещать и дальше. |
|||
Подобно «знакам» (лексемам, морфемам и фонемам в человеческих языках), ''символы'' в Лиспе могут означать, представлять, делать самые разнообразные вещи. |
Подобно «знакам» (лексемам, морфемам и фонемам в человеческих языках), ''символы'' в Лиспе могут означать, представлять, делать самые разнообразные вещи. |
Версия от 10:32, 8 мая 2011
Синтаксис
Лингвистические термины вроде «предложений», «лексем», «морфем», «фонем» — выделяют закономерные и типичные конструкции и построения; они изучают внешний вид языка, а ни в коем случае не смысл частных выражений на языке.
Избегая инопланетную запись Бэкуса — Наура, определим внешний вид Лиспа по-русски:
- Программа на Лиспе — это символьное выражение.
- Символьное выражение — это атом либо cписок.
- Список выделяется круглыми скобками.
- Внутри списка — либо ничего, либо символьные выражения через пробел.
- Атом — это число либо символ
- Число — это представление (порою точное) значения на данном числовом поле.
- Символ в Common Lisp обозначается любым рядом знаков без
().;'`
и без пробельных символов (табуляции, пробела, перевода строки…)
Число — это 9, -9.0
, 1/9
, #o777
, #xFF3300
, #B00000000/11111111
, #C(1.23 3), pi
и т. п. «Список» — название для также знакомого понятия ряда, последовательности. А «символ»? Такое же фундаментальное понятие в формальной науке, как число в математике. Это может быть «функция», «переменная», «ссылка», «оператор», «особая мудрёная конструкция»… но всё это понятия не фундаментальные, а вспомогательные, контекстно навеваемые. В начале — знаки, их можно совмещать по правилам, совмещение знаков можно обозначить знаком, правила можно описать совмещением знаков.
Подобно «знакам» (лексемам, морфемам и фонемам в человеческих языках), символы в Лиспе могут означать, представлять, делать самые разнообразные вещи.
Формы
4
По данному выше определению: 4 — это число, стало быть атом, стало быть символьное выражение, стало быть программа на Лиспе. Программа ничего значительного не делает, лишь возвращает число 4. Попробуем другое символьное выражение:
(+ 2 2)
«Сумма 2 и 2». В Лиспе символ +
несёт тот же смысл, что и слова «плюс», «сложить», «сумма» в русском.
Префиксная запись
Сразу после запуска clisp вы увидите приглашение к вводу выражений для вычисления. Попробуем вычислить несколько выражений:
3
> (+ 5 (- 4 3))
6
Для не привыкших к префиксной форме то, что мы только что ввели должно показаться несколько странным. Однако, легко догадаться что в первом случае мы вычисляли выражение , а во втором . Так или иначе, с префиксной записью неизбежно знакомы даже программисты на Си:
int plus (x, y) {
return x + y;
}
int minus (x, y) {
return x - y;
}
int main() {
return plus(5, minus (4, 3));
}
Как видим, использование определённой функции в Си также префиксное: plus (5, minus (4, 3))
. В Лиспе имя функции вносится в скобки (в голову списка), а запятые опускаются: (plus 5 (minus 4 3))
.