我想使用嵌套列表嵌套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中嵌套列表的模式匹配
但這顯然不起作用。
在此先感謝!
我想使用嵌套列表嵌套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中嵌套列表的模式匹配
但這顯然不起作用。
在此先感謝!
我希望這樣的事情:
f (a1:a2:a) : (b1:b2:b) : x = ...
你有正確的想法。所有你缺少的是一對括號:
f ((a1:a2:a) : (b1:b2:b) : x) = ...
不要忘記你可以使用where
語法有點
f xs = ...
where (a1:a2:a) = head xs
(b1:b2:b) = head (tail xs)
x = tail (tail xs)
值得一提的,但是,模式匹配給你如果模式不匹配,則可以下降到函數的下一個定義。這將需要更多的警衛和東西,使這個where
版本做到這一點。
它以什麼方式不起作用?我們需要更多的細節來幫助。 – 2011-01-29 21:43:38