Лисп/Синтаксис: различия между версиями

Материал из Викиучебника — открытых книг для открытого мира
Содержимое удалено Содержимое добавлено
Строка 1: Строка 1:
==Синтаксис==
<div style="max-width:52em;margin:1em auto 0 4%;">
<div style="max-width:52em;margin:1em auto 0 4%;">
Лингвистические термины вроде «предложений», «лексем», «морфем», «фонем» — выделяют закономерные и типичные конструкции и построения; они изучают ''внешний вид'' языка, а ни в коем случае не ''смысл'' частных выражений на языке.
Лингвистические термины вроде «предложений», «лексем», «морфем», «фонем» — выделяют закономерные и типичные конструкции и построения; они изучают ''внешний вид'' языка, а ни в коем случае не ''смысл'' частных выражений на языке.
Строка 13: Строка 12:
* '''Символ''' в Common Lisp обозначается любым рядом знаков без <code>().;'`</code> и без пробельных символов (табуляции, пробела, перевода строки…)
* '''Символ''' в Common Lisp обозначается любым рядом знаков без <code>().;'`</code> и без пробельных символов (табуляции, пробела, перевода строки…)


Число — это <code>9, <code>-9.0</code>, <code>1/9</code>, <code>#o777</code>, <code>#xFF3300</code>, <code>#B00000000/11111111</code>, <code>#C(7.25 9.01)</code>, <code>pi</code>, <code>(sqrt 2)</code> и т. п. «Список» — название для также знакомого понятия ряда, последовательности. А «символ»? Такое же фундаментальное понятие в формальной науке, как число в математике. Это может быть «функция», «переменная», «ссылка», «оператор», «особая мудрёная конструкция»… но всё это понятия не фундаментальные, а вспомогательные, контекстно навеваемые. В начале — знаки, их можно совмещать по правилам, совмещение знаков можно обозначить знаком, правила можно описать совмещением знаков.
«Число» — это <code>9</code>, <code>-9.0</code>, <code>1/9</code>, <code>#o777</code>, <code>#xFF3300</code>, <code>#B0000000.101/11111111.0110</code>, <code>#C(7.25 9.01)</code>, <code>pi</code>, <code>(sqrt 2)</code> и т. п. «Список» — представление явления ряда, последовательности. «Символ» же — такое же фундаментальное понятие в формальной науке, как число в математике. Это может быть «функция», «переменная», «ссылка», «оператор», «особая мудрёная конструкция»… но всё это понятия не фундаментальные, а вспомогательные, контекстно навеваемые. В начале — знаки, их можно совмещать по правилам, совмещение знаков можно обозначить знаком, правила можно описать совмещением знаков.


Подобно «знакам» (лексемам, морфемам и фонемам в человеческих языках), ''символы'' в Лиспе могут означать, представлять, делать самые разнообразные вещи.
Подобно «знакам» (лексемам, морфемам и фонемам в человеческих языках), ''символы'' в Лиспе могут означать, представлять, делать самые разнообразные вещи.

</div>
=== Формы ===
== Формы ==
<div style="max-width:52em;margin:1em auto 0 4%;">
<source lang=lisp>4</source>
<source lang=lisp>4</source>


Строка 27: Строка 25:
«Сумма 2 и 2». В Лиспе ''символ'' <code>+</code> несёт тот же смысл, что и слова «плюс», «сложить», «сумма» в русском.
«Сумма 2 и 2». В Лиспе ''символ'' <code>+</code> несёт тот же смысл, что и слова «плюс», «сложить», «сумма» в русском.


</div>


=== Префиксная запись ===
== Префиксная запись ==
<div style="max-width:52em;margin:1em auto 0 4%;">
Сразу после запуска clisp вы увидите приглашение к вводу выражений для вычисления. Попробуем вычислить несколько выражений:
Сразу после запуска clisp вы увидите приглашение к вводу выражений для вычисления. Попробуем вычислить несколько выражений:
{{console|> (+ 1 2)
{{console|> (+ 1 2)

Версия от 18:30, 9 мая 2011

Лингвистические термины вроде «предложений», «лексем», «морфем», «фонем» — выделяют закономерные и типичные конструкции и построения; они изучают внешний вид языка, а ни в коем случае не смысл частных выражений на языке.

Избегая инопланетную запись Бэкуса — Наура, определим внешний вид Лиспа по-русски:

  • Программа на Лиспе — это символьное выражение.
  • Символьное выражение — это атом либо cписок.
  • Список выделяется круглыми скобками.
    • Внутри списка — либо ничего, либо символьные выражения через пробел.
  • Атом — это число либо символ
  • Число — это представление (порою точное) значения на данном числовом поле.
  • Символ в Common Lisp обозначается любым рядом знаков без ().;'` и без пробельных символов (табуляции, пробела, перевода строки…)

«Число» — это 9, -9.0, 1/9, #o777, #xFF3300, #B0000000.101/11111111.0110, #C(7.25 9.01), pi, (sqrt 2) и т. п. «Список» — представление явления ряда, последовательности. «Символ» же — такое же фундаментальное понятие в формальной науке, как число в математике. Это может быть «функция», «переменная», «ссылка», «оператор», «особая мудрёная конструкция»… но всё это понятия не фундаментальные, а вспомогательные, контекстно навеваемые. В начале — знаки, их можно совмещать по правилам, совмещение знаков можно обозначить знаком, правила можно описать совмещением знаков.

Подобно «знакам» (лексемам, морфемам и фонемам в человеческих языках), символы в Лиспе могут означать, представлять, делать самые разнообразные вещи.

Формы

4

По данному выше определению: 4 — это число, стало быть атом, стало быть символьное выражение, стало быть программа на Лиспе. Программа ничего значительного не делает, лишь возвращает число 4. Попробуем другое символьное выражение:

(+ 2 2)

«Сумма 2 и 2». В Лиспе символ + несёт тот же смысл, что и слова «плюс», «сложить», «сумма» в русском.

Префиксная запись

Сразу после запуска clisp вы увидите приглашение к вводу выражений для вычисления. Попробуем вычислить несколько выражений:

> (+ 1 2)

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)).