私はツリーデータ型を持っています:
data Tree a = Node
{ rootLabel :: a, -- label value
subForest :: [Tree a] -- zero or more child trees
}
{-- Node (a) [] ..or... Node (a1) [ Node (a2) [..], Node (a3) [..] ] --}
そして、treeFold 関数を記述する必要があります。ラベル値で何かを作成する最初の関数と、func1 の 2 つの結果を取得して最終結果を作成する 2 番目の関数が必要だと思います。再帰関数treeFoldの作成を開始し、子ツリーが0の最小ツリーの関数を作成しましたが、子ツリーのリストが空ではないため、関数を終了できません。
最初の子と残りの子のリストを取得し、そこから新しいツリーを作成して、この新しいツリーを再帰呼び出しに使用する必要がありますか?
treeFold :: (a -> b) -> (b -> b -> b) -> Tree a -> b
treeFold func1 _ (Node a1 []) = func1 a1
treeFold func1 func2 (Node a1 [y]) = func2 (func1 a1) (treeFold func1 func2 y)
treeFold func1 func2 (Node a1 [y1,y2]) = func2 (func1 a1) (treeFold func1 func2 (y1