2017-10-17 135 views
-1

我想实现一个函数,我有两个列表,第一个是任何类型,第二个是布尔,我希望它只返回第一个列表,如果它是等于true。例如:比较两个列表与模式匹配在Haskell

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 _ _ = [] 

我想我喜欢的类型是错的,但我对如何处理这个完全难住了。任何帮助,指导或链接都是正确的方向将会有所帮助。

+0

您需要测试'y'是否为true:如果是,则返回'x',后跟递归调用给出的列表;否则,你只需返回递归调用给出的列表。 – chi

+0

'pickIt x y = [a | (a,b)< - zip x y,b] :: [a] - > [Bool] - > [a]' – BlackCap

回答

2

你的类型错了,你说你有一个bools列表(英文),那么你的类型说你有一个布尔。使用[Bool]而不是Bool

你说(举例)你想要第一个列表中的元素列表,所以[a],作为结果。然后你的代码返回(a,Bool)的元组(即查看你的(x,y)的值)。相反,测试y是否为真,并且只有在x通过x: