1.2 Условные обозначения
-Для выразительности в книге используется некоторое количество условных +
Для выразительности в книге используется некоторое количество условных обозначений. -
+
1.2.1 Десятичные числа
-Все числа в данной книге представлены в десятичной системе счисления +
Все числа в данной книге представлены в десятичной системе счисления кроме мест, где система счисления указывается явно. (Конечно, десятичная система обычно и используется в работе. К несчастью, в некоторых других диалектах Lisp’а, в частности MacLisp’а, нотацией по умолчанию является восьмеричная (основание 8), вместо десятичной, и использование десятичной системы в описании Common Lisp’а в историческом контексте слегка необычно!) -
+
1.2.2 Nil, False и пустой список
-В Common Lisp’е, как и во многих диалектах Lisp’а, символ В Common Lisp’е, как и во многих диалектах Lisp’а, символ nil используется
для представления пустого списка и булева значения «ложь». Пустой список,
конечно, может, также быть записан так: (); это обычно означает то же,
@@ -61,13 +61,13 @@
+
+
- Любой объект данных, не являющийся Любой объект данных, не являющийся nil преобразуется в булево
значение «не ложь», которое является «истиной». Символ t обычно
@@ -99,10 +99,10 @@
+
Выполнение Lisp кода называется вычисление, так как выполнение части
+ Выполнение Lisp кода называется вычисление, так как выполнение части
кода обычно возвращает некоторый объект данных, называемый значением,
созданным этим кодом. Для обозначения вычисления в примерах
используется символ ⇒ . Например,
+
- означает «результатом вычисления кода (+ 4 5) является (или будет, или был)
+ означает «результатом вычисления кода (+ 4 5) является (или будет, или был)
9».
- Символ → используется в примерах для обозначения раскрытия
+ Символ → используется в примерах для обозначения раскрытия
макросов. Например, 1.2.2 (defun three () 3)
;Обозначает пустой список в параметре
-
-
-(append ’() ’()) ⇒ () ;Обозначает использование пустых списков
-
-1.2.2 nil) ⇒ t ;Подчёркивает использование булева значения «ложь»
-1.2.2 (get ’nil ’color) ;Подчёркивает использование символа 1.2.2 nil
, но
необязательно t.
-1.2.3 Вычисление, Раскрытие и Равенство
-
+
означает «результатом раскрытия формы с макросом (push x v) является +
означает «результатом раскрытия формы с макросом (push x v) является (setf v (cons x v))». Это подразумевает, что две части кода делают одно и то же действие; вторая часть кода является определением того, что делает первая часть. -
Символ ≡ используется в примерах для обозначения эквивалентности +
Символ ≡ используется в примерах для обозначения эквивалентности (тождественности). Например,
-означает «значение и побочные эффекты вычисления формы (gcd x +
означает «значение и побочные эффекты вычисления формы (gcd x (gcd y z)) всегда являются такими же, как и значение и побочные эффекты (gcd (gcd x y) z) для любых значений переменных x, y и z». Это подразумевает, что две части кода делают одинаковые вещи. Однако ни одна из них не определяет другую путём раскрытия макросов. -
+
1.2.4 Ошибки
-Когда в книге для некоторых возникающих ситуаций указывается, что «это +
Когда в книге для некоторых возникающих ситуаций указывается, что «это ошибка», это значит:
- Некорректная Common Lisp программа должна вызывать данную
@@ -171,11 +171,11 @@
1.2.4 Определение этой ошибки реализация Common Lisp’а может не производить. Конечно, разработчикам рекомендуется детектирование таких ошибок, когда это необходимо.
Однако, это не говорит о том, что некоторые реализации не могут +
Однако, это не говорит о том, что некоторые реализации не могут определять побочные эффекты и результаты для данных ситуаций. Смысл в том, что программа для Common Lisp’а не может быть корректной и зависеть от таких побочных эффектов и результатов. -
В некоторых ситуациях, если это обозначено в книге, «сигнализируется +
В некоторых ситуациях, если это обозначено в книге, «сигнализируется ошибка», и это значит:
- Если данная ситуация случилась, будет сигнализирована ошибка
@@ -188,7 +188,7 @@
1.2.4
- Каждая реализация Common Lisp’а должна определять такую ошибку.
В местах, где встречаются выражения «должен» или «не должен» +
В местах, где встречаются выражения «должен» или «не должен» или «невозможен», если условие не выполняется, подразумевается «это ошибка». Например: если аргумент «должен быть символом» и аргумент не символ, тогда «это ошибка». Во всех случаях, где ошибка @@ -198,7 +198,7 @@
1.2.4
1.2.4 [Функция] sample-function arg1 arg2 &optional arg3 arg4
-Функция Функция sample-function складывает вместе arg1 и arg2 и полученную
сумму умножает на arg3. Если arg3 не задан или равен nil, умножения не
@@ -227,15 +227,15 @@
1.2.4 (sample-function 3 4) ⇒ (7 foo)
-
(sample-function 1 2 2 ’bar) ⇒ (6 bar)
-
+
-
В целом, (sample-function x y) ≡ (list (+ x y) ’foo).
+
В целом, (sample-function x y) ≡ (list (+ x y) ’foo).
__________________________________________________________________________
-
+
-
Производит вычисление каждой формы в последовательности, как неявный
1.2.4 (setq *sample-variable* 3)
-
+
Функция Функция sample-function складывает вместе arg1 и arg2 и полученную
сумму умножает на arg3. Если arg3 не задан или равен nil, умножения не
@@ -227,15 +227,15 @@
+
- В целом, (sample-function x y) ≡ (list (+ x y) ’foo).
+ В целом, (sample-function x y) ≡ (list (+ x y) ’foo).
__________________________________________________________________________
1.2.4
(sample-function 3 4) ⇒ (7 foo)
-
-
-(sample-function 1 2 2 ’bar) ⇒ (6 bar)
+
Производит вычисление каждой формы в последовательности, как неявный
1.2.4
+
(setq *sample-variable* 3)
-
Вычисляет выражения, как тело prog с переменной var связанной со
@@ -357,12 +357,12 @@
+
@@ -373,7 +373,7 @@ Функции, переменные, именованные константы, специальные формы и
+ Функции, переменные, именованные константы, специальные формы и
макросы описываются с помощью особого типографского формата.
Таблица 1.1 показывает способ, которым документируются Common Lisp
@@ -383,10 +383,10 @@ Иногда две и более связанных функций описываются в одном
+ Иногда две и более связанных функций описываются в одном
комбинированном параграфе. В такой ситуации заголовки для всех функций
отображаются совместно с последующим описанием.
- Текущий код (включая текущие имена функций) предоставляется в
+ Текущий код (включая текущие имена функций) предоставляется в
данном шрифте: (cons a b). Имена, встречающиеся в частях кода
(метапеременные) пишутся наклонным шрифтом. В описании функции
имена параметров предоставляются в наклонном шрифте. Слово &optional в
@@ -397,13 +397,13 @@ Таблица Таблица 1.2 показывает способ, с помощью которого документируются
глобальные переменные. Первая строка определяет имя переменной и
тот факт, что это переменная. Все глобальные переменные Common
Lisp’а имеют имена, начинающиеся и заканчивающиеся звёздочкой
(asterisk).
- Таблица Таблица 1.3 отображает способ, с помощью которого документируются
константы. Первая строка определяет имя константы и тот факт, что это
константа. (Константа является просто глобальной переменной за
@@ -412,7 +412,7 @@ Таблицы Таблицы 1.4 и 1.5 показывают документирование специальных форм и
макросов, предназначения которых тесно связаны. Они очень сильно
@@ -423,7 +423,7 @@ В описании специальных форм или макросов, наклонные слова
+ В описании специальных форм или макросов, наклонные слова
обозначают соответствующую часть формы, которая вызывает специальную
форму или макрос. Круглые скобки означают сами себя, и таким же образом
должны быть указаны при вызове специальной формы или макроса.
@@ -444,7 +444,7 @@ Двойные скобки, [[ и ]], показывают, что может использоваться любое
+ Двойные скобки, [[ и ]], показывают, что может использоваться любое
количество альтернатив перечисленных в скобках в любом порядке, но
каждая альтернатива может использоваться только один раз, если только за
ней нет звёздочки. Например,
+
означает, что, как максимум один x, любое количество y, и как максимум один z
+ означает, что, как максимум один x, любое количество y, и как максимум один z
могут в любом порядке использоваться между p и q.
- Стрелочка вниз, ↓, показывает, что ниже будет раскрываться данная
+ Стрелочка вниз, ↓, показывает, что ниже будет раскрываться данная
форма. Это делает запись [[ ]] более читаемой. Если X является некоторым
нетерминальным символом стоящим слева в некоторой БНФ форме, правая
часть должна быть подставлена вместо символа ↓X во всех случаях его
@@ -473,29 +473,29 @@
+
- вместе составляют эквивалент для предыдущего примера.
- В последнем примере в таблице вместе составляют эквивалент для предыдущего примера.
+ В последнем примере в таблице 1.5, рассматривается использование
записи с точкой. Точка, встречающаяся в выражении (sample-macro var
. body), означает то, что имя body является списком форм, и не
одиночной формой в конце списка. Эта запись часто используется в
примерах.
- В заглавной строке в таблице В заглавной строке в таблице 1.5, запись [[ ]] означает, что может
указываться любое количество деклараций, но максимум одна строка
документации (которая может указываться перед, после, или в где-то в
середине любого определения).
-
+
Термин «Лисповый считыватель (читатель лиспового кода)» не относится к
+ Термин «Лисповый считыватель (читатель лиспового кода)» не относится к
вам, читатель этой книги, и не к какому-либо человеку читающему код на
Lisp’е, а именно к Lisp процедуре, которая называется read. Она читает
@@ -504,10 +504,10 @@
+
В Common Lisp’е некоторые строковые символы используется в
+ В Common Lisp’е некоторые строковые символы используется в
определённых целях. Полное описание синтаксиса можно прочесть
в главе 22, но небольшой обзор здесь может быть также полезен:
@@ -584,14 +584,14 @@ Квадратные и фигурные скобки, вопросительный и восклицательные
+ Квадратные и фигурные скобки, вопросительный и восклицательные
знаки, ([, ], {, }, ? и !) ни для каких целей не используются в стандартном
Common Lisp синтаксисе. Эти символы явно зарезервированы для
пользователей, преимущественно для использования в качестве
макро-символов для пользовательских расширений синтаксиса (см.
раздел 22.1.3).
- Была введена переменная Была введена переменная readtable-case. Данные настройки позволяют
именам символов быть регистрозависимыми. Однако, поведение по
умолчанию такое, как описано в предыдущем параграфе. В любом случае,
diff --git a/clmse20.html b/clmse20.html
index 5b3fcd1..77399d3 100644
Binary files a/clmse20.html and b/clmse20.html differ
diff --git a/clmse21.html b/clmse21.html
index 35cb894..744cf39 100644
--- a/clmse21.html
+++ b/clmse21.html
@@ -7,7 +7,7 @@
-
+
1.2.4
(sample-macro x (return (+ x x))) ⇒ 86
-
-
-(sample-macro var . body) → (prog ((var 43)) . body) 1.2.4
1.2.5 Описания функций и других объектов
-1.2.5
1.2.5 &key, указывающий на то, что могут аргументы могут приниматься по
имени. (&optional/&rest/&key синтаксис фактически используется в
определениях Common Lisp функций для этих целей).
-
1.2.5
1.2.5
1.2.5 22.4.
-
1.2.5
1.2.5
p [[ ↓xyz-mixture]] q
-xyz-mixture ::= x | {y}* | z 1.2.6 Лисповый считыватель
-1.2.6
1.2.7 Обзор синтаксиса
-1.2.7
-
12.5.2
Гиперболический синус (ez −e−z)∕2
+class="tabbing">Гиперболический синус (e z −e−z)∕2
+class="tabbing">Гиперболический косинус Гиперболический косинус (e z + e−z)∕2
Гиперболический тангенс | (e z −e−z)∕(ez + e−z) |
Гиперболический арксинус | Гиперболический арксинус | log
@@ -572,24 +572,24 @@ 12.5.2 Гиперболический арккосинус | Гиперболический арккосинус | log
| |
+
Гиперболический арктангенс | Гиперболический арктангенс | log |
+