'daki sınırlayıcı değişkenleri referanslayan tümcenin, trapez kuralını kullanarak Haskell'deki bir işlevi sayısal olarak entegre etmeye çalışıyorum, entegre edilecek aralığın bitiş noktaları için argümanları a, b alan bir anti-türevi döndürüyorum. Yukarıda Haskell: lambda
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
, I Bu neredeyse lambda b, bir bağlı argümanlar haricinde, işler
n - for the number of subintervals
d - for the width of each subinterval
kullanın. Ben hata mesajı alıyorum:
Not in scope: `b'
Not in scope: `a'
Ben kapsamı b sadece bu lambda ifadesi sınırlı olduğunu anlayabiliyorum ama I (yazmak zorunda kalmamak için Haskell bir çözüm vardır Yukarıdaki her bir d için ba)/n?
til: Sen 'kullanamazsınız where' lambdas ile [let vs nerede] (http://www.haskell.org/haskellwiki/Let_vs._Where). Ayrıca bakınız [nerede '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' (http://stackoverflow.com/questions/6032183/where-does-the-where-clause-come-in-handy-in-haskell) – rampion
Cevaplayan herkese teşekkürler. Bu sorunun, tartışmanın nerede olduğu hakkında iyi bilinen bir izne doğrudan yol açtığının farkında değildim. Ben de şu fonksiyonu yazmamı önerenlere teşekkür etmek istiyorum: f a b = ... Bu hoş ve özlü bir çözümdür. – Bylextor