Concurrent Clean : [quiz] リスト要素の正規化(2)
http://karetta.jp/article/blog/oneline/008668
それはそうと、これはやはり継続を使って解く方がいいと思うのですよね(schemeなので)。
maxInt =: 0x7fffffff ::Tree a = Node a [Tree a] norm t = let ([[t2:_]:_],_) = norm_t t end maxInt in t2 where end n = ([[],[]],n) norm_t (Node i ts) cont n = let ([ts2,ts3:tss4],m) = norm_ts ts cont (min i n) in ([[Node (i/m) ts2:ts3]:tss4],m) norm_ts [] cont n = let (ts2,m) = cont n in ([[]:ts2],m) norm_ts [t:ts] cont n = norm_t t (norm_ts ts cont) n t :: Tree Int t = Node 9 [Node 15 [], Node 12 [Node 3 [], Node 15 []], Node 27 [Node 6 [Node 18 [], Node 15 []]]] Start = norm t
-
-
- -
-
ところで、解答例が出ていたのですが、
http://karetta.jp/article/blog/oneline/008676
2回たどっているような気がするのですが、それでいいんでしょうか?