我现在正在给Haskell一个忙,并努力在递归方面重写循环。
我正在尝试编写一个基本积分器,它取一些函数f(x)并通过Midpoint方法在[a,b]范围内对其进行积分。积分函数采用三个参数N,a和b,其中N是用于近似积分的矩形的数量。
当我尝试使用GHCI编译它时,我收到了很多抽象的错误消息,我真的不知道从哪里开始。大量“超出范围”和几个“Main.a [或b]的多重声明”。
由于
MPInt 1 a b = DELTA 1 -- Base case
MPInt N a b = (MPInt (N-1) a b) + DELTA
where
dX = (b - a) / N
DELTA = dX * f (a + dX * (N+0.5))
f :: (Num a) => a -> a
f x = x^2
答案 0 :(得分:10)
您已将功能命名为MPInt
。只有模块,类,类型和构造函数的名称才能以大写字母开头;值(包括函数)必须以小写字母(或下划线或某些标点符号)开头。同样的问题也适用于N
和DELTA
。
您在DELTA
的第一个案例的定义中使用MPInt
,但它被定义为第二个案例的一部分。 where
子句仅适用于它之前的表达式(在本例中为MPInt N a b = ...
定义)。 (此外,DELTA
的第一次使用将其视为一个函数,但第二次使用及其定义将其视为数值。