Dark Magus ([info]_darkus_) wrote,
@ 2005-11-02 12:27:00
Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Entry tags:ФП

Сажусь за книгу по ФП
С нескрываемым восторгом сообщаю, что наконец-то я нашёл в себе силы сесть за написание книги по функциональному программированию, благо поле сие необхватно, а в России и на русском языке книг практически нет (то, что я описывал давеча — не книга, а какое-то безобразие). Итак, для обсуждения добрыми читателями, выношу на свет план-проспект своей будущей книги, техническое название которой пока звучит как «Функциональное программирование на языке Хаскелл».


Эта книга является первым в России полноценным учебным и справочным изданием по функциональному программированию на примере языка Хаскелл (Haskell). Книга представляет собой введение в парадигму функционального программирования, где простым и понятным языком приводятся решения типичных задач, которые встают перед исследователями и учёными в области искусственного интеллекта. Основополагающие принципы функционального программирования излагаются на примере языка Хаскелл и интерпретатора этого языка HUGS 98.

Книга рассчитана на всех, кто интересуется современными тенденциями развития компьютерной науки и технологии (computer science), а также искусственным интеллектом (artificial intelligence). Может служить дополнительным пособием для студентов и аспирантов, обучающихся по специальности «прикладная математика» и специализации «искусственный интеллект». Также книга будет полезна в качестве справочного пособия по языку Хаскелл всем тем, кто использует этот функциональный язык в своей работе и исследованиях.

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

Содержание

Введение

Глава 1. Основы функционального программирования

Раздел 1.1. История функционального программирования

Краткая история развития теории функционального программирования в мире и в России. Разработка функциональных языков для подтверждения теоретических выкладок. Проблемы, с которыми столкнулись исследователи при разработке функциональных языков программирования. Современное состояние теории функционального программирования. Стандарт Haskell 98, как результат унификации и стандартизации процессов развития функционального программирования.
Раздел 1.2. Основные свойства функциональных языков
Описание основных свойств функциональных языков программирования. Краткость и простота, строгая типизация, модульность, функциональные значения и объекты, чистота и отложенные вычисления. Понимание свойств функциональных языков на примере языка Хаскелл.
Раздел 1.3. Типичные задачи, решаемые методами функционального программирования
Краткое описание семи типичных задач, которые решаются методами функционального программирования.
Раздел 1.4. Конструирование функций
Описание метода конструирования функций, предложенного Хоаром (синтаксически-ориентированное конструирование). Метаязык для конструирования функций. Примеры определения типов и функций для обработки этих типов.
Раздел 1.5. Доказательство свойств функций
Задача доказательства свойств функций. Описание процесса доказательства свойств функций в зависимости от типа области определения функций. Примеры доказательства свойств функций.
Глава 2. Базовые принципы языка Хаскелл

Раздел 2.1. Списки — основа функциональных языков
Понятие списка в функциональном программировании. Списки, как основная структура для работы с функциональными языками. Базисные операции для работы со списками. Списки и списочные структуры. Программная реализация списков в функциональных языках. Списки в языке Хаскелл. Генераторы списков и математические последовательности. Бесконечные списки.
Раздел 2.2. Функции, как описания процессов вычисления
Функция — основной объект изучения функционального программирования. Соглашения по именованию объектов в языке Хаскелл. Описание и определение функций на языке Хаскелл. Образцы и клозы. Передача параметров и возвращение значений функциями. Инфиксный способ записи функций. Функция, как объект для передачи в другие функции. Программа на языке Хаскелл — функция, описывающая процесс вычисления.
Раздел 2.3. Типизация данных и функций
Структуры и типы данных. Типы функций. Каррированные и некаррированные функции. Язык Хаскелл и его механизмы для организации каррированных и некаррированных функций. Описание типов функций на язяке Хаскелл. Частичное применение. Ленивые (отложенные) вычисления на языке Хаскелл.
Раздел 2.4. Элементы программирования
Охраняющие выражения и конструкции. Локальные переменные для оптимизации кода на функциональном языке и на языке Хаскелл. Использование накапливающего параметра (аккумулятора) для оптимизации процесса вычислений. Принципы построения определений функций с накапливающим параметром. Головная и хвостовая рекурсия.
Раздел 2.5. Модули и абстрактные типы данных
Модули, как способы структуризации и организации программ на языке Хаскелл. Импорт и экспорт данных при помощи модулей. Сокрытие данных. Абстрактные типы данных и интерфейсы. Иные аспекты использования модулей.
Глава 3. Классы и объекты

Раздел 3.1. Параметрический полиморфизм данных
Понятие класса и его реализации в языке Хаскелл. Чистый (параметрический) полиморфизм на языке Хаскелл. Примеры параметрического полиморфизма в императивных и функциональных языках, а также в языке Хаскелл.
Раздел 3.2. Классы в языке Хаскелл, как способ абстракции действительности
Расширенное описание понятия класса в языке Хаскелл. Класс, как высшая абстракция данных и методов для их обработки. Методы класса — шаблоны функций для реализации обработки данных. Минимальное описание методов класса и связь методов.
Раздел 3.3. Наследование и реализация
Наследование классов и наследование методов. Экземпляры классов — реализация интерфейсов, предоставляемых реализуемым классом. Реализация методов для обработки данных. Класс — шаблон типа, реализация класса — тип данных.
Раздел 3.4. Стандартные классы языка Хаскелл
Краткое описание всех стандартных классов, разработанных для облегчения программирования на языке Хаскелл. Дерево наследования стандартных классов. Типичные способы использования стандартных классов языка Хаскелл. Реализация стандартных классов — типы в языке Хаскелл.
Раздел 3.5. Сравнение с другими языками программирования
Более или менее полное сравнение понятий «класс» и «реализация класса» в языке Хаскелл с объектно-ориентированными языками программирования (на примере языков C++ и Java). Глобальные отличия понятия «класс» в функциональных и объектно-ориентированных языках.
Глава 4. Монады — императивный мир в функциональной парадигме

Раздел 4.1. Монада, как тип-контейнер
Описание монады, как типа-контейнера. Использование монад в функциональных языках. Свойства монадических типов. Операции связывани с передачей и без передачи результата выполнения операции на предыдущем шаге. Список, как монада. Взгляд на генераторы списков, как на последовательное выполнение операций связывания.
Раздел 4.2. Последовательное выполнение действий
Действие — элемент функциональной парадигмы. Императивный код внутри функционального. Выполнение действий и возвращение результата. Поддержка императивности на уровне синтаксиса в языке Хаскелл. Сокращённый способ записи последовательности действий. Списки действий. Программирование при помощи действий.
Раздел 4.3. Операции ввода/вывода в языке Хаскелл
Более или менее полное описание базовых операций ввода/вывода в языке Хаскелл. Монада IO. Обработка исключений. Использование файлов, каналов и обработчиков. Нарушение теоретических принципов функционального программирования в монаде IO.
Раздел 4.4. Стандартные монады языка Хаскелл
Подробное описание монадических типов в стандартной библиотеке языка Хаскелл. Назначение и применимость монадических типов. Примеры использования стандартных монадических типов (кроме списков и монады IO).
Раздел 4.5. Разработка собственных монад
Пример и принципы разработки монад на языке Хаскелл. Критерии возможности и необходимости разработки собственного монадического типа. Использование наследования методов стандартных монад языка Хаскелл для расширения их функциональности.
Глава 5. Комбинаторная логика и λ-исчисление

Раздел 5.1. Основы комбинаторной логики
Введение в комбинаторную логику. Поверхностоное описание принципов комбинаторной логики. Комбинаторы и вычисления при помощи комбинаторов. Базисы в комбинаторной логике. Использование базисных комбинаторов для выражения любых вычислительных процессов. Числа и иные математические объекты в виде комбинаторов.
Раздел 5.2. Абстракция функций, как вычислительных процессов
Функция — объект математического исследования. Вычислительный процесс — функция. Описание функций, как λ-выражений. Свободные и связанные идентификаторы. Применение (аппликация) значений к λ-выражениям. Непрерывная точка функций и теорема о непрерывной точке.
Раздел 5.3. λ-исчисление, как теоретическая основа функционального программирования
Предположение о том, что любая функция представима в виде λ-выражения. Интенсионал и экстенсионал функций. Формальная система. Построение формальной системы для обоснования теории функционального программирования. Правила вывода. Соответствия между вычислениями функциональных программ и редукцией λ-выражений.
Раздел 5.4. Использование λ-исчисления в языке Хаскелл
Механизм описания λ-выражений на языке Хаскелл. Анонимные функции. Представление определений функций в виде λ-выражений. Базисные операции языка Хаскелл в виде λ-выражений.
Раздел 5.5. Редукция и вычисления в функциональных языках
Понятие редукции. Частичные вычисления с точки зрения редукции λ-выражений. Различные редукционные стратегии и их свойства.
Глава 6. Трансляторы программ

Раздел 6.1. Математическая лингвистика
Краткое введение в математическую лингвистику. Обзор методов и принципов математической лингвистики. Классификация языков и грамматик. Конечные автоматы и контекстно-свободные языки. Грамматики типа LLK. Контекстно-зависимые грамматики.
Раздел 6.2. Введение в теорию построения трансляторов
Трансляторы: определения, типы и классификация, применимость для тех или иных типов языков и грамматик. Интерпретаторы и компиляторы. Компиляторы компиляторов. Методы построения трансляторов. Автоматическое построение транслятора по грамматике языка (для ограниченного множества языков).
Раздел 6.3. Реализация трансляторов на языке Хаскелл
Функциональные языки, как естественный инструмент реализации трансляторов. Парсеры. Методы написания трансляторов на языке Хаскелл. Простейшие парсеры. Примеры парсеров для различных форматов данных. Пример вычисления арифметических выражений, записанных в различной нотации.
Раздел 6.4. Трансформация программ
Задача трансформации программ. Понятие трансформационной грамматики. Реализация трансформационных грамматик для ограниченного класса языков на языке Хаскелл. Виды преобразования программ, классификация.
Раздел 6.5. Частичные вычисления и суперкомпиляция
Частичные вычисления, как инструмент для трансформации программ. Частичный вычислитель — инструмент для получения остаточного кода заданной функциональной программы. Интерпретатор, компилятор и суперкомпилятор, их связь. Проекции Футаморы-Турчина.
Глава 7. Функциональное программирование и искусственный интеллект

Раздел 7.1. Основные задачи искусственного интеллекта
Историческая справка о развитии искусственного интеллекта, как области научного исследования. Введение в базовые понятия искусственного интеллекта. Место функционального программирования в искусственном интеллекте. Функциональное и логическое программирование. Задачи искусственного интеллекта, которые могут быть решены при помощи методов и средств функционального программирования.
Раздел 7.2. Нечёткая математика и функциональное программирование
Небольшой экскурс в нечёткую математику. Функции принадлежности и лингвистические переменные. Базовые операции над функциями принадлежности. Кусочно-линейные функции принадлежности. Операции сравнения, арифметические и логические опрерации над кусочно-линейными функциями принадлежности. Использование языка Хаскелл для реализации методов обработки кусочно-линейных функций принадлежности.
Раздел 7.3. Логический вывод на знаниях
Знания и данные. Модели представления знаний. Понятие логического вывода на знаниях. Стратегии вывода на знаниях. Машины вывода. Эволюция машинного вывода на знаниях. Интерпретаторы функциональных языков как естественные машины вывода. Язык Хаскелл и его возможности в логическом выводе на знаниях. Универсальный вывод на продукционной модели знания.
Раздел 7.4. Общение с компьютером на естественном языке
Принципы общения с компьютерными системами на естественном языке. Ограниченный естественный язык, деловая проза. Трансляция фраз на естественном языке во внутренний язык представления смысла. Понимание текстов на естественном языке. Использование методов функционального программирования.
Раздел 7.5. Перспективы функционального программирования
Описание видения будущего функционального программирования, функциональных языков и языка Хаскелл. Значение функциональной парадигмы для технологии программирования вообще.
Заключение

Список литературы
Список литературы, который может быть как общим, так и по главам. В принципе, список литературы может и отсутствовать.
Приложение 1. Функциональные языки программирования и интернет-ресурсы по функциональному программированию
Список наиболее известных и широко используемых функциональных языков программирования с краткой аннотацией. Возможно сравнение с языков Хаскелл, перечисление достоинств и недостатков каждого конкретного языка. Список интернет-ресурсов, посвящённых функциональному программированию как в русском сегменте интернета, так и во всём остальном мире.
Приложение 2. Настройка среды разработки HUGS 98
Описание типичной настройки интегрированной среды разработки и компилятора HUGS 98 для полноценной работы и выполнения различных задач на языке Хаскелл. Список команд, ключей командной строки и внутренних директив интерпретатора HUGS 98.
Приложение 3. Описание стандартного модуля Prelude.hs
Список классов, объектов, типов и функций из стандартного модуля языка Хаскелл Prelude.hs с более или менее подробным описанием. Возможно, будут приведены типичные способы использования каждого конкретного объявления из файла Prelude.hs.



(Post a new comment)


[info]potan
2005-11-02 09:45 am UTC (link)
А почему просто Футаморы, а не Футаморы-Турчина?
Старна должна знать своих героев ;-))).

(Reply to this)(Thread)


[info]_darkus_
2005-11-02 10:49 am UTC (link)
Вот, блин... Сколько учился и учил, а об этом не знал. Таковы недостатки образования...
Спасибо, буду иметь в виду.

(Reply to this)(Parent)


dmitri83
2006-01-16 10:56 pm UTC (link)
а что такое суперкомпирятор?

(Reply to this)(Parent)(Thread)


[info]potan
2006-01-17 09:15 am UTC (link)
Здесь можно почитать.

(Reply to this)(Parent)


[info]gendalf_vrn
2005-11-02 10:50 am UTC (link)
А когда примерно можно ожидать её выход в свет?

(Reply to this)(Thread)


[info]_darkus_
2005-11-02 10:55 am UTC (link)
Я даже ещё не сел за текст, а просто план-проспект составил. Примерный. Посему даже не могу предположить, когда окончательный вариант рукописи смогу представить. Надеюсь, что будущей весной.

(Reply to this)(Parent)(Thread)


[info]potan
2005-11-02 01:49 pm UTC (link)
Хорошо если весной, уж больно планы большие.
IMHO, 1-5 главы надо издавать как только будут готовы. 6 и 7 потом отдельным томом.

(Reply to this)(Parent)(Thread)


[info]_darkus_
2005-11-02 01:52 pm UTC (link)
Кстати, кстати... Я тоже об этом подумал, когда перечитал сие. Ведь писáл я это ажно два года назад, когда мне поступило первое предложение из издательства по написанию книги. А теперь вот достал из пыльного ящика. Тогда-то я просил 9 месяцев, а сейчас хочу обойтись четырьмя. Может и не выйдет...

(Reply to this)(Parent)


dmitri83
2006-01-16 09:32 pm UTC (link)
ну, как говорится, $DEITY в помощь!

(Reply to this)

вчера на #haskell
[info]_adept_
2006-01-25 01:45 pm UTC (link)
The real benefit of lazy evaluation still has to be evaluated out.

(Reply to this)


[info]life_maker
2006-08-28 07:07 am UTC (link)
Блин... Шо б мне так за книгу сесть. :))) Уже столько нужно написать... Эх.

(Reply to this)(Thread)


[info]_darkus_
2006-08-28 07:10 am UTC (link)
У меня 600 страниц вышло.

(Reply to this)(Parent)(Thread)


[info]life_maker
2006-08-28 07:16 am UTC (link)
Нет, ну на такой подвиг я пока не способен. :))) Начну с небольших методичек. :) По УрЧП.

(Reply to this)(Parent)


[info]akopyan
2006-08-28 11:07 am UTC (link)
Говорят Вы высылаете её если попросить.
Пришлите пожалуйста на luglа собака мэил ру

(Reply to this)(Thread)


[info]_darkus_
2006-08-28 11:10 am UTC (link)
Уже не высылаю... :)

(Reply to this)(Parent)(Thread)


[info]akopyan
2006-08-28 11:20 am UTC (link)
Ну может я там опечатки найду

(Reply to this)(Parent)(Thread)


[info]_darkus_
2006-08-28 11:24 am UTC (link)
Да их все уже нашли специально обученные для этого люди. Я могу, конечно, выслать старую версию (новую я никому не высылаю), но она уже весьма неактуальна.

(Reply to this)(Parent)(Thread)


[info]akopyan
2006-08-28 11:29 am UTC (link)
Хаскел сильно изменился?
Высылайте старую. Потом, когда я куплю новую и обноружу там опечатки, буду над Вами публично смеятся. Предупреждаю

(Reply to this)(Parent)(Thread)


[info]_darkus_
2006-08-28 11:33 am UTC (link)
Да пожалуйста. Только надо мной смеяться будет бессмысленно. Корректуру в издательстве делали. :)

Выслал уже...

(Reply to this)(Parent)


[info]smee_again
2006-10-26 11:21 am UTC (link)
а скоро будет?

(Reply to this)(Parent)(Thread)


[info]_darkus_
2006-10-26 11:32 am UTC (link)
В этом месяце, предположительно...

(Reply to this)(Parent)(Thread)


[info]smee_again
2006-10-26 11:34 am UTC (link)
Здорово! :) На книги какого издательства начинать пристально обращать внимание через месяц?

(Reply to this)(Parent)(Thread)


[info]_darkus_
2006-10-26 11:58 am UTC (link)
Я сообщу об этом дополнительно, когда придёт время...

(Reply to this)(Parent)

"Малый позитивный суперкомпилятор на языке Scala"
saromanenko
2008-03-14 07:19 pm UTC (link)
А вот, в этом месте выставлен на глумление и поругание публикой самый настоящий "суперкомпилятор":

A Small Positive Supercompiler in Scala
http://code.google.com/p/spsc/
http://groups.google.com/group/a-small-positive-supercompiler-in-scala

Зверёк хоть и маленький, но за палец кусать всё же умеет по-настоящему (если этот палец - тоже маленький)...

(Reply to this)


Create an Account
Forgot your login?
Login w/ OpenID
English • Español • Deutsch • Русский…