【问题标题】:How to do pattern matching with tuple in Haskell?如何在 Haskell 中使用元组进行模式匹配?
【发布时间】:2012-10-01 10:40:02
【问题描述】:

我在尝试使用元组进行类型匹配时遇到问题。

filterSth :: [a]->[b]->([a],[b])
filterSth _ [] = (_, [])

这意味着当第二个参数是一个空列表时,我不关心我希望返回的元组的第一个元素。 我该如何实现呢?

【问题讨论】:

  • 这个问题不清楚你真正想要做什么以及为什么要这样做。也许有更好、更实用的方法来做你想做的事。因此,将上下文添加到问题中。

标签: haskell pattern-matching tuples


【解决方案1】:

如果您不关心元组的第一个元素并且确定不会使用它,则可以返回undefined,即

filterSth _ [] = (undefined, [])

请记住,尝试评估 undefined 将导致运行时异常。

另一个想法可能是返回Either ([a], [b]) [b]

filterSth :: [a] -> [b] -> Either ([a], [b]) [b]
filterSth _ [] = Right []
-- and a case for a non-empty second argument

如果你想原封不动地返回第一个参数,你不能使用__ 表示您不在乎参数的值是什么,并且您不会使用它。既然你打算使用它,你必须用命名参数替换_并显式返回它

filterSth a [] = (a, [])

【讨论】:

  • er...如果我只是希望它与我发送的内容保持一致怎么办?
【解决方案2】:

如果您不关心作为元组的第一个组件返回的内容,我建议您返回一个错误,如果您不小心使用它会爆炸。

filterSth _ [] = (error "Don't use this", [])

【讨论】:

  • 是啊……看来就算我不在乎,也有人在乎~~我会尽量避免这样的事情~谢谢你的评论~
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
相关资源
最近更新 更多