私は積分する区間の終点の引数a、bを取る反微分を返して、台形則を使ってHaskellで関数を数値的に積分しようとしています。上記でHaskell:where句はラムダの束縛変数を参照しています
integrate :: (Float -> Float) -> (Float -> Float -> Float)
integrate f
= \ a b -> d * sum [ f (a + d*k) | k <- [0..n] ] - d/2.0 * (f a + f b)
where
d = (b - a)/n
n = 1000
、私は
n - for the number of subintervals
d - for the width of each subinterval
これを使用し、ほぼラムダ中の結合の引数、Bを除き、動作します。私は エラーメッセージが出ます:
Not in scope: `b'
Not in scope: `a'
を私は(の範囲は、bはちょうどそのラムダ式に制限されないが、私は記述する必要はありませんように はHaskellでは回避策は存在していることを理解することができますba)/ nは上記のdの出現ごとに?
TIL:あなたが使用することはできません 'WHERE'ラムダと[VSどこましょう](のhttp:/ /www.haskell.org/haskellwiki/Let_vs._Where)。また参照してください[Where'節はHaskellで便利になるでしょう](http://stackoverflow.com/questions/6032183/where-does-the-where-clause-come-in-handy-in-haskell) – rampion
答えた人のおかげです。私はこの問題がよく知られているlet vs discussionに直接つながっていることに気付かなかった。私は、関数を以下のように書くことを提案した人にも感謝したいと思います:integrate f a b = ...それはうまく簡潔な解決策です。 – Bylextor