Здравствуйте, Трурль, Вы писали:
Т>Все эти ката- ана- и пара- легко получаются из хило-. Последний можно рассматривать как общий шаблон итеративного вычисления.
Твоя правда, спасибо, сам не увидел. Были сомнения насчёт параморфизма. Проверил — всё очень легко ложится:
hylo p f g c a | p a = c
| True = f b (hylo p f g c a')
where
(b, a') = g a
-- ката и ана легко:
ana p g = hylo p (:) g []
cata f = hylo null f (\(x:xs) -> (x,xs))
-- класс типов для параморфизма
class Para p a | p -> a where
isStart :: p -> Bool
decompose :: p -> (a, p)
-- например, для списка
instance Para [a] a where
isStart = null
decompose (x:xs) = (x,xs)
-- обычное определение параморфизма
para f b x
| isStart x = b
| otherwise = f m (para f b n)
where
(m,n) = decompose x
-- а вот он же через хиломорфизм
para' f = hylo isStart f decompose
Можно без fundeps обойтись:
class Para p where
isStart :: p a -> Bool
decompose :: p a -> (a,p a)
instance Para [] where
isStart = null
decompose (x:xs) = (x,xs)
Здравствуйте, palm mute, Вы писали:
PM>Хаскелл — плохой язык для начала изучения ФП именно потому, что в нем куча сахара.
Хм. А какой тогда хороший и без сахара ?
... << RSDN@Home 1.2.0 alpha rev. 676>>
Здравствуйте, Mirrorer, Вы писали:
M>Здравствуйте, palm mute, Вы писали:
PM>>Хаскелл — плохой язык для начала изучения ФП именно потому, что в нем куча сахара.
M>Хм. А какой тогда хороший и без сахара ?
Чистая лямбда.
Или
Unlambda.
Здравствуйте, Mirrorer, Вы писали:
M>Хм. А какой тогда хороший и без сахара ?
Схема.
Здравствуйте, palm mute, Вы писали:
PM>Здравствуйте, Mirrorer, Вы писали:
M>>Хм. А какой тогда хороший и без сахара ?
PM>Схема.
Я кстати, последовал совету и сейчас читаю SICP, но задания делаю на 2х языках. Чтоб и принцип за "сладостью" не потерялся, и сахар потихоньку запоминался.