Permalink
Browse files

Fixed #7

  • Loading branch information...
1 parent afee13d commit bfc3092de8c01484868efe810101ed54a0e46cb3 @html html committed Jul 7, 2013
Showing with 159 additions and 152 deletions.
  1. +25 −21 chapter-05.tex
  2. +14 −13 chapter-06.tex
  3. +5 −5 chapter-07.tex
  4. +1 −1 chapter-08.tex
  5. +2 −2 chapter-09.tex
  6. +11 −10 chapter-10.tex
  7. +2 −2 chapter-11.tex
  8. +2 −1 chapter-12.tex
  9. +10 −10 chapter-13.tex
  10. +6 −6 chapter-14.tex
  11. +1 −1 chapter-15.tex
  12. +4 −4 chapter-16.tex
  13. +15 −15 chapter-17.tex
  14. +2 −2 chapter-18.tex
  15. +10 −10 chapter-19.tex
  16. +9 −9 chapter-20.tex
  17. +1 −1 chapter-22.tex
  18. +1 −1 chapter-23.tex
  19. +8 −9 chapter-24.tex
  20. +4 −4 chapter-25.tex
  21. +1 −1 chapter-26.tex
  22. +11 −11 chapter-27.tex
  23. +7 −7 chapter-28.tex
  24. +1 −1 chapter-29.tex
  25. +1 −1 chapter-31.tex
  26. +5 −4 chapter-32.tex
View
@@ -12,7 +12,7 @@ \chapter{Функции}
стандарте, являются именами функций. Все базовые типы данных полностью определены в
терминах функций, работающих с ними. Даже мощная объектная система языка Lisp построена на
концептуальном развитии понятий функции и обобщённой функции, которые будут описаны в
-главе 16.
+главе~\ref{ch:16}.
В конце концов, несмотря на важность макросов (\textit{The Lisp Way!}), вся реальная
функциональность обеспечивается функциями. Макросы выполняются во время компиляции и
@@ -43,14 +43,14 @@ \section{Определение новых функций}
В качестве имени может использоваться любой символ.\footnote{Хорошо, почти любой символ.
Неопределённым является поведение, когда вы в качестве имени для ваших функций
- используете одно из имён, указанных в стандарте. Однако, как вы увидите в главе 21,
+ используете одно из имён, указанных в стандарте. Однако, как вы увидите в главе~\ref{ch:21},
система пакетов Lisp позволяет вам создавать имена в разных пространствах имён, так что
это не является проблемой.} Как правило, имена функций содержат только буквы, цифры и
знак минус, но, кроме того, разрешено использование других символов, и они используются в
определённых случаях. Например, функции, которые преобразуют значения из одного типа в
другой, иногда используют символ \code{->} в имени. Или функция, которая преобразует
строку в виджет, может быть названа \code{string->widget}. Наиболее важное соглашение по
-именованию, затронутое в главе 2, заключается в том, что лучше создавать составные имена,
+именованию, затронутое в главе~\ref{ch:2}, заключается в том, что лучше создавать составные имена,
используя знак минус вместо подчёркивания или использования заглавных букв внутри имени.
Так что \code{frob-widget} лучше соответствует стилю Lisp, чем \lstinline!frob_widget! или
\code{frobWidget}.
@@ -84,7 +84,7 @@ \section{Определение новых функций}
значение функции. Для возврата из любой точки функции может использоваться специальный
оператор \code{RETURN-FROM}, что я продемонстрирую через некоторое время.
-В главе 2 мы написали функцию \code{hello-world}, которая выглядела вот так:
+В главе~\ref{ch:2} мы написали функцию \code{hello-world}, которая выглядела вот так:
\begin{lstlisting}
(defun hello-world () (format t "hello, world"))
@@ -323,7 +323,7 @@ \section{Именованные параметры}
\end{lstlisting}
Когда функция вызывается, каждый именованный параметр связывается со значением, которое
-указано после ключевого слова, имеющего то же имя, что и параметр. Вернёмся к главе 4, в
+указано после ключевого слова, имеющего то же имя, что и параметр. Вернёмся к главе~\ref{ch:4}, в
которой указывалось, что ключевые слова~--- это имена, которые начинаются с двоеточия, и
которые автоматически определяются как константы, вычисляемые сами в себя FIXME
(self-evaluating).
@@ -482,7 +482,7 @@ \section{Возврат значений из функции}
оператор \code{RETURN-FROM}, который предназначен для немедленного возвращения любого
значения из функции.
-Вы увидите в главе 20 что \code{RETURN-FROM} в самом деле не привязана к функциям; она
+Вы увидите в главе~\ref{ch:20} что \code{RETURN-FROM} в самом деле не привязана к функциям; она
используется для возврата из блока кода, определённого с помощью оператора \code{BLOCK}.
Однако, \code{DEFUN} автоматически помещает тело функции в блок кода с тем же именем, что и
имя функции. Так что, вычисление \code{RETURN-FROM} с именем функции и значением, которое вы
@@ -509,9 +509,10 @@ \section{Возврат значений из функции}
\code{RETURN}, не требует указания имени блока. Однако, вы не можете использовать его
вместо \code{RETURN-FROM} для того, чтобы не указывать имя функции~--- это лишь
синтаксическая обвязка для возврата из блока с именем \code{NIL}. Описание этого
- макроса, вместе с описанием \code{BLOCK} и \code{RETURN-FROM}, будет сделано в главе
- 20.} Но следует отметить, что явное использование \code{RETURN-FROM} в Lisp происходит
-значительно реже, чем использование выражения \code{return} в C-подобных языках, поскольку
+ макроса, вместе с описанием \code{BLOCK} и \code{RETURN-FROM}, будет сделано в
+ главе~\ref{ch:20}.} Но следует отметить, что явное использование
+ \code{RETURN-FROM} в Lisp происходит значительно реже, чем использование
+ выражения \code{return} в C-подобных языках, поскольку
все выражения Lisp, включая управляющие конструкции, такие как условные выражения и циклы,
вычисляются в значения. Так что это не представляет особой сложности на практике.
@@ -533,8 +534,9 @@ \section{Функции как данные, или Функции высшег
В Lisp функции являются просто другим типом объектов. Когда вы определяете функцию с
помощью \code{DEFUN}, вы в действительности делаете две вещи: создаёте новый
-объект-функцию, и даёте ему имя. Кроме того, имеется возможность, как вы увидели в главе
-3, использовать \code{LAMBDA} для создания функции без имени. Действительное
+объект-функцию, и даёте ему имя. Кроме того, имеется возможность, как вы
+увидели в главе~\ref{ch:3}, использовать \code{LAMBDA} для создания функции без
+имени. Действительное
представление объекта-функции, независимо от того, именованный он или нет, является
неопределённым~--- в компилируемых вариантах Lisp, они вероятно состоят в основном из
машинного кода. Единственными вещами которые вам надо знать~--- как получить эти объекты,
@@ -558,14 +560,16 @@ \section{Функции как данные, или Функции высшег
\end{verbatim}
В действительности, вы уже использовали \code{FUNCTION}, но это было
-замаскировано. Синтаксис \lstinline!#'!, который вы использовали в главе 3, является
-синтаксической обёрткой для \code{FUNCTION}, точно также как и \code{'} является обёрткой
-для \code{QUOTE}.\footnote{Лучше всего рассматривать \code{FUNCTION} как специальный вид
- экранирования. Экранирование символа предотвращает его вычисление, оставляя сам символ,
- а не значение переменной с именем символа. \code{FUNCTION} также изменяет нормальные
- правила вычисления, но вместо предотвращения вычисления символа, заставляет вычислять
- его как имя функции, точно также, как если бы этот символ использовался в качестве имени
- функции в выражении вызова.} Так что вы можете получить объект-функцию вот так:
+замаскировано. Синтаксис \lstinline!#'!, который вы использовали в
+главе~\ref{ch:3}, является синтаксической обёрткой для \code{FUNCTION}, точно
+также как и \code{'} является обёрткой для \code{QUOTE}.\footnote{Лучше всего
+ рассматривать \code{FUNCTION} как специальный вид экранирования.
+ Экранирование символа предотвращает его вычисление, оставляя сам символ, а не
+ значение переменной с именем символа. \code{FUNCTION} также изменяет
+ нормальные правила вычисления, но вместо предотвращения вычисления символа,
+ заставляет вычислять его как имя функции, точно также, как если бы этот символ
+ использовался в качестве имени функции в выражении вызова.} Так что вы можете
+ получить объект-функцию вот так:
\begin{verbatim}
CL-USER> #'foo
@@ -577,8 +581,8 @@ \section{Функции как данные, или Функции высшег
функции через объект-функцию: \code{FUNCALL} и \code{APPLY}.\footnote{В действительности
существует и третья возможность, специальный оператор \code{MULTIPLE-VALUE-CALL}, но я
отложу этот вопрос до того момента, когда мы будет обсуждать выражения, возвращающие
- множественные значения в главе 20.} Они отличаются тем, как они получают аргументы,
-которые будут переданы вызываемой функции.
+ множественные значения в главе~\ref{ch:20}.} Они отличаются тем, как они получают
+ аргументы, которые будут переданы вызываемой функции.
\code{FUNCALL} это функция, которая используется тогда, когда во время написания кода вы
знаете количество аргументов, которые вы будете передавать функции. Первым аргументом
View
@@ -57,11 +57,12 @@ \section{Основы переменных}
поскольку целые числа и знаки являются неизменяемыми значениями, не имеет значения тот
факт, что может существовать несколько копий <<одного и того же>> объекта в различных
переменных. Это и является корнем различия между \textbf{EQ} и \textbf{EQL}, описанного
- в главе 4.}. Поэтому присваивание переменной нового значения изменяет то, на \textit{какой}
-объект ссылается переменная (то есть, куда ссылается переменная), но не оказывает никакого
-влияния на объект, на который переменная ссылалась ранее. Однако, если переменная содержит
-ссылку на изменяемый объект, вы можете использовать данную ссылку для изменения этого объекта,
-и это изменение будет видимо любому коду, который имеет ссылку на этот же объект.
+ в главе~\ref{ch:4}.}. Поэтому присваивание переменной нового значения изменяет то, на
+ \textit{какой} объект ссылается переменная (то есть, куда ссылается переменная), но не
+ оказывает никакого влияния на объект, на который переменная ссылалась ранее. Однако,
+ если переменная содержит ссылку на изменяемый объект, вы можете использовать данную
+ ссылку для изменения этого объекта, и это изменение будет видимо любому коду, который
+ имеет ссылку на этот же объект.
Один из способов введения новой переменной вы уже использовали при определении параметров
функции. Как вы видели в предыдущей главе, при определении функции с помощью
@@ -170,7 +171,7 @@ \section{Основы переменных}
формами (вообще, любая конструкция, вводящая новые имена переменных, могущие
использоваться только внутри этой конструкции, является связывающей формой).
-Например, в главе\ref{ch:07} вы встретите цикл \textbf{DOTIMES}, простой цикл-счётчик. Он
+Например, в главе~\ref{ch:07} вы встретите цикл \textbf{DOTIMES}, простой цикл-счётчик. Он
вводит переменную, которая содержит значение счётчика, увеличивающегося на каждой итерации
цикла. Например, следующий цикл, печатающий числа от 0 до 9, связывает переменную x:
@@ -574,11 +575,11 @@ \section{Константы}
\section{Присваивание}
После создания привязки вы можете совершать с ней два действия: получить текущее значение
-и установить ей новое значение. Как вы видели в главе 4, символ вычисляется в значение
-переменной, которую он именует, поэтому вы можете получить текущее значение просто
-обратившись к переменной. Для присваивания нового значения привязке используйте макрос
-\textbf{SETF}, являющийся в Common Lisp оператором присваивания общего назначения. Базовая
-форма \textbf{SETF} следующая:
+и установить ей новое значение. Как вы видели в главе~\ref{ch:4}, символ вычисляется в
+значение переменной, которую он именует, поэтому вы можете получить текущее значение
+просто обратившись к переменной. Для присваивания нового значения привязке используйте
+макрос \textbf{SETF}, являющийся в Common Lisp оператором присваивания общего назначения.
+Базовая форма \textbf{SETF} следующая:
\begin{lstlisting}
(setf place value)
@@ -785,8 +786,8 @@ \section{Другие способы изменения <<мест>>}
Макрос \textbf{PUSH}, который вы использовали в примере с базой данных для добавления
элементов в переменную *db*, является ещё одним модифицирующим макросом. Более подробно о
-его работе и работе \textbf{POP} и \textbf{PUSHNEW} будет сказано в главе 12, где я буду
-говорить о том, как представляются (represented) списки в Lisp.
+его работе и работе \textbf{POP} и \textbf{PUSHNEW} будет сказано в главе~\ref{ch:12}, где
+я буду говорить о том, как представляются (represented) списки в Lisp.
И наконец, два слегка эзотерических, но полезных модифицирующих макроса~---
\textbf{ROTATEF} и \textbf{SHIFTF}. \textbf{ROTATEF} циклически сдвигает значение между
Oops, something went wrong.

0 comments on commit bfc3092

Please sign in to comment.