匹配Haskell中的任何列表

时间:2013-02-28 14:13:19

标签: haskell

有没有办法在没有迭代这两种情况的情况下对任何列表进行模式匹配:空列表还是非空列表?

我想修复以下代码:

foo [] = "something else"
foo [_:_] = "something else"

由于something else中的部分是相同的,我想将其从一个地方删除。

谢谢。

1 个答案:

答案 0 :(得分:8)

模式_匹配任何内容而不将其绑定到名称。一个名字,比如说,xs也匹配任何东西。所以你可以这样做:

foo _ = "something else" 要么 foo xs = "something else"

如果“其他东西”真的不依赖于xs的值,那么第一种形式是首选的,这样另一位程序员(和你)就能很快发现这个特定方程中的值是无关的。

不幸的是,您的第一个案例已经是第二种情况,因此它符合所有的可能性。其他案件永远不会到达。