2012-04-10 50 views
1

我現在給哈斯克爾一個去,努力重寫遞歸方面的循環。哈斯克爾:數值積分使用遞歸

我想寫一個基本的積分器,它需要一些函數f(x)並通過中點方法將它集成到範圍[a,b]上。積分函數有三個參數N,a和b,其中N是用於近似積分的矩形的數量。

Wolfram Alpha link

當我試着使用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 

回答

10
  • 你命名你的函數MPInt。只有模塊,類,類型和構造函數的名稱才能以大寫字母開頭;值(包括函數)必須以小寫字母(或下劃線或某些標點符號)開頭。同樣的問題也適用於NDELTA

  • 在第一種情況的MPInt的定義中使用DELTA,但它被定義爲第二種情況的一部分。 A where子句僅適用於緊接它之前的表達式(在此例中爲MPInt N a b = ...定義)。 (此外,DELTA的第一次使用將它視爲一個函數,但第二次使用及其定義將其作爲數值)。

+0

現在就工作。謝謝你的幫助。 – user1324521 2012-04-10 18:24:08