Мир Лиспа. Том 1: Введение в язык Лисп и функциональное программирование

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

Двухтомник финских специалистов, содержащий введение в язык Лисп, методы и системы программирования. Этот язык широко известен и применяется в задачах символьной обработки информации, обработки естественных языков, искусственного интеллекта, экспертных систем, систем логического программирования. Изложение языка и примеры основаны на последней версии, которая станет стандартом языка. В книге приведены конкретные задачи с ответами и решениями. В 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]
Обложка