Я пытаюсь численно интегрировать функцию в Haskell, используя правило трапеций, возвращая антипроизводную, которая принимает аргументы a, b для конечных точек интервала, который нужно интегрировать.
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
Это почти работает, за исключением связанных аргументов a, b в лямбде. Я получаю сообщение об ошибке:
Not in scope: `b'
Not in scope: `a'
Я понимаю, что область действия a, b ограничена только этим лямбда-выражением, но есть ли обходной путь в Haskell, чтобы мне не приходилось писать (ba) / n для каждого вхождения d в приведенном выше?