簡體   English   中英

在 haskell 中轉換 [[a]] -> 集合 (Set a)

[英]Converting [[a]] -> Set (Set a) in haskell

我正在嘗試將列表列表轉換為 haskell 中的一組集合。

setOfSet :: [[a]] -> Set (Set a)

我已經這樣定義了我的集合

data Set a = Leaf | Node (Set a) a (Set a)

所以本質上我的集合(集合 a)將是一棵二叉樹,其中每個節點都是二叉樹(即集合)。 我的清單已經訂購,所以我可以這樣做:

SetOfSet x:xs = Node Leaf (fromList x) (setOfSet xs)

但我現在想知道是否有更有效的方法

再看看你的類型: [a] -> Set a . 如果你有a s 的列表,你可以獲得a s 的集合。

所以考慮如果你把這個 function 給map會發生什么:

map orderedFromList :: [[a]] -> [Set a]

然后如果將orderedFromList應用於集合列表會發生什么:

orderedFromList . map orderedFromList :: [[a]] -> Set (Set a)

所以

setOfSets :: [[a]] -> Set (Set a)
setOfSets = orderedFromList . map orderedFromList

假設orderedFromList做出任何努力來構建平衡樹,這會給您帶來比 function 更好的結果,后者本質上只是構建集合的鏈接列表。

暫無
暫無

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

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