Один из немногих занятных предметов, которые давались мне в университете, оказался весьма небезынтересный язык программирования - Haskell.
Говорят, что он похож чем-то на такие языки, как Lisp, Prolog, Refal, Scheme... Не знаю, как насчёт других, но он и вправду напоминает Prolog и Refal, которые я тоже немного знаю. Напоминает тем, что совершенно не похож на традиционные императивные языки (те, в которых мы действуем, давая компьютеру какие-то инструкции): Java, C++, Pascal и другие.
Как, возможно, самый показательный пример функционального языка, Haskell оперирует функциями: всё его конструкции - это функции. Указаний компьютеру нет, есть только вычисление одних функций через другие.
Кроме того, Haskell использует так называемые ленивые вычисления, при которых он вычисляет значение чего-либо только тогда, когда это значение реально понадобится. Это бывает полезно в ряде ситуаций.
Haskell показался мне несколько запутанным языком (как Prolog и Refal) и сложным для обучения, но при этом весьма показательно мощным в некоторых ситуациях. Вот, к примеру, быстрая сортировка массива (quicksort) на языке Haskell:
quicksort :: Ord a => [a] -> [a]
quicksort [] = []
quicksort (x:xs) = quicksort [y | y <- xs, y <= x] ++
[x] ++ quicksort [y | y <- xs, y > x]
И это всё! Впечатляет, не правда ли? При подготовке к зачёту я решал ряд учебных задач и все они могут быть решены очень элегатным способом.
Моё мнение таково. Хотя Haskell использовался какой-то компанией (Ericsson, что ли?) для разработки крупной системы и хотя имеется даже разрабатываемый фанатами 3D-шутер на Haskell'е, - я бы не стал писать что-либо на этом языке: он мне не кажется достаточно понятным, хотя и весьма лаконичен.
А вот в познавательных целях посмотреть на Haskell очень даже можно. У него есть немало инструментов для поразительно элегантных решений некоторых классических задач. Так что рекомендую, если нечем заняться ;)
Некоторые ссылки о Haskell: