2012-04-17 17 views
3

と、リスト内のタプルの要素を探す:Xは任意の値を指定できます(1,1、X、X)のような匿名の要素、と私は、このリスト内で検索したい匿名の値

test = [ (1,1,1,0) , (1,1,1,1) , (1,3,1,0) , (1,4,2,0) , (1,5,2,0) , (1,6,2,0) , 
     (3,1,3,5) , (3,2,3,4) , (3,3,3,3) , (3,4,4,1) , (3,5,4,2) , (3,6,4,6) , 
     (2,1,1,2) , (2,2,1,5) , (2,3,1,0) , (2,4,2,4) , (2,5,2,1) , (2,6,2,0) , 
     (4,1,3,0) , (4,2,3,0) , (4,3,3,0) , (4,4,4,0) , (4,5,4,0) , (4,6,4,0) , 
     (5,1,5,1) , (5,2,5,6) , (5,3,5,0) , (5,4,6,2) , (5,5,6,3) , (5,6,6,0) , 
     (6,1,5,3) , (6,2,5,2) , (6,3,5,4) , (6,4,6,5) , (6,5,6,6) , (6,6,6,1) ] 

タプル、 :一致する(プロローグに「_」のような)匿名の変数のいずれかの種類がある

*> find (==(1,1,X,X)) test 
(1,1,1,0) 
(1,1,1,1) 

実際の質問は、:

*> find (==(1,1,1,0)) test 
Just (1,1,1,0) 

私が行うことができるようにしたいですy値?

答えて

5

filterとパターンマッチングを使用してください。

Prelude> :t filter 
filter :: (a -> Bool) -> [a] -> [a] 

のものと一致した機能を取ります

filter (\x -> case x of (1,1,_,_) -> True; _ -> False) ... 
+0

パーフェクト!ありがとう! –

5

あなたはリストの内包表記を使用することができます。

[x | [email protected](1,1,_,_) <- test] 

あなたが<-の左側に失敗することがありますパターンを持っている場合、パターンに一致しない値が除外されているので、これは動作します。

関連する問題