2017-10-17 17 views
-1

2つのリストを持つ関数を実装しようとしています。最初の型はすべての型で、2番目はブール型で、最初のリスト真と等しい。例:ここではHaskellでパターンマッチングを行う2つのリストを比較します。

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'が真であるかどうかをテストする必要があります。そうであれば' x'を返し、その後に再帰呼び出しによって与えられたリストを返します。それ以外の場合は、再帰呼び出しによって与えられたリストを返します。 – chi

+0

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

答えて

2

あなたのタイプは間違っています、あなたはboolのリストを持っていると言っています。 Boolの代わりに[Bool]を使用してください。

あなたは結果として、最初のリストの要素のリストを希望するとします([a])。次にコードで(a,Bool)のタプルが返されます((x,y)の値を参照)。代わりにyが真であるかどうかをテストし、その場合にのみxからx:を引っ掛けてテストします。

関連する問題