Двухтомник финских специалистов, содержащий введение в язык Лисп, методы и системы программирования. Этот язык широко известен и применяется в задачах символьной обработки информации, обработки естественных языков, искусственного интеллекта, экспертных систем, систем логического программирования. Изложение языка и примеры основаны на последней версии, которая станет стандартом языка. В книге приведены конкретные задачи с ответами и решениями. В 1-м томе даны основные понятия языка Лисп и введение в функциональное программирование.
Для программистов разной квалификации, для всех, использующих язык Лисп.
Author(s): Эро Хювёнен, Йоуко Сеппянен
Publisher: Мир
Year: 1990
Language: Russian
Pages: 447
City: Москва
Tags: lisp
Обложка
Титульная страница [стр. 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]
Обложка