Первоначальный вариант данной статьи был опубликован в первом номере журнала "Практика функционального программирования". Однако прогресс не стоит на месте, и было решено поддерживать данную статью в актуальном состоянии, отслеживая выпуск новых книг и интересных материалов. Ваши комментарии и пожелания вы можете оставлять как комментарии к данной странице, или присылать их мне по электронной почте. Если вы будете заказывать что-то из перечисленных тут книг, то просьба пользоваться соответствующими ссылками — это помогает мне покупать новые книги и пополнять обзор литературы.
За долгую историю развития функционального и декларативного программирования в мире было издано большое количество книг, посвященных теоретическим и практическим аспектам этих тематик, включая описания конкретных языков программирования. Достаточно много книг было издано также и на русском языке.
В данной статье сделана попытка провести обзор имеющейся русскоязычной литературы. Кроме того, представлен небольшой обзор существующей англоязычной литературы, имеющей отношение к данным темам. В конце статьи приводится список рекомендуемой литературы как по теоретическим вопросам ФП, так и по конкретным языкам программирования.
В 70—80-е гг. в СССР было выпущено достаточно большое количество литературы, касающейся функционального и декларативного программирования. Список книг включает не только переводные книги, но и книги и учебники отечественных авторов, работавших в данных областях. В 90-е годы издание такой литературы практически сошло на нет, но в последние годы эта ситуация стала исправляться — появились переводы хороших зарубежных книг1, а также вышло несколько книг русскоязычных авторов, в том числе и учебники, разработанные специально для вузов2, описанных ниже.
В 2009 году начал издаваться научно-практический журнал "Практика функционального программирования", в котором публикуются статьи на разные темы, связанные с ФП, включая обзоры языков и техник функционального программирования и т.п.
Важно отметить, что большая часть описанных ниже старых книг доступна в электронном виде, что облегчает возможность использования их при изучении соответствующих языков программирования.
В данном разделе рассматриваются книги и учебники, не посвященные конкретным языкам программирования, но дающие читателю возможность получить представление о функциональном программировании, его теоретических основах, и часто — о реализации языков.
В 1993 году издательство "Мир" выпустило перевод достаточно известной книги Functional Programming [1], написанной Петером Харрисоном (Peter G. Harrison) и Антони Филдом (Anthony J. Field) в 1988 году. На русском языке она называется "Функциональное программирование" [2].
Данная книга начинается с рассмотрения функций как таковых и использования функций высшего порядка, а также рассматривает виды вычислений, используемые при функциональном стиле программирования. Для демонстрации приемов программирования в книге вводится язык Hope. Помимо Hope, кратко описываются и другие языки программирования: Lisp, Miranda, FP.
За введением в ФП (функциональное программирование) следует основная часть книги, посвященная вопросам реализации языков программирования, начиная с основ лямбда-исчисления, системы вывода и проверки типов, вопросов интерпретации и компиляции кода, представления данных, сборки мусора, и заканчивая вопросами оптимизации программ (преобразование кода во время компиляции, оптимизация ленивого вычисления данных и т.п.).
Эту книгу можно рекомендовать всем тем, кто хочет не только досконально освоить ФП, но и разобраться во внутреннем устройстве языков программирования.
Данный проект является переводом курса Introduction to Functional Programming [3] Джона Харрисона (John Harrison). Этот курс может использоваться для быстрого ознакомления с основами ФП и семейством языков ML. Он содержит в себе как описание теоретических основ ФП (от лямбда-исчисления до систем типов), так и примеры применения парадигм ФП для решения конкретных задач.
В данном курсе используется язык программирования Caml Light3, входящий в семейство языков ML. По мере прохождения данного курса читатель получает набор знаний, необходимый для освоения данного языка и написания на нем достаточно сложных программ.
Перевод может использоваться как основа курса лекций по ФП — помимо конспектов лекций (lecture notes) в нем содержатся переводы всех сопутствующих слайдов. Последняя версия перевода может быть загружена с сайта проекта.
В 2006 году был выпущен перевод на русский язык классического учебника MIT по основам программирования "Структура и интерпретация компьютерных программ" [4] (Structure & Interpretation of Computer Programs, SICP[5]). Перевод был выполнен Георгием Бронниковым.
Данная книга содержит материалы по основам программирования; показывает, как с помощью композиции несложных процедур программист может строить сложные программные системы. Особый упор делается на показ преимуществ использования абстракций и модульности программ, а в качестве примеров рассматриваются построение языка программирования, включая компиляцию, обработка символьных данных, бесконечные потоки данных и т.п.
Книга отличается от других учебников тем, что в ней описываются разные подходы к композиции программ, демонстрируются преимущества функционального подхода к построению программ, использование функций высшего порядка и т.п., а в качестве основного языка программирования используется язык Scheme.
Качество перевода книги очень высокое, однако имеются недостатки, связанные с изданием самой книги: она вышла в мягком переплете, и ее не очень удобно читать, имеются проблемы верстки и опечатки, а главное — малый тираж (всего 1000 экземпляров), в связи с чем книгу уже тяжело найти в магазинах. В то же время, ее можно найти в электронном виде.
Среди учебных курсов проекта "Интуит" имеется несколько курсов, которые посвящены вопросам функционального и декларативного программирования. Некоторые из них предлагают теоретическое изложение принципов ФП, другие посвящены конкретным языкам программирования. Эти курсы могут стать хорошим подспорьем при изучении ФП, поскольку материал рассчитан на людей, только начинающих знакомиться с соответствующими темами. Практически все курсы содержат задачи и упражнения, выполняя которые можно приобрести практический опыт применения полученных знаний.
В настоящее время опубликованы следующие курсы (материалы некоторых курсов доступны также в печатном виде — книги можно заказать с сайта проекта):
Стоит отметить, что материалы некоторых курсов пересекаются между собой, и некоторые курсы написаны достаточно сложно для самостоятельного изучения4.
Эта книга является переводом известной книги Types and Programming Languages Бенджамина Пирса (Benjamin C. Pierce) [12]. В книге рассматриваются различные аспекты использования типов в языках программирования: математические основы, различные типовые системы, вывод типов и т.д.
Этот перевод, также как и SICP, осуществляется Георгием Бронниковым. Бета-версии книги доступны в электронном виде, текущую версию вы можете найти на сайте проекта. Выход книги в печатном виде планируется после завершения работы над переводом, скорее всего в следующем году.
Помимо описанных выше, на русском языке было издано еще некоторое количество книг, имеющих отношение к функциональному программированию — о математических основах ФП, реализации языков и т.д. Ниже приведен краткий (и, вероятно, неполный) их список:
Наряду с книгами, описывающими общие вопросы программирования на функциональных языках и математические основы лямбда-исчисления, в СССР и России издавались и книги по конкретным функциональным и декларативным языкам программирования. Достаточно широко представлена информация о языках Lisp, Haskell и Prolog, но к сожалению практически отсутствует литература по языку Erlang.
Языку Lisp, являющемуся самым старым функциональным языком, в СССР было посвящено несколько публикаций (хотя их не так много, по сравнению с языком Пролог).
В 70-х гг. было выпущено сразу несколько книг по Лиспу:
В 1990 году вышел в свет широко известный двухтомник "Мир Лиспа" [24], являющийся переводом одноименной книги финских авторов Э. Хювёнен и И. Сеппянен. В первом томе содержится описание языка Common Lisp, включая типы данных и наиболее часто используемые функции, ввод и вывод данных, обработку символьных данных и т.п. Кроме того, часть первого тома посвящена введению в методы ФП: использование рекурсии, функций высшего порядка, замыканий и макросов. Второй том содержит введение в другие методы программирования — логическое и объектное, описание среды программирования Лисп, а также большое количество примеров программ на этом языке, включая простой интерпретатор Лиспа.
Из более современных книг стоит упомянуть книги, выпущенные в рамках проекта Интуит, а также книги, которые планируется выпустить в скором времени.
К сожалению пока нет книг на русском языке, посвященных этому интересному языку. Список имеющейся англоязычной литературы вы можете найти ниже. На русском языке пока существуют только несколько статей — Язык программирования Clojure, опубликованная в рамках проекта IBM developerWorks, и статья Clojure, или «Вы все еще используете Java? Тогда мы идем к вам!», опубликованная в 4-м номере журнала "Практика функционального программирования"
За последние тридцать лет в СССР (а затем и в России) было выпущено достаточно большое количество книг на темы логического программирования и искусственного интеллекта вообще и языка Пролог в частности (особенно много их было издано в 80-х гг.). Этот далеко не полный список включает следующие книги:
В настоящее время количество русскоязычных материалов по языку Haskell невелико. Только в последние годы стали появляться книги об этом языке (упомянутые далее в статье книги Р. Душкина и Н. Рогановой, курсы проекта "Интуит") и появились энтузиасты, работающие над переводом англоязычных книг и статей на русский язык в целях популяризации Haskell среди русскоязычных программистов.
В 2006—2007 гг. Роман Душкин, читавший в МИФИ в 2001—2006 гг. курсы по ФП, выпустил две книги, посвященные языку программирования Haskell.
Первая из них называется "Функциональное программирование на языке Haskell" [38] и является учебником по ФП, с примерами на языке Haskell, и используется в ряде вузов в качестве учебного пособия по ФП. В книге рассматриваются основы лямбда-исчисления, принципы построения программ на функциональных языках, а также описывается круг типовых задач, для которых использование функциональных языков является целесообразным. Использование монад, ввод/вывод данных, классы типов (включая стандартные классы языка Haskell) и другие вопросы иллюстрируются примерами на языке Haskell. В последних двух главах рассматриваются вопросы построения трансляторов и имеющиеся в Haskell средства для этого, а также обсуждаются подходы к решению некоторых задач искусственного интеллекта на языке Haskell.
Стоит отметить, что книга содержит достаточно большое количество математики и написана суховатым языком, что делает ее излишне теоретизированой с точки зрения программиста-практика и затрудняет восприятие. Кроме того, в книге не так много примеров, которые показывали бы применимость языка в повседневной разработке (если сравнивать с книгой Real World Haskell, которая является хорошим образцом в этом деле). Еще одной вещью, затрудняющей чтение книги является качество издания — верстки самой книги и бумаги, на которой она напечатана.
Вторая книга этого же автора называется "Справочник по языку Haskell" [39] и является дополнением к первой. Книга предназначена для читателей, уже знакомых с основами языка Haskell, поэтому она не должна рассматриваться как учебник по этому языку. Она содержит краткое описание синтаксиса языка Haskell, основных типов данных, а также (что важно!) основные приемы программирования на этом языке — использование различных видов рекурсии, функций высшего порядка и анонимных функций, защитных выражений и т.д.
Основная часть книги посвящена стандартным библиотекам, входящим в состав Hugs98 & GHC: начиная с Prelude и включая основные библиотеки (Control, System, Data, Text). Для каждой библиотеки приводится описание определенных в ней типов, классов и функций. Приводимые в справочнике определения функций могут использоваться в качестве примеров по написанию "правильного" кода на Haskell и являются хорошим подспорьем в работе.
В ноябре 2009 года была выпущена (при поддержке проекта "Практика функционального программирования") еще одна книга Романа Душкина. Она называется "Практика работы на языке Haskell" и рассматривает инструментальные средства языка Haskell, такие как компиляторы и интерпретаторы Hugs и GHC, поддержку разработки в среде Eclipse, различные утилиты (hlint, darcs, cabal и другие) и различные библиотеки: Parsec, для разработки парсеров, HaskellDB для работы с базами данных, разработки сетевых и графических приложений. По каждой из подсистем дается небольшое описание и примеры использования.
В 2002 году Институт ИНФО издал учебное пособие Н.А. Рогановой под названием "Функциональное программирование" [40]. В данном пособии основной упор делается на практическое применение ФП для решения конкретных задач (автор выбрала задачи обработки структур данных и различные математические задачи). В нем практически нет теории, изобилующей математикой, что отличает его от других учебников по ФП. Все вводимые понятия иллюстрируются примерами на языке Haskell, который описан достаточно подробно, поэтому данное учебное пособие можно рассматривать в качестве начального по данному языку.
К недостаткам пособия можно отнести то, что отсутствие материала по теоретическим основам ФП (лямбда-исчисление и т.п.) требует изучения дополнительных материалов (которые, к сожалению, не указаны в списке литературы). Кроме того, в части описания языка Haskell мало внимания уделено таким вопросам, как ввод/вывод данных, разбор данных и т.п.
М. Ландина и В. Роганов в 2005 году выполнили перевод The Haskell 98 Report [41] — основного документа, который определяет синтаксис языка Haskell, а также состав основных библиотек этого языка. Перевод этого документа доступен с сервера haskell.ru как в варианте для печати, так и в online-версии.
Денис Москвин сделал перевод хорошо известного учебника по языку Haskell — Gentle Introduction To Haskell [42]. Данный учебник описывает основные возможности языка Haskell и наиболее часто используемые функции стандартных библиотек, включая ввод и вывод, и может использоваться для изучения основ языка. Перевод учебника доступен с сервера RSDN [43] и состоит из двух частей — часть 1 и часть 2.
О семействе языков ML (Standard ML, Objective Caml, Caml Light) на русском языке существует сравнительно немного литературы. В качестве небольшого введения в программирование на языке Caml Light можно использовать курс лекций "Введение в функциональное программирование", описанный выше.
Кроме того, существует незаконченный перевод книги Developing Applications With Objective Caml [44] — переведено 11 глав, описывающих сам язык OCaml и базовые библиотеки, их можно использовать в качестве учебника по данному языку.
Книга Сергиевского и Волчёнкова "Декларативное программирование" в настоящее время находится в процессе издания и должна появиться к концу этого года. Книга предназначена для использования в учебных заведениях. Она рассматривает вопросы функционального и логического программирования, включая теоретические вопросы ФП, доказательство свойств программ и т.д. Для примеров используются языки Lisp и Haskell. Отдельная часть учебника посвящена вопросам логического программирования с использованием языка Prolog.
Другие авторы также ведут работу над несколькими книгами, посвященными Haskell. Одна из них касается вопросов создания специализированных языков программирования (DSL) средствами языка Haskell, включая создание синтаксических анализаторов, а также ряда связанных с этим тем.
Также в последнее время ведется работа над переводом на русский язык книги Practical Common Lisp. Книга содержит достаточно подробное введение в язык Common Lisp и содержит большое количество практических примеров, которые помогают начать использование этого языка в повседневной работе. Работа над переводом находится в заключительной стадии, а переведенный материал доступен на сайте проекта.
Еще одна группа энтузиастов начала работу над переводом знаменитой книги On Lisp [45] Пола Грема (Paul Graham). Вы можете помочь в улучшении этого материала путем вычитки переведенных глав или присоединившись к переводу текста.
На английском языке издано большое количество книг по ФП, его теоретическим основам, а также функциональным языкам программирования. Хотя некоторые книги и были переведены на русский, количество публикаций на английском языке гораздо больше. Краткие рецензии на некоторые из них приведены в этом разделе.
В данном списке собраны книги, посвященные общим вопросам разработки ПО на функциональных языках, а также теоретическим вопросам ФП:
Больше книг вы можете найти на страницах проекта Free Tech Books.
Вопросы реализации функциональных языков программирования рассматриваются в некоторых описанных выше книгах, посвященных теории ФП, но кроме этого, существуют книги, посвященные исключительно вопросам реализации таких языков программирования:
Ниже перечислены наиболее интересные книги на английском языке, посвященные конкретным функциональным языкам программирования.
Среди публикаций, посвященных языку Haskell, я хотел бы отметить следующие:
Кроме напечатанных книг и учебников, имеются и материалы, доступные online. К наиболее интересным можно отнести:
Книга Programming Erlang. Software for a Concurrent World [64], написанная Джо Армстронгом (Joe Armstrong), является практически единственным доступным печатным изданием, посвященным языку Erlang, поскольку выпущенная ранее книга "Concurrent Programming in Erlang" [65] стала уже библиографической редкостью (в интернете можно найти первую часть этой книги). "Programming Erlang" описывает язык простым языком и знакомит читателя с его основным функционалом. Кроме самого языка, книга описывает более сложные темы: базы данных, использование OTP и т.п.
Издательство O'Reilly в 2009-м году выпустило книгу Erlang Programming [66], описывающую как сам язык, так и инфраструктурные вопросы, включая OTP, программирование графических приложений, test-driven разработку, отладку и т.д. Эта книга более подробная чем книга Армстронга.
Кроме того, планируется выпуск следующих книг, посвященных как самому языку Erlang, так и применению его в конкретных задачах:
Вопросам программирования на языке Objective Caml (OCaml) посвящено несколько книг.
Наиболее известной является свободно доступная книга Developing Applications with Objective Caml [44], которая не только описывает сам язык OCaml, но и рассматривает различные вопросы программирования с его использованием.
Недавно также появилась свободно распространяемая книга Introduction to Objective Caml [69], которая содержит достаточно подробное описание языка и примеры его применения.
Книга OCaml for Scientists [70] посвящена вопросам использования OCaml для "научного программирования" — обработки данных, математических вычислений, визуализации данных и оптимизации кода для лучшей производительности.
Еще одна книга — Practical OCaml [71], описывает язык OCaml и приемы программирования на нем. К сожалению, по многочисленными отзывами читателей, книга написана не очень хорошо.
Технический отчет The ZINC experiment: an economical implementation of the ML language [72], написанный Xavier Leroy в 1990 году, представляет собой подробное описание реализации языка ML и может быть интересен тем, кто интересуется внутренним устройством Caml & OCaml.
В настоящее время по языку F# написана серия книг.
Foundations of F# [73], выпущенная в 2007-м году, описывает основы языка и показывает разные методы программирования на нем, включая создание пользовательских интерфейсов и работу с базами данных. В конце 2009-го года вышла новая версия этой книги, под названием Beginning F#.
Книга Expert F#[74] в свою очередь посвящена более сложным вопросам применения F# для разработки программ, таким как взаимодействие с кодом, написанным на других языках, использование библиотек .Net, разбор данных, асинхронное программирование и т.д.
F# for Scientists [75] является версией книги "OCaml for Scientists", адаптированной для языка F#, и содержит информацию по разным аспектам применения F# в "научном программировании" — визуализации данных, работе с базами данных, обработке данных и т.д.
В октябре 2009-го года издательство O'Reilly выпустило книгу Programming F#, которая содержит описание актуальной версии языка F#, начиная с рассмотрения основ функционального и объектно-ориентированного программирования на данном языке, использование библиотек платформы .Net, метапрограммирование с помощью доступных средств платформы, а также использование возможностей языка для асинхронного и параллельного программирования. Кроме этого, в приложениях приводится информация об имеющихся библиотеках для обработки и визуализации данных.
В конце 2009-го года, издательство Manning опубликовало книгу Functional Programming for the Real World: With Examples in F# and C#, которая описывает декларативный подход к разработке программ, и иллюстрирует его с помощью примеров на языках F# и C#. Данная книга может быть интересна для программистов, имеющих опыт разработки для платформы .Net, и желающих ознакомиться с разными подходами к разработке программ.
В июне 2010-го была выпущена книга Expert F# 2.0 (The Definitive Guide), написанная Don Syme, Adam Granicz и Antonio Cisternino. Данная книга содержит подробное описание самой последней версии языка, которая была выпущена в составе MS Visual Studio 10.
К выходу также планируются следующие книги:
По языку Standard ML также выпущено достаточно большое количество книг.
Книга ML for the Working Programmer [76] является практическим введением в этот язык, описывающим сам язык и демонстрирующим некоторые приемы программирования на нем.
Книга The Little MLer [77] является кратким справочником по языку с примерами программ.
Книга "Unix System programming with Standard ML" [78] посвящена демонстрации применимости функциональных языков в повседневной работе.
Книга Elements of ML Programming, ML97 Edition [79], также описывающая сам язык и методы программирования на нем, может использоваться как введение в язык Standard ML.
Несколько книг посвящены изложению стандарта языка. К ним можно отнести книги The Definition of Standard ML [80] и The Standard ML Basis Library [81], которые содержат подробную информацию о языке и стандартной библиотеке.
Кроме описанных ранее русскоязычных книг по языку Lisp, существует большое количество книг на английском языке, посвященных Lisp и его диалектам:
Весной 2010-го года, издательство No Starch Press должно выпустить еще одну книгу по Lisp — Land of LISP: Learn to Program in LISP, One Game at a Time!.
А издательство O'Reilly также планирует выпустить книгу о Common Lisp под названием "Lisp Outside the Box", и несколько глав уже доступно для чтения на сайте проекта. Как видно из оглавления, в книге рассматривается широкий круг вопросов — от основ Common Lisp, до разработки приложений для веб и десктопа, а также работа с конкретными библиотеками и средами разработки.
По языку программирования Scheme также выпущено несколько книг, в настоящее время можно купить следующие из них:
Книги описывают как сам язык, так и различные аспекты его использования. Эти книги могут использоваться как справочники по языку и являются хорошим дополнением к книгам Structure and Interpretation of Computer Programs [5] и How to Design Programs [51], в которых язык Scheme использован для примеров.
Количество англоязычных книг по Прологу достаточно велико. Ниже приведен лишь небольшой список имеющейся литературы — я старался отобрать наиболее интересные книги:
Язык Scala становится достаточно популярным, и начал использоваться в коммерческих проектах, таких как Twitter, LinkedIn, и других. По данному языку существует достаточно большое количество литературы на английском языке:
К изданию планируются следующие книги:
Clojure — недавно появившийся Lisp'ообразный язык программирования для Java Virtual Machine (JVM). В отличии от других реализаций, он не совместим полностью ни с Common Lisp, ни с Scheme, а реализует свое подмножество Lisp. Отказ от совместимости с другими реализациями, позволил реализовать некоторые интересные вещи, как неизменяемость данных, неявную параллелизацию кода, очень простую модель конкурентного программирования и другие вещи, при этом обеспечивая возможность двухстороннего взаимодействия с кодом на Java.
В 2009-м году в серии Pragmatic Programmers вышла книга Programming Clojure. Эта книга представляет собой достаточно хорошее введение в язык, описывая основные возможности языка (версии 1.0, существовавшей на время выхода книги). Но в качестве справочника необходимо использовать соответствующий раздел сайта языка, поскольку в книге в основном дается описание концепций языка.
В мае 2010-го года вышла книга Practical Clojure. The Definitive Guide, которая содержит описание всех возможностей языка в достаточно кратком изложении. Но при этом в книге отсутствует описание инфраструктурных вещей, таких как среды разработки, утилиты для сборки кода и т.д. Но несмотря на это, эту книгу можно рекомендовать в качестве учебника по языку.
А осенью 2010-го года, издательство Manning должно выпустить книгу Clojure in Action, а после ее выпуска, еще одну - Joy of Clojure. Thinking the Clojure Way. Обе книги уже доступны в рамках программы раннего доступа (MEAP).
Среди свободных источников информации можно отметить Clojure Notes, который использовался в курсе обучения Clojure и книгу Clojure Programming, создаваемую в рамках проекта Wikibooks.
Если вы хотите познакомиться с принципами создания функциональных языков программирования, то на русском языке базовую информацию вы почерпнете из книг "Функциональное программирование" [2], "Функциональное программирование. Применение и реализация" (Хендерсон) и "Реализация функциональных языков". Из книг на английском языке я могу порекомендовать книги, перечисленные в разделе "Реализация функциональных языков программирования".
Заинтересовавшиеся Common Lisp могут начать его изучение с книги Practical Common Lisp [98] (существующей и на русском языке), которая даст информацию по основным аспектам языка. Более сложные аспекты работы с Lisp описаны в On Lisp [45], The Art of Metaobject Protocol [85], Let Over Lambda [86], Lisp in Small Pieces [89] и других англоязычных книгах.
Для обучения функциональному программированию на языке Haskell можно порекомендовать книгу Introduction to Functional Programming using Haskell Ричарда Бёрда [57]. Для желающих узнать о практическом применении Haskell хорошим выбором будет книга Real World Haskell [58], в которой приводятся практические примеры использования Haskell. Среди учебников можно отметить Yet another Haskell tutorial [63] и A Gentle Introduction to Haskell 98 [42] (также доступный на русском языке), ну и конечно раздел о Haskell в проекте Wikibooks.
В настоящее время по языку Erlang доступно не так уж много литературы — только книга Programming Erlang. Software for a Concurrent World [64], книга Erlang Programming и официальная документация. Вторая книга более подробна, чем первая, поэтому рекомендуется начать ознакомление с языком с нее.
Для ознакомления с языками семейства ML существует достаточно много литературы. Выбравшим OCaml лучше начать с книги Introduction to Objective Caml [69], используя её вместе со справочником по языку, а потом переходить к Developing Applications with Objective Caml [44] и другим книгам из списка выше. А изучение F# стоит начать с Expert F# 2.0 и продолжить с F# for Scientists [75].
Для Prologа выбор книг достаточно велик — начать можно с книги Братко "Программирование на языке Пролог для искусственного интеллекта" [26], а затем переходить к книгам на английском языке, перечисленным выше.
Хотелось бы отметить, что появившаяся тенденция к изданию на русском языке книг по тематике функционального/декларативного программирования не может не радовать. В печати появляются как переводы отличных зарубежных книг, так и публикации отечественных авторов. Некоторые книги зарубежных авторов переводятся силами энтузиастов, что часто позволяет получить очень качественный с технической точки зрения перевод.
1. Очень часто они переводились силами энтузиастов функционального программирования.
2. Тут необходимо отметить серию учебников и учебных курсов проекта Интуит.
3. Хочется отметить, что ведется работа над версией курса лекций, адаптированной для языка OCaml, который является развитием Caml Light, но не полностью совместим с ним.
4. Это, к сожалению, беда многих советских и российских учебников.
5. Продолжение — continutation.
1. A. J. Field, P. G. Harrison. Functional Programming. Addison-Wesley, 1988
2. А. Филд, П. Харрисон. Функциональное программирование. М.: Мир, 1993
3. John Harrison. Introduction to Functional Programming, 1997
4. Харольд Абельсон, Джеральд Джей Сассман. Структура и интерпретация компьютерных программ. М.: Добросвет, 2006
5. Harold Abelson, Gerald J. Sussman. Structure, Interpretation of Computer Programs, 2nd Edition. The MIT Press, 1996
6. Н. Н. Непейвода. Стили и методы программирования
7. Л. В. Городняя, Н.А. Березин. Введение в программирование на Лиспе
8. Л. В. Городняя. Основы функционального программирования
9. Л. В. Городняя. Парадигмы программирования
10. С. В. Зыков. Введение в теорию программирования. Функциональный подход
11. П. А. Шрайнер. Основы программирования на языке Пролог
12. Benjamin C. Pierce. Types, Programming Languages. MIT Press, 2002
13. Simon L. Peyton Jones, David Lester. Implementing functional languages: a tutorial, 1992
14. С. П. Джонс, Д. Лестер. Реализация функциональных языков, 1992
15. П. Хендерсон. Функциональное программирование. Применение и реализация. М.: Мир, 1983
16. P. Henderson. Functional Programming: Application, Implementation. Prentice-Hall, 1980
17. Х. Барендрегт. Ламбда-исчисление. Его синтаксис и семантика. М.: Мир, 1985
18. H. P. Barendregt. The Lambda Calculus: its Syntax, Semantics. North-Holland, 1981
19. С. Маклейн. Категории для работающего математика. Физматлит, 2004
20. Saunders Mac Lane. Categories for the Working Mathematician. Springer Verlag, 1998
21. В. М. Зюзьков. Математическое введение в декларативное программирование. Томск: ТГУ, 2003
22. W. D. Maurer. The programmer's introduction to LISP. London, Macdonald, 1972
23. С. С. Лаврова, Г. С. Силагадзе. Автоматическая обработка данных. Язык ЛИСП и его реализация. М.: Наука, 1978
24. Э. Хювёнен, И. Сеппянен. Мир Лиспа. М.: Мир, 1990
25. И. Братко. Программирование на языке PROLOG для искусственного интеллекта. М.: Мир, 1990
26. И. Братко. Алгоритмы искусственного интеллекта на языке Prolog. Вильямс, 2004
27. Клоксин У., Меллиш К.. Программирование на языке пролог. М.: Мир, 1987
28. А. Адаменко, А. Кучуков. Логическое программирование и Visual Prolog. БХВ-Петербург, 2003
29. Дж. Малпас. Реляционный язык Пролог и его применение. М.: Наука, 1990
30. С. Чери, Г. Готлоб, Л. Танка. Логическое программирование и базы данных. М.: Мир, 1992
31. Л. Стерлинг, Э. Шапиро. Искусство программирования на языке Пролог. М.: Мир, 1990
32. Leon Sterling, Ehud Shapiro. The Art of Prolog: Advanced Programming Techniques. The MIT Press, 1986
33. Ц. Ин, Д. Соломон. Использование Турбо-Пролога. М.: Мир, 1990
34. Дж. Макаллистер. Искусственный интеллект и Пролог на микроЭВМ. М.: Машиностроение, 1990
35. Дж. Стобо. Язык программирования Пролог. М.: Радио и связь, 1993
36. John Stobo. Problem Solving with Prolog. Pitman, 1989
37. Дж. Доорс, А. Р. Рейблейн, С. Вадера. Пролог - язык программирования будущего. М.: Финансы и статистика, 1990
38. Р. В. Душкин. Функциональное программирование на языке Haskell. М.: ДМК Пресс, 2007
39. Р. В. Душкин. Справочник по языку Haskell. М.: ДМК Пресс, 2008
40. Н. А. Роганова. Функциональное программирование. М.: Институт ИНФО, 2002
41. Simon Peyton Jones. Haskell 98 Language, Libraries. The Revised Report, 2002
42. Paul Hudak, John Peterson, Joseph Fasel. A Gentle Introduction To Haskell, version 98
43. Пол Хьюдак, Джон Петерсон, Джозеф Фасел. Мягкое введение в Haskell
44. Emmanuel Chailloux, Pascal Manoury, Bruno Pagano. Developing Applications With Objective Caml. O'Reilly, 2000
45. Paul Graham. On Lisp. Prentice Hall, 1993
46. Shriram Krishnamurthi. Programming Languages: Application, Interpretation, 2003
47. Chris Okasaki. Purely Functional Data Structures. Cambridge University Press, 1998
48. Guy Cousineau, Michel Mauny. The Functional Approach to Programming. Cambridge University Press, 1998
49. Fethi A. Rabhi, Guy Lapalme. Algorithms: A Functional Programming Approach. Addison Wesley, 1999
50. Raphael Finkel. Advanced Programming Language Design. Addison Wesley, 1995
51. Matthias Felleisen, Robert Bruce Findler, Matthew Flatt and Shriram Krishnamurthi. How to Design Programs: An Introduction to Programming, Computing. The MIT Press, 2001
52. Benjamin C. Pierce. Basic Category Theory for Computer Scientists. The MIT Press, 1991
53. F. William Lawvere, Stephen H. Schanuel. Conceptual Mathematics: A First Introduction to Categories. Cambridge University Press, 2009
54. Franklyn A. Turbak, David K. Gifford. Design Concepts in Programming Languages. The MIT Press, 2008
55. Simon L. Peyton Jones. The Implementation of Functional Programming Languages. Prentice-Hall, 1987
56. Richard Jones, Rafael Lins. Garbage Collection: Algorithms for Automatic Dynamic Memory Management. Wiley, 1996
57. R. S. Bird. Introduction to Functional Programming Using Haskell, 2nd Edition. Prentice-Hall, 1998
58. Bryan O'Sullivan, Donald Stewart, John Goerzen. Real World Haskell. O'Reilly Media, Inc., 2008
59. Kees Doets, Jan van Eijck. The Haskell Road to Logic, Maths, Programming. College Publications, 2004
60. Graham Hutton. Programming in Haskell. Cambridge University Press, 2007
61. Simon Thompson. Haskell: The Craft of Functional Programming, 2nd Edition. Addison-Wesley, 1999
62. Paul Hudak. The Haskell School of Expression: Learning Functional Programming through Multimedia. Cambridge University Press, 2000
63. Hal Daum\'e III. Yet Another Haskell Tutorial
64. Joe Armstrong. Programming Erlang: Software for a Concurrent World. Pragmatic Programmers, 2007
65. Joe Armstrong, Robert Virding, Claes Wikström, Mike Williams. Concurrent Programming in Erlang, Second Edition. Prentice-Hall, 1996
66. Francesco Cesarini, Simon Thompson. Erlang Programming. O'Reilly, 2009
67. Martin Logan, Eric Merritt, Richard Carlsson . Erlang, OTP in Action. Manning, 2010
68. N.G. Gerakines. Erlang Web Applications: Problem-Design-Solution. John Wiley, Sons, 2009
69. Jason Hickey. Introduction to Objective Caml, 2008
70. Jon Harrop. OCaml for Scientists, 2007
71. Joshua B. Smith. Practical OCaml. Apress, 2006
72. Xavier Leroy. The ZINC experiment: an economical implementation of the ML language, 1990
73. Robert Pickering. Foundations of F#. Apress, 2007
74. Don Syme, Adam Granicz, Antonio Cisternino. Expert F#. Apress, 2007
75. Jon Harrop. F# for Scientists. Wiley-Interscience, 2008
76. Lawrence C. Paulson. ML for the Working Programmer, 2ed. Cambridge University Press, 1996
77. Matthias Felleisen, Daniel P. Friedman. The Little MLer. The MIT Press, 1997
78. Anthony L. Shipman. Unix System Programming with Standard ML, 2001
79. Jeffrey D. Ullman. Elements of ML Programming, ML97 Edition, 2ed. Prentice Hall, 1998
80. R. Milner, M. Tofte, B. Harper. The Definition of Standard ML. MIT Press, 1990
81. Emden R. Gansner, John H. Reppy. The Standard ML Basis Library. Cambridge University Press, 2002
82. Peter Norvig. Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp. Morgan Kaufmann, 1991
83. Paul Graham. ANSI Common LISP. Prentice Hall, 1995
84. Sonya E. Keene. Object-Oriented Programming in Common Lisp: A Programmer's Guide to CLOS. Addison-Wesley Professional, 1989
85. Gregor Kiczales, Jim des Rivieres, Daniel G. Bobrow. The Art of the Metaobject Protocol. The MIT Press, 1991
86. Doug Hoyte. Let Over Lambda. Lulu.com, 2008
87. Guy Steele. Common LISP. The Language, 2ed. Digital Press, 1990
88. David B. Lamkins. Successful Lisp: How to Understand, Use Common Lisp. bookfix.com, 2004
89. Christian Queinnec. Lisp in Small Pieces. Cambridge University Press, 2003
90. Daniel P. Friedman, Matthias Felleisen, Gerald J. Sussman. The Little Schemer, 4th Edition. The MIT Press, 1995
91. Daniel P. Friedman, William E. Byrd, Oleg Kiselyov. The Reasoned Schemer. The MIT Press, 2005
92. Daniel P. Friedman, Matthias Felleisen. The Seasoned Schemer. The MIT Press, 1995
94. Max Bramer. Logic Programming with Prolog. Springer, 2005
95. W.F. Clocksin, C.S. Mellish. Programming in Prolog: Using the ISO Standard, 5th Edition. Springer, 2003
96. William F. Clocksin. Clause, Effect: Prolog Programming for the Working Programmer . Springer, 2003
97. Michael A. Covington, Donald Nute, Andre Vellino. Prolog Programming in Depth. Prentice Hall, 1996
98. Peter Seibel. Practical Common Lisp. Apress, 2005
Last change: 09.07.2010 13:58