我做了一個像這樣的錯誤的線程,其中我解釋了我的程序。這裏的the link錯誤:函數Haskell中的非窮舉模式
我在我的項目前進,我有另一個像這樣的問題。我做了另一個線程,但如果我只需要編輯第一個線程就告訴我。
我想扭轉我的矩陣。例如[[B,B,N],[N,B,B]]將變爲[[B,N],[B,B],[N,B]]。這裏是我的代碼:
transpose :: Grille -> Grille
transpose [] = []
transpose g
| head(g) == [] = []
| otherwise = [premierElem(g)] ++ transpose(supp g)
supp :: Grille -> Grille
supp [] = []
supp (g:xg) = [tail(g)] ++ supp(xg)
premierElem :: Grille -> [Case]
premierElem [] = []
premierElem (x:xg) = [head(x)] ++ premierElem(xg)
我得到了完全相同的錯誤,我試圖像第一個,但不是這樣。
編輯:確切的錯誤
*Main> transpose g0 [[B,B,N,B,N,B],[B,B,B,B,N,B],[B,N,N,B,N,B],[B,B,N,N,B,N],[B,N,N,N,B,N],[B,B,N,B,B,B],[N,B,N,N,B,N],[*** Exception: Prelude.head: empty list
你不應該使用tail和head函數,你應該使用模式匹配。例如,在'premierElem g = [head(head(g))]]中,你知道'g'本身是一個非空列表,因爲'premierElem [] = ...'模式在它之前,但是你不知道'head g'是一個非空列表。 'supp g = [tail(head(g))] ...' – user2407038
這是什麼意思?使用模式匹配是什麼意思?我嘗試使用'(g:gx)'來減少'head()'和'tail()'的數量,但它不起作用。對不起,如果我不明白我是初學者。 – pioupiou1211
「我試圖使用(g:gx)」 - 這是正確的,你在正確的軌道上。如果該代碼「不起作用」,請將其包含在問題中,以及它提供給您的錯誤。請注意,您需要嵌套模式,因爲您有一個列表列表 - 例如'transpose([]:xss)= ..;轉置((x:xs):xss)= ...' – user2407038