2012-10-10 69 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)

一般而言,我高度警告不要使用部分函数,​​如!!。如果您的矩阵不包含足够的值并超出界限会怎么样?你的程序将终止并抛出一个错误。同时考虑到这一点