Haskell中嵌套列表的模式匹配

时间:2011-01-29 21:40:14

标签: haskell

我想使用嵌套列表2来表示矩阵(例如[[1,2,3],[4,5,6]])。我如何定义处理小子矩阵(比如2 * 2)的函数?我期待这样的事情: f (a1:a2:a) : (b1:b2:b) : x = ... 其中a1,a2是第一行的两个连续元素,b1,b2是第二行。 a,b是相应的第一和第二行的休止符。 x是矩阵行的其余部分。

但这显然不起作用。

提前致谢!

2 个答案:

答案 0 :(得分:16)

  

我期待这样的事情:f (a1:a2:a) : (b1:b2:b) : x = ...

你有正确的想法。所有你缺少的是一对括号:

f ((a1:a2:a) : (b1:b2:b) : x) = ...

答案 1 :(得分:1)

不要忘记你可以使用一点where语法

f xs = ...
    where (a1:a2:a) = head xs
          (b1:b2:b) = head (tail xs)
          x         = tail (tail xs)

然而,值得注意的是,如果模式不匹配,模式匹配将为您提供下降到函数的下一个定义的好处。这个where版本需要更多的警卫和东西。