我创建了这个程序来返回 no 值为零的矩阵的位置列表。
此代码:
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.
为什么?
我希望我已经说清楚了。
在函数类型之前需要::
。
-- 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
此外,您的takeH函数需要将矩阵和Pos作为参数,但您似乎只向它传递了一个Pos...?我假设你想要像takeH x (i, j) = (x!!(i-1))!!(j-1)
这样的东西.
一般来说,我强烈警告不要使用部分函数,例如!.如果您的矩阵不包含足够的值并且超出范围怎么办?程序将终止并引发错误。也要考虑到这一点