如何将哈希映射传输到haskell中的列表

时间:2016-05-19 05:20:16

标签: haskell

我对哈斯克尔很新。我想以递归方式访问Hashmap的所有值并将它们存储在List中。

我的Hashmap看起来像:

data Hashmap k v = Leaf | Node (Hashmap k v) (k, v) (Hashmap k v) deriving (Show)

我尝试过的功能签名是:

createList :: Hashmap k v -> [(k,v)]

我的测试结果"散列映射:

Node (Node Leaf (1,34) Leaf) (2,65) (Node Leaf (3,21) Leaf)

将是:

[(1,34),(2,65),(3,21)]

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:3)

IMO,haskell中的函数是带有动作的模式列表。正如您所看到createList类型为Hashmap k v -> [(k,v)],请检查Hashmap的定义,它有两个值构造函数,因此有两种模式,您只需要处理它们。< / p>

createList :: Hashmap k v -> [(k, v)]
createList Leaf = []
createList (Node l c r) = createList l ++ [c] ++ createList r

由于++效率低下,我们也可以使用利弊:加速。

list :: Hashmap k v -> [(k, v)]
list h = _list h []
  where
    _list Leaf xs = xs
    _list (Node l c r) xs = c : (_list l $ _list r xs)