2015-10-16 42 views
1

所以我很新的哈斯克爾,和我不是很清楚如何遍歷一個矩陣時處理此錯誤。我猜這是我沒有考慮的情況,但我無法弄清楚它是什麼。我有兩個函數,一個將列表變成一個字符串,另一個將矩陣變成一個字符串。這些是我的兩個功能:非詳盡的模式,而迭代矩陣

listToString :: [Int] -> String 
listToString [] = "\n" 
listToString (x:xs) = show x ++ " " ++ listToString xs 

matToString :: [[Int]] -> String 
matToString [[]] = "" 
matToString (y:x:xs)) = listToString y ++ matToString (x:xs) 

listToString工作正常,但matToString沒有。我想知道是否有人可以幫我解決這個問題。我一直很難理解Haskell,因爲之前我從來沒有用過函數式編程語言編程,或者至少不是純粹功能性的編程語言。

+0

matToString [[]] = 「」 更改爲matToString [] = 「」 – lsbbo

回答

1

你的遞歸情況下覆蓋有至少兩個參數每個列表,所以這是很酷。問題在於你的基本情況—它只涵蓋了只有一個元素的列表,它本身就是空列表。

添加到您的文件的頂部:{-# OPTIONS_GHC -Wall #-}。這應該會給你一個詳細的編譯器警告,指出哪些模式已經丟失。

+0

這是一個非常有用的工具,謝謝。期待更多地瞭解haskell,他們說它對於它的功能非常有用,儘管我聽到有人說沒有人用它來做任何事情。 – Argus

+0

@阿古斯,那些人是錯的。這在行業中並不是很大,但它已經出現,並且似乎越來越受歡迎。 – dfeuer

+0

是的,我聽說的一個例子是使用haskell作爲服務器端語言,我認爲這很有趣。 – Argus