3

私はツリーデータ型を持っています:

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
4

1 に答える 1