Является ли обучение LISP полезным во все эти дни? Книга lisp


Книги по Lisp (Лисп) | ProgBook

В книге «Структура и интерпретация компьютерных программ» под термином «программирование» авторы обозначают в большей степени создание, а также выполнение и изучение программ, которые пишутся на языке Лисп и предназначены для работы на компьютере. Следует отметить, что применение Лиспа ограничивает авторов только в способе их выражения, а не в том, что они могут описать в своих программах.

Книга Николая Полещука и Петра Лоскутова «AutoLISP и Visual LISP в среде AutoCAD» представляет собой руководство для разработчиков LSP-, FAS- и VLX-приложений, которые работают в среде графического процессора AutoCAD версий 2005 и 2006. Здесь рассматриваются такие задачи как, COM-связь с внешними приложениями, программная адаптация интерфейса и создание справочных систем. В первый раз на русском языке описываются методы и свойства объектной модели AutoCAD, которые применяются в технологии ActiveX. И всё это — со множеством понятных примеров. Книгу дополняет компакт-диск с исходными текстами приведённых программ.

Двухтомник, содержащий введение в язык Лисп, методы и системы программирования. Этот язык широко известен и применяется в задачах символьной обработки информации, обработки естественных языков, искусственного интеллекта, экспертных систем, систем логического программирования. Изложение языка и примеры основаны на последней версии, которая считается стандартом языка. В книге приведены конкретные задачи с ответами и решениями. Во втором томе изложены методы и системы программирования. Для программистов разной квалификации, для всех, использующих язык Лисп.

Двухтомник финских специалистов Э. Хювёнен, И. Сеппянен «Мир Лиспа. Том 1. Введение в язык Лисп и функциональное программирование» содержит в себе: введение в язык Лисп, методы и системы программирования. Популярный язык Лисп используется в задачах символьной обработки информации, искусственного интеллекта, обработки естественных языков, систем логического программирования и экспертных систем. Стиль языка и способы основываются на последней версии, впоследствии она станет стандартом языка. В данном издании имеются конкретные задачи с ответами и решениями. Этот том состоит из тем: основные понятия языка Лисп и введение в функциональное программирование. Книга пригодится программистам с разным опытом работы, для тех, кто использует язык Лисп.

progbook.ru

Опубликован перевод книги «Lisp in Small Pieces» — Документация — Новости

Это достаточно известная книга Кристиана Кеннека, рассматривающая семантику Лиспа и основы его реализации на примере диалекта Scheme. В процессе повествования разбирается множество аспектов семантики языка, начиная разнообразными вариантами окружений, проходя через продолжения и исключения, заканчивая рефлексией, сутью макросов, компилятором в Си и объектной системой.

Книга содержит 11 интерпретаторов, 2 компилятора, стопку упражнений в каждой главе, уйму интересного материала об истории Лиспа и причинах принятия тех или иных решений в дизайне языка, некоторое количество аллюзий на современные языки программирования, а также небольшой вагончик литературы впридачу.

Здесь нет откровений, невероятно эффективных оптимизаций, мощных систем типов и прочих атрибутов современной computer science (книге 20 лет всё же), но есть отличное твёрдое введение в реализацию языков программирования, призванное заинтересовать новичков, познакомить их с основными понятиями и приёмами этого дела, построив таким образом фундамент для дальнейшего развития.

Книга (пока) существует только в электронном виде. По соглашению с автором, она распространяется под CC BY-ND (с небольшими оговорками). Репозиторий с исходниками книги, исходниками программ, уточнённой лицензией и контактными данными располагается здесь.

На данный момент есть только версия, свёрстанная под A4. Варианты под читалки и прочие айпады ожидаются в скором времени. (Это муторное дело.)

>>> Скачать PDF

ilammy ★★★29.10.2013 13:01:03 Проверено: maxcom (29.10.2013 21:38:19)

www.linux.org.ru

Ansi Common Lisp на русском

Недавно вышел русский перевод книги Пола Грема "Ansi Common Lisp", к которому я немного приложил руку в качестве "научного" редактора. На форуме lisper.ru уже были сообщения от счастливых обладателей бумажной версии книги, а на сайте издательства даже доступен ее электронный вариант по свободной цене.

Хотя изначально я скептически отнесся к выбору именно этой книги для перевода, сейчас я рад, что так вышло. Работая над переводом, хочешь-не хочешь, а пришлось прочитать книгу практически от корки до корки, и могу сказать, что это, пожалуй, самое краткое, простое и доступное введение в язык. Practical Common Lisp лучше открывает глаза, и все-таки остается самой лучшей книгой по Lisp'у в целом, но он существен больше. В общем, ANSI CL — очень хороший вариант для начинающих. И хотя стиль Пола Грема часто критикуют в современном Lisp-сообществе, эта книга достаточно сбаллансированна и не содержит каких-то апокрифических мыслей :)

Книга состоит из двух частей, меньшая из которых — справочник — фактически бесполезна из-за наличия Hyperspec'и. Но это хорошо, поскольку остается меньше текста для прочтения :) Первая же часть состоит из 13 глав, описывающих разные аспекты языка, и 3 глав с решением практических задач. Главы про язык содержат множество примеров использования различных структур данных и реализации с их помощью нетривиальных алгоритмов, что может позволить неплохо прокачать это направления тем, кто не занимается постоянным решением алгоритмических задачек на Codeforces. Особенно, учитывая красоту и ясность реализации этих алгоритмов на Lisp'е. Несколько глав были весьма полезны и мне с моим пятилетним практическим опытом использования языка: например, я смог по достоинству оценить элегентность structs и стал намного больше пользоваться ими, интересными также были главы про оптимизацию и структурирование программ. В последних 3 главах разобраны классические для Lisp'а задачи: логический вывод, создание своей объектной системы (фактически, реализация внутренностей JavaScript'а) и генерация HTML из мета-языка — это те вещи, на которых видны некоторые из самых сильных сторон языка.

Из-за проблем издательства работа над переводом велась очень долго — что-то около двух лет. Точнее, сама работа длилась намного меньше, но ее отдельные части были разделены большими временными промежутками. Переводил allchemist, и сделал это задорно и весело. Своей задачей я видел прежде всего исправление отступлений от оригинала и работу с терминологией. Что касается второго пункта то тут я хотел напоследок рассказать занимательную историю про стог и пул.

Стог и пул

Пару лет назад Иван Сагалаев, который выступал в той же роли научного редактора для книги "Coders at Work", написал следующее по поводу роли научного редактора:

Кто не знает, научный редактор — это человек, совершенно необходимый для специальной литературы. Он берёт сырой перевод и приводит специфичную терминологию в соответствии с принятой в реальном мире. В результате вы читаете книжку, в которой написано не "процесс синтаксического разбора", а просто "парсинг", и не "интерфейс прикладной программы", а "API".

Применительно к Кодерам, которые должны читаться как приключенческий роман, я согласен с подходом Ивана. Но вот что касается таких книг, как ANSI CL, предназначеных прежде всего для (относительных) новичков, я считаю, что выбор должен делаться в сторону максимальной понятности терминов, а не привычности их для людей, которые уже в теме. Т.е., конечно, не "процесс синтаксического разбора", а просто "синтаксический разбор" и местами "разбор" — но не "парсинг". Почему? Да хоть потому, что "парсинг" для новичка создает некий магический ореол вокруг этого термина и выделяет его из ряда других, названных на родном языке, хотя ничего выделяющегося в нем нет. Да, часто подобрать адекватный термин на родном языке очень трудно, порой их даже приходится изобретать, но именно так и происходит развитие терминологии.

По этому поводу в этой книге было 2 очень интересных примера, за первый из которых меня можно смело закидывать помидорами, но я все же буду продолжать настаивать на нем. Давайте перечислим абстрактные структуры данных, с которыми мы чаще всего встречаемя — это, конечно же, лист, три, кью, стек, хип, дек. Ой... Т.е., я хотел сказать: список, дерево, очередь, куча, колода и... стек. Как-то так вышло, что у всех этих структур имена как имена, а вот стек какой-то особенный. Почему? Наверно, из-за лени, но не важно. Если заглянуть в словарь, то для английского слова "stack" можно найти 2 вполне подходящих перевода. Первый из них — стог :) По-моему, удивительный случай созвучности, и, по-своему, очень забавный вариант. Именно его я предложил использовать в качестве термина, когда речь идет об этой структуре данных, и он продержался практически до последней ревизии, однако, в последний момент все-таки был заменен на менее одиозный вариант стопки. Это тоже хороший перевод и с точки зрения соответствия реальности даже более адекватный, так что я остался доволен. Удивительно, почему он так редко встречается в литературе!

Но тут есть еще одна трудность: а как быть со стеком вызовов функций программы, который уже не абстрактная структура данных, а конкретное технологическое решение, вокруг которого есть еще и другие термины, типа "stacktrace"? Вот тут, конечно, намного труднее, и я остановился на том, что в данном случае, чтобы не создавать путаницы, лучше использовать устоявшийся термин, т.е. стек. Возможно, с прочным вхождением в обиход стопки, можно будет перенести этот термин и сюда: стопка вызовов — звучит банально. Зато никакой дополнительной случайной сложности :)

Вторым термином, которым я остался недоволен, был пул. Тут случай хуже, т.к. адекватного перевода его на русский и вовсе нет. Ну не бассейн же. Я так ничего и не придумал. Но, если у вас будут мысли на эту тему, делитесь...

lisp-univ-etc.blogspot.com

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

Э.Хювёнен, И.Сеппянен

МИР ЛИСПА. Т.1: ВВЕДЕНИЕ В ЯЗЫК ЛИСП И ФУНКЦИОНАЛЬНОЕ ПРОГРАММИРОВАНИЕ

Двухтомник финских специалистов, содержащий введение в язык Лисп, методы и системы программирования. Этот язык широко известен и применяется в задачах символьной обработки информации, обработки естественных языков, искусственного интеллекта, экспертных систем, систем логического программирования. Изложение языка и примеры основаны на последней версии, которая станет стандартом языка. В книге приведены конкретные задачи с ответами и решениями. В 1-мтоме даны основные понятия языка Лисп и введение в функциональное программирование.

Для программистов разной квалификации, для всех, использующих язык Лисп.

Содержание

 

Предисловие редактора перевода

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

PUTASSOC изменяет а-список

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

УКАЗАТЕЛЬ ИМЕН И СОКРАЩЕНИЙ

 

В этом приложении собраны встречающиеся в тексте имена и сокращения. Одновременно оно может служить указателем авторов по перечням литературы. С его помощью можно найти литературу, которая вследствие разбиения по темам приведена в разных разделах. Символы и зарезервированные слова Коммон Лиспа образуют отдельный указатель (приложение 2).

Авсоний 22

Гёте И. 337

Ада 194

Дюамель Ж. 270

Аккерман 202, 232

Дюма А. мл. 239

Алгол-68310

Зеталисп 16, 40

АНАЛИТИК 35

Интерлисп 17, 40, 55,116

Ауэрбах Б. 309

Калевала 19

Байрон 249

Клини 116

Бейсик 40,194

Кобол 40,194

Бирс А. 194

Коммон Лисп 16, 54, 55, 319

Блейк У. 319

Конфуций 245

Бэкон Р. 69

Крабб Дж. 174

Витгенштейн Л. 46, 288

Лавров С. 58

Вольтер 349

Лец Е. 127,148, 205

studfiles.net

Пол Грэм. ANSI Common Lisp

Серия: "High Tech"

Книга «ANSI Common Lisp» сочетает в себе введение в программирование на Лиспе и актуальный справочный материал по ANSI-стандарту языка. Новички найдут в ней примеры интересных программ с их тщательным объяснением. Профессиональные разработчики оценят всесторонний практический подход. Автор постарался показать уникальные особенности, которые выделяют Лисп из множества других языков программирования, а также предоставляемые им новые возможности, например макросы, которые позволяют разработчику писать программы, которые будут писать другие программы. Лисп – единственный язык, который позволяет с легкостью осуществлять это, потому что только он предлагает необходимые для этого абстракции. Книга содержит: детальное рассмотрение объектно-ориентированного программирования – не только описание CLOS, но и пример собственного встроенного объектно-ориентированного языка; более 20 самостоятельных примеров, в том числе трассировщик лучей, генератор случайного текста, сопоставление с образцом, логический вывод, программа для генерации HTML, алгоритмы поиска и сортировки, файлового ввода-вывода, сжатия данных, а также вычислительные задачи. Особое внимание уделяется критически важным концепциям, включая префиксный синтаксис, связь кода и данных, рекурсию, функциональное программирование, типизацию, неявное использование указателей, динамическое выделение памяти, замыкания, макросы, предшествование классов, суть методов обобщенных функций и передачи сообщений. Вынайдете полноценное руководство по оптимизации, примеры различных стилей программирования, включая быстрое прототипирование, разработку снизу-вверх, объектно-ориентированное программирование и применение встраиваемых языков.

Издательство: "Символ-Плюс"

ISBN: 978-5-93286-206-3

электронная книга

Купить за 390 руб и скачать на Litres

dic.academic.ru

ЛИСП - это... Что такое ЛИСП?

Лого, Python, LISP, от англ. LISt Processing language — «обработка списков»; современное написание: Lisp) — семейство языков программирования, программы и данные в которых представляются системами линейных списков символов. Лисп является вторым в истории (после Фортрана) высокоуровневым языком программирования, который используется по сей день. Слово «lisp» имеет также значение «детский лепет», что не случайно, так как тематика, которая интересовала создателя Лиспа Джона Маккарти была тесным образом связана с исследованиями человеческой речи: Маккарти занимался исследованиями в области искусственного интеллекта и созданный им язык по сию пору является одним из основных средств моделирования различных аспектов ИИ.

Традиционный Лисп имеет динамическую систему типов. Язык является функциональным, но многие поздние версии обладают также чертами императивности, к тому же, имея полноценные средства символьной обработки становится возможным реализовать объектно-ориентированность, примером такой реализации является платформа Ada, прошел процесс фундаментальной стандартизации для использования в военном деле и промышленности, в результате чего появился стандарт Common Lisp. Его реализации существуют для большинства платформ. С полным списком реализаций можно ознакомиться здесь: Common Lisp Implementation.

Одной из базовых идей языка Lisp является представление каждого символа как узла многокоординатной символьной сети; при этом координаты, свойства, уровни сети записаны в так называемых слотах символа. Основные слоты:

  • имя символа (основополагающее Аристотелево А=А из которого вырастает (-ли?) лямбда-исчисление),
  • функциональный слот,
  • слот-значение
  • расширяемый список свойств (можно свободно расширить слотовую систему удобным для решения задачи способом).

Лисп имеет аппаратную реализацию т. н. Лисп-машина.

Синтаксис

Основной механизм Лиспа — инкапсулированная в список определяющая голова списка и подключённый к ней хвост списка, который рекурсивно также может быть списком. Лисп-машина способна воспринимать каждый поступающий на неё список на самом абстрактном уровне, например как мета-Лисп-машину, модифицирующую воспринимающую машину. В такой динамичной, высокоабстрактной среде можно реализовать как строго-научные системы, так и неисчислимое множество программистских трюков и генераторов всевозможных машин.

Любая программа на Лиспе состоит из последовательности выражений (форм). Результат работы программы состоит в вычислении этих выражений. Все выражения записываются в виде списков — одной из основных структур Лиспа, поэтому они могут легко быть созданы посредством самого языка. Это позволяет создавать программы, изменяющие другие программы или макросы, позволяющие существенно расширить возможности языка.

Внешне исходный код программы на Лиспе отличается обилием круглых скобок; редактирование программ значительно упрощается использованием текстового редактора, поддерживающего автоматическое выравнивание кода, подсветку соответствующих пар скобок и такие специальные команды, как «перейти через список вправо» и т. д.

Под словами «Лисп-редактор» скрывается технология Debian). Содержательна также история EMACS: она связана с одним из лидеров свободного программного обеспечения Столлманом.

Список является последовательностью элементов любого рода, в том числе других списков. Например, (1 3/7 'foo #'+) состоит из целого числа, рациональной дроби, символа foo и указателя на функцию сложения. Выражения представляются списками в префиксной записи: первый элемент должен быть формой, то есть функцией, оператором, макросом или специальным оператором; прочие элементы суть аргументы, передаваемые форме для обработки. Функция list возвращает список состоящий из её аргументов: например, (list 1 3/7 'foo #'+) возвращает список, упомянутый ранее. Если некоторые элементы являются выражениями, то сначала вычисляется их значение: (list 1 2 (list 1 2)) возвращает (1 2 (1 2)). Арифметические операторы действуют так же, например (+ 4 (* 2 3)) выдаёт 10.

Специальные операторы позволяют управлять последовательностью вычислений. С их помощью реализуются ветвления и циклы. Оператор if позволяет вычислить одно из двух выражений в зависимости от выполнения условия, которое тоже является выражением. Если его результат не nil, то вычисляется первый аргумент, иначе вычисляется второй. Например, (if nil (list 1 2 "foo") (list 3 4 "bar")) всегда возвращает (3 4 "bar").

Символьная природа языка (то есть отсутствие в символьном пространстве традиционной метрической геометрии расстояний, последовательностей и т. д) позволяет легко и продуктивно распараллеливать Лисп-процессы. Что нашло использование в сверхмощных телекоммуникационных, сетевых Лисп-системах.

При всей мощности символьного подхода, он не может занять место контининтуальных (нейро) систем (не-машин!) нейрокомпьютеров. Т. н. проблема образования категорий из сенсорных данных. (см. Harnad).

Примеры

Пример Куайн (программы, выводящей свой исходный код) на Лиспе:

((lambda (x) (list x (list 'quote x))) '(lambda (x) (list x (list 'quote x))))

Данная программа должна работать на большинстве диалектов Лиспа, в том числе и на числа Фибоначчи с использованием макроса Loop:

(defun fibonacci (n) (loop repeat n for a = 1 then b and b = 1 then (+ a b) finally (return a)))

Применение

Первые области применения Лиспа были связаны с символьной обработкой данных и процессами принятия решений (см. проекты Franz).

Наиболее популярный сегодня диалект Коммон Лисп является универсальным языком программирования. Он широко используется в самых разных проектах: Интернет-серверы и службы, серверы приложений и клиенты, взаимодействующие с реляционными и объектными базами данных, научные расчёты и игровые программы.

Одно из направлений использования языка Lisp — его использование в качестве скриптового языка, автоматизирующего работу в ряде прикладных программ.

  • Лисп используется как язык сценариев в САПР AutoLISP)
  • Лисп является одним из базовых средств текстового редактора EmacsLISP). По сути, большая часть Emacs написана на EmacsLISP, что даёт неограниченные возможности расширения функциональности.
  • В оконном менеджере Rep, который в значительной степени повторяет диалект Лиспа от Emacs.
  • Диалект Gimp.
  • Диалект GOAL используется для высокодинамичных трёхмерных игр.
  • Лисп может использоваться для написания скриптов в аудиоредакторе

    Интересные факты

    Ссылки

    Ссылки на английском

    Литература

dic.academic.ru

lisp - Является ли обучение LISP полезным во все эти дни?

Да. Я буду придерживаться Common Lisp, здесь, хотя Scheme также является превосходным языком, который может порекомендовать его.

В Common Lisp у вас довольно большой язык с несколькими парадигмами, который предоставляет некоторые вещи, которые либо не существуют широко за пределами семейства языков Lisp, либо ограничены CL и еще более неясными/нишевыми языками.

Первая особенность, которую вы можете получить так или иначе от CL, Scheme и довольно многих других диалектов, - настоящая макросистема.

Я говорю "реальный", потому что система гораздо более полная, гибкая и надежная, чем, скажем, макросы препроцессора C. Крайне сложно получить макросы CPP, чтобы делать простые вещи (например, заменять значения двух переменных или создавать конструкцию foreach), но они тривиальны с макросами Lisp. Это оказывается очень мощным инструментом для введения новых абстракций и отказа от "шаблонного" кода.

Вторая функция, которая фактически ограничена Common Lisp, - CLOS, Common Lisp Object System. Несмотря на название, это не обычная OO-система, подобная Java, причем методы являются частью определения класса. Вместо этого он обеспечивает полиморфизм через "общие функции", к которым привязаны методы, и по умолчанию позволяет выполнять множественную отправку.

Я очень предпочитаю CLOS более привычный подход к ориентации объектов, поскольку он делает несколько "шаблонов" (например, шаблон Visitor) совершенно ненужным и потому что расширение существующих общих функций настолько просто; другие ненавидят его, потому что он требует чрезвычайно кавалерийного подхода к инкапсуляции и потому, что расширение общих функций становится легко слишком. В любом случае, CLOS достаточно разный, и я думаю, что он стоит изучать только для различных перспектив, которые он предоставляет.

Третья функция, доступная вне Lisp, но все же фантастическая, если вы ее никогда не испытывали, - это динамическое интерактивное программирование. CL-отладчики, как правило, являются чрезвычайно мощными инструментами, а CL обеспечивает динамическое определение и переопределение функций, классов и методов, которые резко улучшают одну способность исследовать проблему, тестировать решения этой проблемы и ее подзадач и, наконец, программа, которая работает правильно и эффективно.

Наконец, для множества классов проблем Lisp - большой практический язык. Он обеспечивает хорошую производительность (обычно не так быстро, как C, но значительно быстрее, чем большинство "языков сценариев" ), безопасность, автоматическое управление памятью, достойная "стандартная библиотека" функций и огромные возможности для легкого расширения.

qaru.site