【问题标题】:Find tuple element in a list with anonymous values在具有匿名值的列表中查找元组元素
【发布时间】:2012-04-17 18:52:20
【问题描述】:

我想在这个列表中找到:

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)

实际的问题是,是否有任何类型的匿名变量(如序言中的“_”)来匹配任何值?

【问题讨论】:

    标签: variables haskell anonymous


    【解决方案1】:

    使用filter 和模式匹配。

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

    获取一个匹配事物的函数:

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

    【讨论】:

      【解决方案2】:

      您可以使用列表推导式。

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

      这是因为当您在&lt;- 的左侧有一个可能失败的模式时,与该模式不匹配的值将被过滤掉。

      【讨论】:

        猜你喜欢
        • 2011-01-12
        • 1970-01-01
        • 2016-07-18
        • 2016-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-21
        相关资源
        最近更新 更多