Variables 在具有匿名值的列表中查找元组元素
我想在此列表中找到:Variables 在具有匿名值的列表中查找元组元素,variables,haskell,anonymous,Variables,Haskell,Anonymous,我想在此列表中找到: 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
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) ]
包含匿名元素的元组,如(1,1,X,X),其中X可以是任何值:
*> find (==(1,1,1,0)) test
Just (1,1,1,0)
我希望能够做到:
*> find (==(1,1,X,X)) test
(1,1,1,0)
(1,1,1,1)
实际的问题是,是否存在任何类型的匿名变量(如prolog中的“u”)来匹配任何值?使用
filter
和模式匹配
Prelude> :t filter
filter :: (a -> Bool) -> [a] -> [a]
采用与以下内容匹配的函数:
filter (\x -> case x of (1,1,_,_) -> True; _ -> False) ...
您可以使用列表理解
[x | x@(1,1,_,_) <- test]
[x|x@(1,1,1)