2017-10-17 133 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: