無法弄清楚爲什麼模式匹配不起作用!我從Hasklell開始,所以要耐心等待!爲什麼我會得到「例外:Prelude.head:空列表」?
-- matrix implemented as a list of lists (rows of the matrix)
test_matrix3 = [[1,0,0],[2,-3,0],[4,5,6]]
-- transpose of a given matrix
transpose (x:[]) = [x]
transpose [email protected](x:_) = map head all : transpose ([tail y | y <- all])
執行:
*Main> transpose test_matrix3
[[1,2,4],[0,-3,5],[0,0,6],[*** Exception: Prelude.head: empty list
當然我知道了。但我找不到一個學習某種「先進」模式匹配的好地方。我試過([]:_),它不起作用。另外([],_)只會匹配[[],[]] ... – gremo 2011-02-03 07:10:27
@Gremo:`([],_)`是一個元組,因此只會匹配一個元組,它的第一個元素是一個空列表。例如,試着在42`中計算`let([],_)= [[],[]],你會得到一個編譯時錯誤,例如`let [[],_ ] = [66]中的[[],[]]。 – 2011-02-03 07:51:13