Êàòåãîðèÿ: ïðîãðàммèðîâàíèå Óðîâåíü ïîäãîòîâêè ÷èòàòåëåé: сðåäíèé cover_ANSI Common Lisp.indd 1 08.10.2012 15:01:18 По договору между издательством «Символ-Плюс» и Интернет-магазином «Books.Ru – Книги России» единственный легальный способ получения дан- но го файла с книгой ISBN 978-5-93286-206-3, название «ANSI Common Lisp» – покупка в Интернет-магазине «Books.Ru – Книги России». Если Вы получи- ли данный файл каким-либо другим образом, Вы нарушили межд ун ародное законодательство и законодательство Российской Федерации об охране ав- торского права. Вам необходимо удалить данный файл, а также соо бщ ить издательству «Символ-Плюс» ([email protected]), где именно Вы получили данный файл. ANSI Common Lisp Paul Graham PRENTICE HALL ANSI Common Lisp Пол Грэм Санкт-Петербург – Москва 2012 Серия «High tech» Пол Грэм ANSI Common Lisp Перевод И. Хохлов Главный редактор А. Галунов Зав. редакцией Н. Макарова Научный редактор В. Демкин Редактор А. Родин Корректор С. Беляева Верстка Д. Орлова Грэм П. ANSI Common Lisp. – Пер. с англ. – СПб.: Символ-Плюс, 2012. – 448 с., ил. ISBN 978-5-93286-206-3 Книга «ANSI Common Lisp» сочетает в себе введение в программирование на Лиспе и актуальный справочный материал по ANSI-стандарту языка. Новички найдут в ней примеры интересных программ с их тщательным объяснением. Профессиональные разработчики оценят всесторонний практический подход. Автор постарался показать уникальные особенности, которые выделяют Лисп из множества других языков программирования, а также предоставляемые им новые возможности, например макросы, которые позволяют разработчику писать программы, которые будут писать другие программы. Лисп – единс т- вен ный язык, который позволяет с легкостью осуществлять это, потому что только он предлагает необходимые для этого абстракции. Книга содержит: детальное рассмотрение объектно-ориентированного про- грам ми рования – не только описание CLOS, но и пример собственного встроен- ного объ ектно-ориентированного языка; более 20 самостоятельных примеров, в том числе трассировщик лучей, генератор случайного текста, сопоставление с образцом, логический вывод, программа для генерации HTML, алгоритмы поиска и сортировки, файлового ввода-вывода, сжатия данных, а также вы- числительные задачи. Особое внимание уделяется критически важным кон- цеп циям, включая префиксный синтаксис, связь кода и данных, рекурсию, функциональное программирование, типизацию, неявное использование ука- зателей, динамическое выделение памяти, замыкания, макросы, предшест- вование классов, суть методов обобщенных функций и передачи сообщений. Вы найдете полноценное руководство по оптимизации, примеры различных стилей программирования, включая быстрое прототипирование, разработ- ку снизу-вверх, объектно-ориентированное программирование и применение встраиваемых языков. ISBN 978-5-93286-206-3 ISBN 0-13-370875-6 (англ) © Издательство Символ-Плюс, 2012 Authorized translation of the English edition © 1996 Prentice Hall, Inc. This trans- lation is publ ished and sold by permission of Prentice Hall, Inc., the owner of all rights to publish and sell the same. Все права на данное издание защищены Законодательством РФ, включая право на полное или час- тичное воспроизведение в любой форме. Все товарные знаки или зарегистрированные товарные зна- ки, упоминаемые в настоящем издании, являются собственностью соответствующих фирм. Издательство «Символ-Плюс». 199034, Санкт-Петербург, 16 линия, 7, тел. (812) 380-5007, www.symbol.ru. Лицензия ЛП N 000054 от 25.12.98. Подписано в печать 03.10.2012. Формат 70×100 1/16. Печать офсетная. Объем 28 печ. л. Оглавление Предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 Предисловие к русскому изданию . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17 1. Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19 Глава 1.1. Новые инструменты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19 1.2. Новые приемы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .21 1.3. Новый подход . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22 2. Добро пожаловать в Лисп . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25 Глава 2.1. Форма . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25 2.2. Вычисление . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27 2.3. Данные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28 2.4. Операции со списками . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30 2.5. Истинность . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30 2.6. Функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .32 2.7. Рекурсия . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33 2.8. Чтение Лиспа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34 2.9. Ввод и вывод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .35 2.10. Переменные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37 2.11. Присваивание . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .38 2.12. Функциональное программирование . . . . . . . . . . . . . . . . . . . . . . . .39 2.13. Итерация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40 2.14. Функции как объекты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42 2.15. Типы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .44 2.16. Заглядывая вперед . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .44 Итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46 3. Списки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48 Глава 3.1. Ячейки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48 3.2. Равенство . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50 3.3. Почему в Лиспе нет указателей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51 3.4. Построение списков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53 3.5. Пример: сжатие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53 3.6. Доступ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55 3.7. Отображающие функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56 6 Оглавление 3.8. Деревья . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57 3.9. Чтобы понять рекурсию, нужно понять рекурсию . . . . . . . . . . . . . .58 3.10. Множества . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60 3.11. Последовательности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61 3.12. Стопка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63 3.13. Точечные пары . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65 3.14. Ассоциативные списки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66 3.15. Пример: поиск кратчайшего пути . . . . . . . . . . . . . . . . . . . . . . . . . . .67 3.16. Мусор . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69 Итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .70 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71 4. Специализированные структуры данных . . . . . . . . . . . . . . . . . . . . .73 Глава 4.1. Массивы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .73 4.2. Пример: бинарный поиск . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75 4.3. Строки и знаки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77 4.4. Последовательности. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78 4.5. Пример: разбор дат. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81 4.6. Структуры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83 4.7. Пример: двоичные деревья поиска . . . . . . . . . . . . . . . . . . . . . . . . . . .85 4.8. Хеш-таблицы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90 Итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .94 5. Управление . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .95 Глава 5.1. Блоки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .95 5.2. Контекст . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .97 5.3. Условные выражения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .99 5.4. Итерации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .100 5.5. Множественные значения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .103 5.6. Прерывание выполнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104 5.7. Пример: арифметика над датами . . . . . . . . . . . . . . . . . . . . . . . . . . . .106 Итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .109 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .110 6. Функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .111 Глава 6.1. Глобальные функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .111 6.2. Локальные функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .112 6.3. Списки параметров . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113 6.4. Пример: утилиты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .115 6.5. Замыкания . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .118 6.6. Пример: строители функций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .120 6.7. Динамический диапазон . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .123 6.8. Компиляция . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .124 6.9. Использование рекурсии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .125 Итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .128 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .128 Оглавление 7 7. Ввод и вывод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .130 Глава 7.1. Потоки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .130 7.2. Ввод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .132 7.3. Вывод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .134 7.4. Пример: замена строк . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .136 7.5. Макрознаки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .141 Итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .142 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .142 8. Символы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .144 Глава 8.1. Имена символов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .144 8.2. Списки свойств . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .145 8.3. А символы-то не маленькие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .146 8.4. Создание символов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .146 8.5. Использование нескольких пакетов . . . . . . . . . . . . . . . . . . . . . . . . .147 8.6. Ключевые слова . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .148 8.7. Символы и переменные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .149 8.8. Пример: генерация случайного текста . . . . . . . . . . . . . . . . . . . . . . .149 Итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .152 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .152 9. Числа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .154 Глава 9.1. Типы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .154 9.2. Преобразование и извлечение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .155 9.3. Сравнение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .157 9.4. Арифметика . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .158 9.5. Возведение в степень . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .159 9.6. Тригонометрические функции. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .159 9.7. Представление . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .160 9.8. Пример: трассировка лучей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .161 Итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .168 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .169 10. Макросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .170 Глава 10.1. Eval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .170 10.2. Макросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .172 10.3. Обратная кавычка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .173 10.4. Пример: быстрая сортировка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 10.5. Проектирование макросов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .175 10.6. Обобщенные ссылки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .178 10.7. Пример: макросы-утилиты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .179 10.8. На Лиспе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .182 Итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .183 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .183 8 Оглавление 11. CLOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .185 Глава 11.1. Объектно-ориентированное программирование . . . . . . . . . . . . . .185 11.2. Классы и экземпляры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .187 11.3. Свойства слотов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .188 11.4. Суперклассы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .190 11.5. Предшествование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .190 11.6. Обобщенные функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .192 11.7. Вспомогательные методы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .195 11.8. Комбинация методов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .197 11.9. Инкапсуляция . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .198 11.10. Две модели . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .199 Итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .200 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .201 12. Структура . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .202 Глава 12.1. Разделяемая структура . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .202 12.2. Модификация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .205 12.3. Пример: очереди . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .206 12.4. Деструктивные функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .208 12.5. Пример: двоичные деревья поиска . . . . . . . . . . . . . . . . . . . . . . . . .209 12.6. Пример: двусвязные списки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .212 12.7. Циклическая структура . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .215 12.8. Неизменяемая структура . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .217 Итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .218 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .218 13. Скорость . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .220 Глава 13.1. Правило бутылочного горлышка . . . . . . . . . . . . . . . . . . . . . . . . . . .220 13.2. Компиляция . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .221 13.3. Декларации типов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .224 13.4. Обходимся без мусора . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .229 13.5. Пример: заранее выделенные наборы . . . . . . . . . . . . . . . . . . . . . . .232 13.6. Быстрые операторы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .234 13.7. Две фазы разработки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .236 Итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .237 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .238 14. Более сложные вопросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .239 Глава 14.1. Спецификаторы типов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .239 14.2. Бинарные потоки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .241 14.3. Макросы чтения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .241 14.4. Пакеты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .243 14.5. Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .246 14.6. Особые условия . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .250 Оглавление 9 15. Пример: логический вывод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .253 Глава 15.1. Цель . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .253 15.2. Сопоставление . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .254 15.3. Отвечая на запросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .256 15.4. Анализ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .261 16. Пример: генерация HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .263 Глава 16.1. HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .263 16.2. Утилиты HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .265 16.3. Утилита для итерации. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .268 16.4. Генерация страниц. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .269 17. Пример: объекты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .274 Глава 17.1. Наследование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .274 17.2. Множественное наследование . . . . . . . . . . . . . . . . . . . . . . . . . . . . .276 17.3. Определение объектов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .278 17.4. Функциональный синтаксис . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .279 17.5. Определение методов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .280 17.6. Экземпляры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .281 17.7. Новая реализация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .282 17.8. Анализ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .288 A. Отладка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .290 Приложение B. Лисп на Лиспе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .299 Приложение C. Изменения в Common Lisp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .307 Приложение D. Справочник по языку. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .314 Приложение Комментарии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .421 Алфавитный указатель . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .436
Description: