Мир Лиспа. Том 1: Введение в язык Лисп и функциональное программирование
Book information
Description
Двухтомник финских специалистов, содержащий введение в язык Лисп, методы и системы программирования. Этот язык широко известен и применяется в задачах символьной обработки информации, обработки естественных языков, искусственного интеллекта, экспертных систем, систем логического программирования. Изложение языка и примеры основаны на последней версии, которая станет стандартом языка. В книге приведены конкретные задачи с ответами и решениями. В 1-м томе даны основные понятия языка Лисп и введение в функциональное программирование. Для программистов разной квалификации, для всех, использующих язык Лисп. Обложка Титульная страница [стр. 3] Выходные сведения [стр. 4] Предисловие редактора перевода [стр. 5] Введение [стр. 11] Скачок в развитии вычислительной техники [стр. 11] Исследовательские программы искусственного интеллекта [стр. 12] Национальные программы по исследованию языков [стр. 13] Появление Лиспа в Финляндии [стр. 13] Лисп — основа искусственного интеллекта [стр. 14] Учебник Лиспа на финском языке [стр. 14] Язык Лисп и функциональное программирование [стр. 15] Методы и системы программирования [стр. 16] На кого рассчитана книга [стр. 17] Терминология [стр. 17] Иконология [стр. 18] От дерева к мысли и от мысли к дереву [стр. 19] Благодарности [стр. 20] 1 Введение в мир Лиспа [стр. 21] 1.1 Символьная обработка и искусственный интеллект [стр. 22] Искусственный интеллект и технология знаний [стр. 23] Исторические предубеждения [стр. 23] Символьное или численное вычисление [стр. 24] Эвристическое или алгоритмическое решение задачи [стр. 25] Искусственный интеллект — сфера исследования многих наук [стр. 27] Знание дела и умение как товар [стр. 27] Учебники по искусственному интеллекту [стр. 28] Упражнения [стр. 29] 1.2 Применения искусственного интеллекта [стр. 30] Многообразие форм искусственного интеллекта [стр. 30] Обработка естественного языка [стр. 31] Экспертные системы [стр. 33] Символьные и алгебраические вычисления [стр. 35] Доказательства и логическое программирование [стр. 36] Программирование игр [стр. 37] Программирование игр [стр. 37] Обработка сигналов и распознавание образов [стр. 38] Машинное зрение и обработка изображений [стр. 39] Робототехника и автоматизация производства [стр. 39] Машинное проектирование [стр. 40] Языки и средства программирования искусственного интеллекта [стр. 40] Повышение производительности программирования [стр. 41] Автоматическое программирование и обучение [стр. 41] Литература [стр. 42] Упражнения [стр. 45] 1.3 Лисп — язык программирования искусственного интеллекта [стр. 46] Символьная обработка [стр. 47] Лисп опередил свое время [стр. 48] Одинаковая форма данных и программы [стр. 49] Хранение данных, не зависящее от места [стр. 50] Автоматическое и динамическое управление памятью [стр. 51] Функциональный образ мышления [стр. 51] Возможность различных методов программирования [стр. 52] Пошаговое программирование [стр. 52] Интерпретирующий или компилирующий режимы выполнения [стр. 53] Лисп — бестиповый язык программирования [стр. 53] Единый системный и прикладной язык программирования [стр. 54] Интегрированная среда программирования [стр. 55] Широко распространенные заблуждения и предрассудки [стр. 56] Простой и эффективный язык [стр. 57] Учебная литература по Лиспу [стр. 58] Упражнения [стр. 59] 2 Основы языка Лисп [стр. 60] 2.1 Символы и списки [стр. 61] Символы используются для представления других объектов [стр. 61] Символы в языке Коммон Лисп [стр. 62] Числа являются константами [стр. 63] Логические значения T и NIL [стр. 64] Константы и переменные [стр. 64] Атомы — Символы + Числа [стр. 64] Построение списков из атомов и подсписков [стр. 65] Пустой список = NIL [стр. 65] Список как средство представления знаний [стр. 66] Значение способа записи [стр. 67] Различная интерпретация списков [стр. 67] Упражнения [стр. 68] 2.2 Понятие функции [стр. 69] Функция — отображение между множествами [стр. 69] Тип аргументов и функций [стр. 70] Определение и вызов функции [стр. 71] Единообразная префиксная нотация [стр. 71] Аналогия между Лиспом и естественным языком [стр. 73] Диалог с интерпретатором Лиспа [стр. 73] Иерархия вызовов [стр. 74] QUOTE блокирует вычисление выражения [стр. 75] Упражнения [стр. 77] 2.3 Базовые функции [стр. 78] Основные функции обработки списков [стр. 79] Функция CAR возвращает в качестве значения головную часть списка [стр. 80] Функция CDR возвращает в качестве значения хвостовую часть списка [стр. 81] Функция CONS включает новый элемент в начало списка [стр. 83] Связь между функциями CAR, CDR и CONS [стр. 84] Предикат проверяет наличие некоторого свойства [стр. 85] Предикат АТОМ проверяет, является ли аргумент атомом [стр. 85] EQ проверяет тождественность двух символов [стр. 86] EQL сравнивает числа одинаковых типов [стр. 88] Предикат = сравнивает числа различных типов [стр. 88] EQUAL проверяет идентичность записей [стр. 89] EQUALP проверяет наиболее общее логическое равенство [стр. 90] Другие примитивы [стр. 90] NULL проверяет на пустой список [стр. 91] Вложенные вызовы CAR и CDR можно записывать в сокращенном виде [стр. 91] LIST создает список из элементов [стр. 93] Упражнения [стр. 94] 2.4 Имя и значение символа [стр. 95] Значением константы является сама константа [стр. 95] Символ может обозначать произвольное выражение [стр. 96] SET вычисляет имя и связывает его [стр. 96] SETQ связывает имя, не вычисляя его [стр. 97] SETF — обобщенная функция присваивания [стр. 98] Побочный эффект псевдофункции [стр. 99] Вызов интерпретатора EVAL вычисляет значение значения [стр. 100] Основной цикл: READ—EVAL—PRINT [стр. 102] Упражнения [стр. 103] 2.5 Определение функций [стр. 104] Лямбда-выражение изображает параметризованные вычисления [стр. 104] Лямбда-вызов соответствует вызову функции [стр. 106] Вычисление лямбда-вызова, или лямбда-преобразование [стр. 106] Объединение лямбда-вызовов [стр. 107] Лямбда-выражение — функция без имени [стр. 108] DEFUN дает имя описанию функции [стр. 108] SYMBOL-FUNCTION выдаст определение функции [стр. 110] Задание параметров в лямбда-списке [стр. 111] Изображение функций в справочных руководствах [стр. 114] Функции вычисляют все аргументы [стр. 115] Многозначные функции [стр. 115] Определение функции в различных диалектах Лиспа [стр. 115] При вычислении NLAMBDA аргументы не вычисляются [стр. 117] Упражнения [стр. 117] 2.6 Передача параметров и область их действия [стр. 119] В Лиспе используется передача параметров по значению [стр. 119] Статические переменные локальны [стр. 120] Свободные переменные меняют свое значение [стр. 121] Динамическая и статическая область действия [стр. 121] Одно имя может обозначать разные переменные [стр. 123] Упражнения [стр. 125] 2.7 Вычисление в Лиспе [стр. 127] Программа состоит из форм и функций [стр. 127] Управляющие структуры Лиспа являются формами [стр. 128] LET создает локальную связь [стр. 129] Последовательные вычисления: PROG1, PROG2 и PROGN [стр. 131] Разветвление вычислений: условное предложение COND [стр. 132] Другие условные предложения: IF, WHEN, UNLESS и CASE [стр. 136] Циклические вычисления: предложение DO [стр. 137] Предложения PROG, GO и RETURN [стр. 139] Другие циклические структуры [стр. 142] Повторение через итерацию или рекурсию [стр. 142] Формы динамического прекращения вычислений: CATCH и THROW [стр. 145] Упражнения [стр. 146] 2.8 Внутреннее представление списков [стр. 148] Лисповская память состоит из списочных ячеек [стр. 149] Значение представляется указателем [стр. 149] CAR и CDR выбирают поле указателя [стр. 151] CONS создаст ячейку и возвращает на неё указатель [стр. 151] У списков могут быть общие части [стр. 152] Логическое и физическое равенство не одно и то же [стр. 154] Точечная пара соответствует списочной ячейке [стр. 155] Варианты точечной и списочной записей [стр. 157] Управление памятью и сборка мусора [стр. 159] Вычисления, изменяющие и не изменяющие структуру [стр. 160] RPLACA и RPLACD изменяют содержимое полей [стр. 161] Изменение структуры может ускорить вычисления [стр. 163] Упражнения [стр. 166] 2.9 Свойства символа [стр. 168] У символа могут быть свойства [стр. 168] У свойств есть имя и значение [стр. 168] Системные и определяемые свойства [стр. 169] Чтение свойства [стр. 169] Присваивание свойства [стр. 170] Удаление свойства [стр. 171] Свойства глобальны [стр. 171] Упражнения [стр. 172] 2.10 Ввод и вывод [стр. 174] Ввод и вывод входят в диалог [стр. 174] READ читает и возвращает выражение [стр. 175] Программа ввода выделяет формы [стр. 176] Макросы чтения изменяют синтаксис Лиспа [стр. 177] Символы хранятся в списке объектов [стр. 179] Пакеты или пространства имен [стр. 180] PRINT переводит строку, выводит значение и пробел [стр. 180] PRIN1 и PRINC выводят без перевода строки [стр. 182] TERPRI переводит строку [стр. 183] FORMAT выводит в соответствии с образцом [стр. 184] Использование файлов [стр. 187] LOAD загружает определения [стр. 190] Упражнения [стр. 191] 3 Функциональное программирование [стр. 193] 3.1 Основы рекурсии [стр. 194] Лисп — это язык функционального программирования [стр. 194] Процедурное и функциональное программирование [стр. 195] Рекурсивный — значит использующий самого себя [стр. 196] Рекурсия всегда содержит терминальную ветвь [стр. 197] Рекурсия может проявляться во многих формах [стр. 198] Списки строятся рекурсивно [стр. 200] Лисп основан на рекурсивном подходе [стр. 201] Теория рекурсивных функций [стр. 201] Литература [стр. 204] 3.2 Простая рекурсия [стр. 205] Простая рекурсия соответствует циклу [стр. 205] MEMBER проверяет, принадлежит ли элемент списку [стр. 208] Каждый шаг рекурсии упрощает задачу [стр. 209] Порядок следования ветвей в условном предложении существеннен [стр. 211] Ошибка в условиях может привести к бесконечным вычислениям [стр. 213] APPEND объединяет два списка [стр. 214] REMOVE удаляет элемент из списка [стр. 216] SUBSTITUTE заменяет все вхождения элемента [стр. 217] REVERSE обращает список [стр. 218] Использование вспомогательных параметров [стр. 220] Упражнения [стр. 221] 3.3 Другие формы рекурсии [стр. 224] Параллельное ветвление рекурсии [стр. 225] Взаимная рекурсия [стр. 228] Программирование вложенных циклов [стр. 229] Рекурсия более высокого порядка [стр. 232] Литература [стр. 235] Упражнения [стр. 235] 3.4 Функции более высокого порядка [стр. 239] Функционал имеет функциональный аргумент [стр. 239] Функциональное значение функции [стр. 241] Способы композиции функций [стр. 242] Функции более высокого порядка [стр. 243] Литература [стр. 244] 3.5 Применяющие функционалы [стр. 245] APPLY применяет функцию к списку аргументов [стр. 246] FUNCALL вызывает функцию с аргументами [стр. 246] Упражнения [стр. 248] 3.6 Отображающие функционалы [стр. 249] Отображающие функции повторяют применение функции [стр. 249] MAPCAR повторяет вычисление функции на элементах списка [стр. 250] MAPLIST повторяет вычисление на хвостовых частях списка [стр. 252] MAPCAN и MAPCON объединяют результаты [стр. 252] МАРС и MAPL теряют результаты [стр. 254] Композиция функционалов [стр. 255] Итоговая таблица отображающих функций [стр. 256] Упражнения [стр. 257] 3.7 Замыкания [стр. 259] FUNCTION блокирует вычисление функции [стр. 259] Замыкание — это функция и контекст ее определения [стр. 260] Связи свободных переменных замыкаются [стр. 261] Замыкания позволяют осуществлять частичное вычисление [стр. 263] Генератор порождает последовательные значения [стр. 264] Контекст вычисления функционального аргумента [стр. 265] Литература [стр. 269] Упражнения [стр. 269] 3.8 Абстрактный подход [стр. 270] Обобщение функций, имеющих одинаковый вид [стр. 271] Параметризованное определение функций [стр. 275] Рекурсивные функции с функциональным значением [стр. 279] Автоаппликация и авторепликация [стр. 280] Порядок и тип функций [стр. 283] Проблемы абстрактного подхода [стр. 285] Литература [стр. 286] Упражнения [стр. 287] 3.9 Макросы [стр. 288] Макрос строит выражение и вычисляет его значение [стр. 288] Макрос не вычисляет аргументы [стр. 290] Макрос вычисляется дважды [стр. 290] Контекст вычисления макроса [стр. 291] Пример отличия макроса от функции [стр. 292] Рекурсивные макросы и продолжающиеся вычисления [стр. 294] Тестирование макросов [стр. 295] Лямбда-список и ключевые слова макроса [стр. 296] Обратная блокировка разрешает промежуточные вычисления [стр. 298] Образец удобно использовать для определения макросов [стр. 300] Макросы с побочным эффектом [стр. 301] Определение новых синтаксических форм [стр. 304] Определение типов данных с помощью макросов [стр. 305] Литература [стр. 306] Упражнения [стр. 307] 4 Типы данных [стр. 308] 4.1 Понятия [стр. 309] Явное и неявное определение [стр. 309] Абстракция данных [стр. 310] Составные типы и процедуры доступа [стр. 312] В Лиспе тип связан со значением, а не с именем [стр. 312] Проверка и преобразование типов [стр. 314] Иерархия типов [стр. 316] Определение новых типов [стр. 316] 4.2 Числа [стр. 319] Лисп умеет работать с числами [стр. 319] Целые числа [стр. 323] Дробные числа [стр. 323] Числа с плавающей запятой [стр. 324] Комплексные числа [стр. 325] 4.3 Символы [стр. 326] Системные свойства символа [стр. 326] Специальные знаки в символах [стр. 327] Обращение с внешним видом символа [стр. 328] GENTEMP создает новый символ [стр. 330] 4.4 Списки [стр. 331] Ассоциативный список связывает данные с ключами [стр. 332] PAIRLIS строит список пар [стр. 332] ASSOC ищет пару, соответствующую ключу [стр. 333] ACONS добавляет новую пару в начало списка [стр. 334] PUTASSOC изменяет a-список [стр. 335] 4.5 Строки [стр. 337] Знаки и строки [стр. 337] Преобразования строк [стр. 338] Работа со строками [стр. 339] Наследуемые функции [стр. 340] 4.6 Последовательности [стр. 341] Последовательности являются списками или векторами [стр. 341] Основные действия с последовательностями [стр. 342] Мощные функционалы [стр. 344] Упорядочивание последовательности [стр. 347] 4.7 Массивы [стр. 349] Типы массивов [стр. 350] Работа с массивами [стр. 350] Хэш-массив ассоциирует данные [стр. 351] Хэш-массивы обеспечивают быстродействие [стр. 351] 4.8 Структуры [стр. 353] Структуры представляют собой логическое целое [стр. 353] Определение структурного типа и создание структуры [стр. 354] Функции создания, доступа и присваивания [стр. 354] Действия не зависят от способа реализации [стр. 356] 5 Решения [стр. 358] Приложение 1. Сводка Коммон Лиспа [стр. 384] Приложение 2. Указатель символов Коммон Лиспа [стр. 417] Приложение 3. Указатель имен и сокращений [стр. 431] Приложение 4. Предметный указатель [стр. 434] Оглавление [стр. 440] Выпускные данные [стр. 448] Обложка
Similar books
Common Lisp Standard X3J13
1994 · PDF
Software Runaways: Lessons Learned from Massive Software Project Failures
1998 · PDF
The Rise of the Expert Company: How Visionary Companies are Using Artificial Intelligence to Archieve Higher Productivity and Profits
1988 · PDF
Introducing Blockchain with Lisp: Implement and Extend Blockchains with the Racket Language
2021 · PDF
Мир Лиспа. Том 2: Методы и системы программирования
1990 · PDF
Мир Лиспа. Том 2: Методы и системы программирования
1990 · DJVU
Мир Лиспа. Том 1: Введение в язык Лисп и функциональное программирование
1990 · DJVU
Common LISP: The Language
1990 · PDF