簡體   English   中英

獲取 Haskell 中玫瑰樹的所有路徑

[英]Get all paths in a rose tree in Haskell

我有以下玫瑰樹的實現:

data Rose a = Empty | Branch a [Rose a] deriving (Show, Eq)

所以我想得到樹中的所有路徑,到目前為止我所做的如下:

paths :: Rose a -> [[a]]
paths Empty = [[]]
paths (Branch n []) = [[n]]
paths (Branch n ns) = map ((:) n . concat . paths) ns

這是我的樹

sample2:: Rose String
sample2 = Branch "/" [Branch "dir1" [Branch "file1" [Empty], Branch "dir3" [Empty]], Branch "dir2" [Branch "file2" [Empty], Branch "file3" [Empty]]]

路徑 sample2 的 output 如下: [["/","dir1","file1","dir1","dir3"],["/","dir2","file2","dir2","file3"]]

但我希望它是:

[["/","dir1","file1"],["/", "dir1","dir3"],["/","dir2","file2"],["/", "dir2","file3"]]

如何達到這個結果?

您應該連接最終產品,而不是單個孩子的paths ,因此:

paths :: Rose a -> [[a]]
paths Empty = [[]]
paths (Branch n []) = [[n]]
paths (Branch n ns) = concatMap (map (n :) . paths) ns
paths :: Rose a -> [[a]] paths Empty = [[]] paths (Branch n ns) = map (n :) (concat $ map paths ns)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM