3

ルートから最下位の子まで、すべてのレベルを 1 ~ 10 回展開するツリーを使用して、すべてのパスを要約しようとしています。私の関数はすべての子に再帰的に歩きますが、ノードのリストを作成してリストでこのリストを実行しようとすると、リストのリストのリスト...リストのリストになるという問題があります。私の問題は結合ステップだと思いますそして、パターンマッチング方法を作成しようとしましたが、リストのリストになったときにリストを比較し、新しいリストを作成して、それが一方向だけの場合はそれらを比較する方法(リストを満たすリストを含むリストではなく、ノードを含む)は機能しません。

4

2 に答える 2

1

ツリーは list-monadic-list (各ポイントでどのように再開するかについていくつかのオプションがあるリスト) として表すことができます。次に、必要なのは、このモナド リストの折り畳みです。

import Control.Monad.Trans.List.Funcs (repeatM) -- cabal install List
import qualified Data.List.Class as L

exampleTree = L.take 3 (repeatM [0, 1])

すべてのパスを表示するには:

ghci> L.toList exampleTree 
[[0,0,0],[0,0,1],[0,1,0],[0,1,1],[1,0,0],[1,0,1],[1,1,0],[1,1,1]]

すべてのパスを合計するには:

ghci> L.foldlL (+) 0 exampleTree 
[0,1,1,2,1,2,2,3]

このツリーの表現に関して、ListTreeパッケージは、s として表されるツリーに対するツリー操作 (DFS/BFS 反復など) のコンビネータを提供しますListT []

于 2013-07-07T20:33:34.570 に答える