【问题标题】:Haskell - Parse error on input '->'Haskell - 输入“->”解析错误
【发布时间】:2012-10-10 11:06:24
【问题描述】:

我创建了这个程序来返回一个矩阵的位置列表,其中 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.

为什么?

我希望我已经清楚了。

【问题讨论】:

  • 你忘记了:: 中的v0 [Pos]->Matrix->[Pos] 吗? v0 :: [Pos]->Matrix->[Pos]

标签: haskell parse-error


【解决方案1】:

在函数类型之前需要::

-- 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

【讨论】:

    【解决方案2】:

    您的 takeH 函数还需要将 Matrix 和 Pos 作为参数,但您似乎只传递给它一个 Pos...?我假设你想要像takeH x (i, j) = (x!!(i-1))!!(j-1) 这样的东西。

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

    【讨论】:

      猜你喜欢
      • 2013-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-18
      • 2013-05-28
      • 2016-01-11
      • 1970-01-01
      • 2018-05-02
      相关资源
      最近更新 更多