2011-01-29 45 views
9

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

但这显然不起作用。

在此先感谢!

+0

它以什么方式不起作用?我们需要更多的细节来帮助。 – 2011-01-29 21:43:38

回答

16

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

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

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

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

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

值得一提的,但是,模式匹配给你如果模式不匹配,则可以下降到函数的下一个定义。这将需要更多的警卫和东西,使这个where版本做到这一点。