Лисп/Литература
Природные особенности Лиспа привели к тому, что хорошая учебная литература о нём расходится по двум дидактическим крайностям. В одной — исчерпывающие, мелко покрошенные спецификации конкретных лисповых машин, реализаций или отдельных аспектов строения столь многоаспектного языка. В другой — учебники отдельных отраслей науки и техники, применяющие Лисп если и не всегда в крайне специальных примерах, то так или иначе «применяющие…», — без претензий на всестороннее мастерство в обращении именно с Лиспом.
Однако за последние 10-20 лет (уже́ после стандартизации диалектов Common Lisp и Scheme) развитие информационных технологий вошло в турбулентную фазу, и теперь любой взмах бабочкиного крыла где-нибудь в Европе, — даже такой неуклюжий, как, например, WWW, Linux, PHP или, простите, ColdFusion, — может вызвать торнадо форумов, проектов… — порою даже новых революционных парадигм! — в Кремниевой долине.
Такая непогода мутит перспективу общего состояния дел в вычислительных профессиях. Для каждой системы программирования появляются учебники, порочащие репутацию соответствующих технологий самой лишь попыткой казаться авторитетным завершённым их описанием («изучи Джаву за два часа»). Имплицитно такие учебники ставят свой язык в центр программистской вселенной, представляя его как универсальное средство… и обычно делая это на примерах вычисления факториалов или работе с реляционными базами данных. Наш учебник, в силу описанных в начале стремлений, сможет избежать такой судьбы.
«Строение и толкование компьютерных программ»
правитьХэролд Абелсон и Гералд Сассман, профессора Массачусетсского технологического института
Раз Лисп не мэйнстримный язык, то почему же мы берём его за основу наших рассуждений о программировании? Потому, что этот язык имеет уникальные особенности, делающие его отличной средой для исследования важных программных конструкций и структур данных, и для их соотношения с языковыми свойствами, их поддерживающими.
(из первой главы)
Книга канона если и не информатики, то уж «разработки программного обеспечения» автоматом. Английский оригинал и видеозаписи лекций общедоступны, русский перевод вышел в печатном издании, но также и доступен в Сети.
«Мир Лиспа»
правитьЭ. Хювёнен и И. Сеппянен
На русском языке пока известно одно более-менее законченное дидактическое издание, посвящённое самому Лиспу — «Двухтомник финских программистов» — (Хювенен Э., Сеппянен И. Мир Лиспа. В 2-х т. - М.: Мир, 1990); да и то перевод. В Рунете ее повсюду хаят и бранят за рассмотрение одних только основ, — дескать, она годится только как самое общее введение. Действительно, после прочтения одной этой книги вы, скорее всего, не сможете писать полноценные программы, зато получите полное представление о том, как работает язык, узнаете много полезных тонкостей. Вы близко познакомитесь с рекурсией — мощным инструментом, часто упускаемом в других вводных учебниках, написанных провинциальными программистами. На такой ноте мы перейдём к следующей доступной в Сети книги о Лиспе на русском языке:
«Практический Общий Лисп»
правитьПитер Зейбель
Прочитанное понравилось? Так подсоби же разнести слух. Рекомендуй эту книгу своим друзьям. Напиши отзыв на Амазоне. Запости в свой блог. Дай линк со своего сайта. Ну и ваще. «Эй-пресс» ведь рискнули, издавая эту книгу, когда как иные издательства мнили, будто рынок не захочет книгу про Лисп. Хотя я вряд ли разбогатею с гонорара, нам не обязательно распродать такой уж огромный тираж, чтобы наварить Эйпрессу прибыль и показать негативщикам, что Лисп ещё очень даже шевелится.
— Питер Зейбель на сайте своей книги «Прэктикал Коммон Лисп»
Вышедшая книга Петера Зейбеля «Practical Common Lisp», поначалу рецензированная «программистами на Лиспе» и анонимами с форумов, была впоследствии примечена обществом и даже переведена на русский язык народными усилиями.
Мы будем ссылаться на русский перевод (благо, он также сделан в вики-среде) вместо пояснения частных конструкций Общего Лиспа, — вроде того же КЛОСа (см. соответствующую главу в общедоступном переводе).
На английском языке
правитьМы не стали бы советовать читателям нашего русского учебника английскую литературу по Лиспу, если бы та литература не была всё ещё незаменимой в понимании Лиспа, а часто — и ключевых понятий информатики.
John Allen, 1978
This book uses LISP as a means for relating topics which normally get treated in several separate courses. The point is not that we can do this in LISP, but rather that it is natural to do it in LISP. The high-level notation for algorithms is beneficial in explaining and understanding complex algorithms. The use of abstract data structures and abstract LISP programs shows the intent of structured programming and step-wise refinement. Much of the current work in mathematical theories of computation is based on LISP-like languages. Thus LISP is a formalism for describing algorithms, for writing programs, and for proving properties of algorithms. We use data structures as the main thread in our discussions because a proper appreciation of data structures as abstract objects is a necessary prerequisite to an understanding of modern computer science.
Такое резюме весьма расходится со впечатлением заглавия — «Анатомия Лиспа». Действительно, средний язык программирования в своей «анатомии» имеет что угодно, но не философские камни понимания основ информатики. Но Лисп — не средний язык программирования, и книга это раскрывает с академическим тщанием.
Steele Guy L. Common Lisp the Language, 2nd edition. Digital Press, 1990 - 1029 p.
Завершённое описание языка от репутабельнейшего автора, теснейше знакомого с началами Common Lisp’а.
Graham P. On Lisp. - Upper Saddle River, NJ: Prentice Hall, 1993, 413 p.
Graham P. ANSI Common Lisp. - Upper Saddle River, NJ: Prentice Hall, 1995, 432 p.
Allen Colin, Dhagat Maneesh. LISP Primer. - 1992. - 134 p.
Cooper David J., Jr. Basic Lisp Techniques. 2003 - 92 p.
Knott Gary D. Interpreting LISP. - 1997. - 103 p.
McCarthy et al. LISP 1.5 Programmer's Manual. The M.I.T. Press, 1962, - 106 p.
Norvig Peter, Pitman Kent. Tutorial on Good Lisp Programming Style. 1993. - 116.
Norvig Peter. Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp. Morgan Kaufmann, 1992.- 946 p.
Pierce David R., Shapiro Stuart C. Common Lisp: A Brief Tutorial. - 2004 - 32 p.
Shapiro Stuart C. Common Lisp: An Interactive Approach.- N.Y.: Computer Science Press, 1992. - 322 p.
Tanimoto Steven L. The Elements of Artificial Intelligence. An introduction Using Lisp. - Seattle, Washington: Computer Science Press, 1987. - 529 p.
Touretzky D.S. Common Lisp: A Gentle Introduction to Symbolic Computation. - Redwood City, California: Carnegie Mellon Univer-sity: The Benjamin/Cummings Publishing Company. - 1990 – 587 p.
[…]