1

在此期间,我正在学习 Haskell,但我在解决一个简单的练习时遇到了问题。

我想写一个简单的关联地图数据结构来锻炼自己。

这是我到目前为止写的代码:

-- It represents a simple ordered couple in the form (key, value)
data Element a b = Element (a, b)
    deriving (Show)

-- It represents a (unordered) list of elements in the form (key, value)
data Dictionary a b = Dictionary [Element a b]
    deriving (Show)

-- It represents a simple dictionary which will be used for my tests
t :: Dictionary Char Int
t = Dictionary [Element ('a', 1), Element ('b', 2), Element ('a', 3)]

现在我正在尝试编写一个简单的方法以 (a, b) 的形式返回情侣列表。我这样做是为了锻炼自己并提供一个对其他方法(查找等)有用的简单功能。

我已经写了这段代码,但我知道这是错误的:

couples :: Dictionary a b -> [(a, b)]
couples (Dictionary t) = [(k , v) | (k, v) <- t]

问题是显然“t”不是一对列表:它是由一个元素列表组成的,这些元素由类型构造函数“Element”和一个有序的一对组成。

我怎样才能“摆脱”“元素”类型的构造函数?我不知道...

先感谢您。

4

1 回答 1

4

只需在模式匹配中添加 Element 构造函数。

couples :: Dictionary a b -> [(a, b)]
couples (Dictionary t) = [(k , v) | (Element (k, v)) <- t]
于 2012-12-05T18:25:40.820 回答