1

我现在正在尝试 Haskell,并努力在递归方面重写循环。

我正在尝试编写一个基本的积分器,它采用一些函数 f(x) 并通过中点方法在 [a, b] 范围内对其进行积分。积分函数采用三个参数 N、a 和 b,其中 N 是用于近似积分的矩形数。

Wolfram Alpha 链接

当我尝试用 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
4

1 回答 1

10
  • 你已经命名了你的函数MPInt。只有模块、类、类型和构造函数的名称可以以大写字母开头;值(包括函数)必须以小写字母(或下划线或某些标点符号)开头。同样的问题也适用于NDELTA

  • DELTA在第一种情况的定义中使用MPInt,但它被定义为第二种情况的一部分。where子句仅适用于紧接在它之前的表达式(在本例中为定义MPInt N a b = ...)。(此外,第一次使用DELTA将其视为函数,但第二次使用及其定义将其视为数值)。

于 2012-04-10T16:44:11.770 回答