2017-12-13 16 views
1

私はこの単純なデータツリーがあります。ハスケル - 木の種類の折り機能を作成

data Tree = Leaf Int | Node [Tree] 

をそして私はこのタイプの折り機能をdevellopする必要があります。例えば

foldTree :: (Int -> a) -> ([a] -> a) -> Tree -> a 

foldTree (+1) sum (Node[ (Leaf 2), (Leaf 3)]) 

は(2 + 1)+(3 + 1)= 7を返します。 リーフの場合:

foldTree f g (Leaf n) = (f n) 

しかし、私はノードのケースを開発するためのアイデアはありません。

私はフランス人でもあり、間違いの申し訳ありません。

+0

ヒント: ''ツリー 'のリストから' a'のリストをどのように取得しますか? –

答えて

2

スコープとそのタイプで使用できるものを調べるのに役立つことがあります。これは解決策です:

foldTree f g (Leaf n) = (f n) 
foldTree f g (Node subtrees) = 
    let as = map (foldTree f g) subtrees -- as :: [a] 
    in g as 
関連する問題