2012-10-08 41 views
1

此代碼解析錯誤:哈斯克爾 - 圖案

validate :: Matrix-> Bool 
validate x: [] = length x 
validate x: xs = (length x == lenght.head $ xs) == (validate tail xs) 

產生這個錯誤:

Parse error in pattern: validate 

爲什麼?

我的目標是返回true,如果矩陣是在正確的模式,即所有行中的列數相等,反之亦然。

回答

13

函數應用程序比運算符(如:)具有更高的優先級。所以編譯器認爲:

validate x:[] 

表示:

(validate x):[] = .. 

這當然是錯誤的。

所以,你應該明確這歧義使用括號:

validate (x:[]) = .. 

同樣,對於第二行:

validate (x:xs) = .. 

此外,如果你不提供功能應用,則假定任何支架因此:

validate tail xs 

與以下情況相同:

(validate tail) xs 

而不是:

validate (tail xs) 

通常的做法是使用$運算符,如:

validate $ tail xs