воскресенье, 30 мая 2010 г.

Требуется: отключать декорации окон при развёртывании окна приложения на весь экран.
Что имеется: gnome (декоратор - metacity) + compiz
Решение: запустить ccsm -> войти в пункт "Декорации окон" (Window Decorations) -> в поле ввода "Декорирование окон" (Decoration Windows) вбить вместо any вот это:
!state=maxvert

пятница, 21 мая 2010 г.

Математика и функциональное программирование

Теория категорий. Именно об этом часто упоминают те, кто в теме о haskell. Мол многое оттуда.
Поэтому решил разобраться, вникнуть. Возможно, вспомнить школу: ибо в вузе не математикой занимался.
Серьёзную литературу не брал - ограничился википедией.

Первый вопрос, который возник, - что такое категория.
Выяснилось: категория есть класс объектов, для которого задано множество морфизмов.
Ну, что такое множество - вроде понимаю. Неясными остаются понятия класс, объект, морфизм.
Начну с объекта. Здесь и далее буду проводить аналогии с программированием.

Объект - это область значений (то есть, объект предметной области). Пример: объект натуральных чисел, объект булевых состояний. Область значений - это ни что иное как тип (из мира программирования). Область значений часто ограничена некоторыми рамками. Для бинарной области: 1 и 0 (true или false). Тип - Bool, значения (или экземпляры) - {true, false}.

Далее - морфизм. Морфизм есть функция. То есть, это отображение f одного пространства (области значений) на другое:
f: A -> B.
Если a in A, b in B, то справедливо f(a) = b.

Класс - множество объектов, обладающих определённым свойством (например, они эквивалентны между собой). По сути класс математики очень похож на тип в программировании. То есть, в haskell, например, можно ввести собственный параметризованный тип:
data Animal sex  = Cat  sex | Dog sex
data Sex = Male | Female
В общем получается такая картина аналогий (теория категорий -> haskell):

Объект -> тип: 1 | True | Male
Морфизм -> функция: add :: Int -> Int -> Int, add x y = x + y
Класс -> параметризованный тип: data Color a = Red | Green | Blue | RGB a a a

Осталась категория. Если собрать всё вышеизложенное воедино и упростить, то получается, что категория представляет собой тип (или параметризованный тип), для которого задано множество функций. И это понятие соответствует классу (class) языка haskell:
class C a where
   f1 :: a Int -> Int
   f2 :: a -> Bool
   f3 :: a -> C a
Который (этот класс) является интерфейсом, представляющим ограниченное число функций, действующих в рамках заданных типов. Получается, что объект подчиняется морфизмам из числа тех, что определены заданным классом. Здесь a является именем типа, вакантным местом для пользовательского типа, определяемым уже на этапе реализации класса:


instance C Int where
   f1 a b = a `mod` b
   f2 i = i > 2
Так, определены уникальные функции f1 и f2 для типа Int. Для других типов функции могут быть реализованы иначе. В целом, классы в haskell - для определения поведения функций в зависимости от типов входных параметров. Это - если совсем просто.