这个Haskell代码出错

时间:2014-07-19 18:41:34

标签: parsing haskell

rango :: [Integer] -> [Integer] -> [[Integer]] -> [Integer]
rango (length list) b list = 
rango a b list = if ((list!!a) == (list!!b)) then 0++(rango a b+1 list)
           else(rango2 a list!!b list)++(rango a b+1 list)


rango2 :: [Integer] -> [Integer] -> [[Integer]] -> [Integer]
rango2 a b list = if verif((take 2(map(+(a!!2))a)) (take 2(map(-(a!!2))a)) (take 2(b))) then [1]
     else [0]


verif :: [Integer] -> [Integer] -> [Integer] -> Bool
verif a b c = if ((c!!0 < a!!0) && (c!!0 > b!!0) && (c!!1 < a!!1) && (c!!1 > b!!1)) then True
          else False

错误是:解析错误(可能是错误的缩进或括号不匹配)

在这一行

rango a b list = if ((list!!a) == (list!!b)) then 0++(rango a b+1 list)

1 个答案:

答案 0 :(得分:3)

rango :: [Integer] -> [Integer] -> [[Integer]] -> [Integer]
rango (length list) b list = 

上述行在=之后缺少定义。这会使编译器在下面的行中混淆。

此外,(length list)不是有效模式,正如Rhymoid指出的那样。

作为一般性评论,您的代码似乎也包含多个类型错误。您可能应该重新考虑一下您的方法。您确定您的功能的类型签名是否正确?你真的需要输入两个整数列表和一个矩阵吗?输出是否是整数列表?

我的建议是首先学习Haskell的基础知识,从简单的练习开始。如果您正在尝试编写一个函数来计算矩阵的等级,那么在此阶段可能会过于复杂。