在Haskell中比较两个带有模式匹配的列表

时间:2017-10-17 16:55:43

标签: list haskell pattern-matching

我正在尝试实现一个函数,其中我有两个列表,第一个是任何类型,第二个是布尔值,我希望它只返回第一个列表,如果它等于true。例如:

pickIt [1, 2, 3] [True, False, True]  returns [1, 3]

这是我的代码:

pickIt :: [a] -> Bool -> [a]
pickIt (x:xs) (y:ys) = (x, y) : pickIt xs ys
pickIt _ _ = []

我认为我的类型错了,但我完全不知道如何解决这个问题。任何帮助,指导或指向正确方向的链接都会有所帮助。

1 个答案:

答案 0 :(得分:2)

你的类型错了,你说你有一个bools列表(英文)然后你的类型说你有一个Bool。使用[Bool]代替Bool

你说(例如)你想要第一个列表中的元素列表,结果是[a]。然后您的代码返回(a,Bool)的元组(即查看您的(x,y)值)。取而代之的是测试y是否为真,并且只有在x通过x:时才有效。