24 марта 2008

Снова CLEAN

Языка CLEAN оказался удивительно прост в изучении, и я, впервые, почувствовал тягу к функциональному программированию. В архиве, который можно скачать на официальном сайте, содержится IDE, не требующая дополнительной настройки. Достаточно ее распаковать и можно начинать программировать. Для компиляции требуется создать проект, но это не более чем формальность, т.к. это не приводит к автоматической генерации разветвленной иерархии каталогов. Кроме того, на сайте присутствует прекрасное руководство для начинающих, написанное, правда, на английском языке.
Далее приведу несколько примеров программ. Как в любом функциональном языке, основной объект в CLEAN — функция. Ветвление организовывается при помощи guard-ов:

Max x y | x > y = x
= y


Этот код позваляет получить наибольшее из двух чисел (для простоты, случай равенства не рассмотрен). Описание Max x y приводит к созданию функции с двумя аргументами,
| x > y описывает альтернативу, а далее идет значение по умолчанию.

isum:: Int -> Int
isum 0 = 0
isum x = x - d * 10 + isum (d)
where d = x / 10


Эта функция вычислет сумму цифр числа. Т.к. CLEAN — сильнотипизированный язык, в первой строке указывается тип аргументов и результата. Если тип не указан явно, используется автоматический вывод типа. Циклы, как и во всех остальных фунциональных языках, организуются при помощи рекурсии. В данном примере мне особенно понравилась фраза where, совсем как в математике.

MaxOfList [x] = x
MaxOfList [x:y] | v > x = v
= x
where v = MaxOfList y


Еще один пример с использованием рекурсии. В данном случае используется механизм обработки списков. [x:y] разделяет голову (один элемент) и хвост (остальные элементы) списка.

Комментариев нет: