Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование с нуля - это совсем просто! 162) Функциональное программирование: Лисп


Школа программирования

162) Функциональное программирование: Лисп

Что-то наша рассылка стала немного суховатой, надо в нее добавить новые направления. Одним из них будет раздел по функциональному программированию.

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

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

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

Поэтому полвека назад было придумано немало специализированных функциональных языков, и одним из наиболее замечательных оказался Лисп (LISP - LISt Processing, вычисления над списками). Он был предложен мистером Мак-Карти в 1960 году. Этот язык, а также множество его диалектов, остаются востребованными и сегодня, особенно разработчиками интеллектуальных систем, специалистами по моделированию мышления, познавательных способностей итд. Его версия, в частности, реализована в системе проектирования AutoCAD в качестве внутреннего языка.

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

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

Систем программирования на Лиспе множество. Мы будем изучать одну из самых лучших и регулярно развивающихся. Называется эта реализация NewLisp и бесплатно доступна на сайте http://newlisp.org . Дистрибутив небольшой, два мегабайта, включает все, что надо, включая средства создания графических программ и даже интерпретатор еще одного языка - Tcl/Tk, который обычно используется для построения пользовательских интерфейсов. Так что попутно немного поизучаем и его :)

Задание: к следующему занятию скачать и установить NewLisp, запустить и попробовать выполнить входящие в поставку примеры. Там есть такая, Ханойская башня - рекурсивное решение, и другие. Только не вздумайте запустить Ханойскую башню с 64 дисками!


(c) 2004-2007 Сергей Бобровский : bo собака russianenterprisesolutions.com

Школа программирования с нуля
Все предыдущие выпуски базового курса всегда тут:
http://www.infiltration.ru/p/

Неофициальный сайт поддержки (со срочными вопросами - сюда):
www.prog-begin.net.ru.


Мои книги (учебные курсы) "Технологии Delphi / C++ / C#. Разработка приложений для бизнеса".
http://shop.piter.com/display.phtml?a_id=17681&web_ok=all

Все эти учебные курсы рассчитаны не только на разработчиков, но и на всех тех, кто хочет стать ИТ-менеджером. Для этого как минимум нужно иметь общее представление о современных технологиях разработки и их истории и владеть соответствующей терминологией.
В книгах описаны десятки технологий, каждой из которых посвящены отдельные книги. Таким образом, купив один учебный курс, вы существенно сэкономите :) В книгах полностью описаны:
- Delphi (версия 2006, полностью совместимая с Turbo Delphi) для обеих платформ - Win32 и .NET;
- C# (новый язык Microsoft, на котором базируется платформа .NET и все новые версии Windows);
- C++ для платформы Win32.
Охвачены также темы работы с файлами на этих платформах, создания файл-серверных, клиент-серверных, распределенных приложений, веб-программ (Indy, ASP.NET, веб-сервисы). Описаны языки SQL и OCL. Немало глав посвящены истории программирования и различных технологий. Особое внимание уделено созданию программ с помощью технологии ECO и языка моделирования UML - программы фактически рисуются, и теперь даже для создания корпоративных приложений и их переноса в Интернет не обязательно знать программирование!
Отдельная часть отведена технологиям организации групповой работы, управления требованиями, контроля версий, локализации и тестирования.
Тут подробнее про книги.

Мои книги, которые пока доступны в продаже:


Дизайн рассылки: Алексей Голубев - Web-дизайн и web-программирование


В избранное