Date: 2006-07-05 03:10 pm (UTC)
Ну, тип функции, в виде дерева.

А пример... Ну, вот сегодня. Сочинял комбинатор threadS startstate transformer inputs.

Протягиватель threadS получает трансформер входного состояния и значения из inputs в выходное плюс некоторый выход, стартовое состояние, входы и должен выдать наружу выходные результаты трансформера. Ну, и состояние протягивается через всю бесконечныю цепочку.

Первый вариант:
threadS startstate transformer inputs = ...
    where
        f i s = runSSt (transformer i) s
Это как раз то протягивание состояния.

У нас есть комбинатор zipS :: S a -> S b -> S (a,b) и mapS :: (a -> b) -> S a -> S b.

Мы можем собрать входы и входные состояния вместе через zipS и применить к ним mapS f, только f надо немного поменять:
threadS startstate transformer inputs = ...
    where
        inputsstates = zipS inputs states
        outsstates = mapS f inputsstates -- :: S (o,s)
        f (i,s) = runSSt (transformer i) s
Выходные состояния получить просто, также, как и выходы:
threadS startstate transformer inputs = outs
    where
        inputsstates = zipS inputs states
        outsstates = mapS f inputsstates   -- :: S (o,s)
        states' = mapS snd outsstates      -- :: S s
        states = delayS startstate states' -- :: S s
        outs = mapS fst outsstates         -- :: S o
        f (i,s) = runSSt (transformer i) s
Типы данных использовались постольку-поскольку - что-то надо сгруппировать, чтобы можно было применить mapS, из чего-то, наоборот, выдрать составную часть...

Вот как-то так я и пишу. ;)
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

lomeo: (Default)
Dmitry Antonyuk

April 2024

S M T W T F S
 123456
7891011 1213
14151617181920
21222324252627
282930    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 9th, 2025 10:33 pm
Powered by Dreamwidth Studios