具有通配符的元组列表的元素的查找索引

问题描述 投票:0回答:1

我正在尝试使用通配符在Haskell中查找元组列表中元素的索引。

我已经调整了我的类型以使其更容易解释。目前,我的思维方式是使用elemIndex。

例如

> elemIndex 2 [1,2,3,4,5]
Just 1

但就我而言,我有一个这样的元组列表:

> elemIndex (2, 20) [(1, 10),(2, 20),(3, 30),(4, 40),(5,50)]
Just 1

我希望只能提供元组的第一部分并获取索引,例如:

> elemIndex (2, _) [(1, 10),(2, 20),(3, 30),(4, 40),(5,50)]
Just 1

但是我得到的结果是:

<interactive>:58:15: error:
    • Found hole: _ :: Integer
    • In the expression: _
      In the first argument of ‘elemIndex’, namely ‘(2, _)’
      In the expression:
        elemIndex (2, _) [(1, 10), (2, 20), (3, 30), (4, 40), ....]
    • Relevant bindings include
        it :: Maybe Int (bound at <interactive>:58:1)

我在破译错误消息时遇到了麻烦,也无法弄清楚如何解决该错误。任何帮助将不胜感激,谢谢!

list haskell indexing tuples element
1个回答
4
投票

_不是通配符,它​​是typed hole [haskell-wiki]。打孔通常用于找出要填充的类型。

您可以在这里使用findIndex :: (a -> Bool) -> [a] -> Maybe Int。在这里,无需指定要搜索的元素,可以使用谓词(findIndex :: (a -> Bool) -> [a] -> Maybe Int),然后该函数将为给定列表返回满足该谓词的第一个索引(包装在a -> Bool数据构造函数中),或者Just如果找不到元素。

因此,您可以将其实现为:

Nothing
© www.soinside.com 2019 - 2024. All rights reserved.