2017-02-24 24 views
1

以下は、入力f =単項関数、& b =積分を取る範囲、およびn =分割するサブ間隔の数で与えられる台形法を使用して確定積分を計算するSMLコードです〜の範囲。関数に関数を渡すSML

fun integrate f a b n = 
let val w = (b - a)/(real n) 
fun genBlock c = let val BB = f c 
      val SB = f (c+w) 
     in (BB + SB) * w/2.0 
     end 
fun sumSlice 0 c acc = acc 
    | sumSlice n c acc = sumSlice (n-1) (c+w) (acc + (genBlock c)) 
in sumSlice n a 0.0 
end 

問題は、私は機能(たとえばX立方)を定義し、B、およびnは、この機能にそれを養うためにどのように私の人生のために把握することはできませんです。ここでは、エラーをしようとして受け、私のスクリーンショットです:この写真で enter image description here

私は無駄に統合する機能にそれを養うために試行し、キューブX X = X Xを定義し、それが動作を示しています。

答えて

4

エラーメッセージはかなり具体的である:integrateはタイプreal -> realの機能を期待していますが、機能を定義し、cube、タイプint -> intの。

あなたが行うことができます物事のカップルがあります。

1)cubeの定義に型注釈を追加します。

- fun cube x:real = x*x*x; 
val cube = fn : real -> real 

そして:

- integrate cube 0.0 5.0 5; 
val it = 162.5 : real 

2)あなたは、名前付き関数としてcubeを定義することなく、計算を無名関数として渡すだけです。この場合、SMLの型推論機構は、関数x => x*x*xに目的の型を与えます:

- integrate (fn x => x*x*x) 0.0 5.0 5; 
val it = 162.5 : real