4

我想转换这个元组列表:

[(1,'a'),(2,'b') ... ]

变成一个可以写成这样的函数:

g :: Int -> Char
g 1 = 'a'
g 2 = 'b'
 .
 .
 .

用例:

g 1  -- | 'a'
4

1 回答 1

13

这种函数的签名是[(a, b)] -> a -> b. 听上去是很常见的操作,所以让我们在 Hoogle 上搜索一下,看看它是否已经存在。哦,它几乎做到了,它被称为lookup

lookup :: Eq a => a -> [(a, b)] -> Maybe b

lookup key assocs在关联列表中查找键。

我们需要做的是翻转前两个参数(使用flip)并剥离Maybe结果(组合使用fromJust)。结果:

g :: Int -> Char
g = fromJust . flip lookup [(1,'a'),(2,'b'),(3,'c')]
于 2013-05-27T00:09:43.940 回答