0

我创建了这个程序来返回一个没有零值的矩阵的位置列表。

此代码:

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.

为什么 ?

我希望我已经清楚了。

4

2 回答 2

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
于 2012-10-10T11:10:50.067 回答
0

此外,您的 takeH 函数需要将 Matrix 和 Pos 作为参数,但您似乎只传递了一个 Pos ...?我假设你想要类似的东西takeH x (i, j) = (x!!(i-1))!!(j-1)

一般来说,我强烈警告不要使用部分函数,​​例如!!。如果您的 Matrix 不包含足够的值并且超出范围怎么办?您的程序将终止并抛出错误。也考虑到这一点

于 2012-10-11T06:49:19.130 回答