2012-10-10 66 views
0

我創建了這個程序來返回一個沒有零值的矩陣的位置列表。Haskell - 輸入解析錯誤' - >'

此代碼:

type Pos = (Int,Int) 
type Matrix = [[Int]] 

v0 [Pos]->Matrix->[Pos] 
v0 [] m =[] 
v0 [p:ps] m = if ((takeH m p) == 0) then v0 ps m 
            else p:v0 ps m 

takeH:: Matrix->Pos->Int 
takeH m (i,j)= (m!!(i-1))!!(j-1) 

產生以下錯誤:

Parse error on input '->' 
Failed,modules loades: nome. 

爲什麼?

我希望我已經清楚。

+2

您是否在'v0 [Pos] - > Matrix - > [Pos]'中忘記了'::'? 'v0 :: [Pos] - > Matrix - > [Pos]' –

+0

我不相信。大聲笑 – 1775

回答

4

您需要在函數的類型之前有::

-- vv here 
v0 :: [Pos] -> Matrix -> [Pos] 
v0 [] _ = [] 
-- v v also parenthesis, not square brackets 
v0 (p:ps) m = if ((takeH m p) == 0) then v0 ps 
            else p:v0 ps 
0

此外,您的takeH函數需要以Matrix和Pos作爲參數,但您似乎只能通過Pos ...?我假設你想要類似takeH x (i, j) = (x!!(i-1))!!(j-1)

一般而言,我高度警告不要使用部分函數,​​如!!。如果您的矩陣不包含足夠的值並超出界限會怎麼樣?你的程序將終止並拋出一個錯誤。同時考慮到這一點