Помогите, пожалуйста. Я полный новичок в хаскеле, учу его меньше недели.
Есть задание:
«Реализуйте функцию, находящую значение определённого интеграла от заданной функции f на заданном интервале [a,b] методом трапеций. (Используйте равномерную сетку; достаточно 1000 элементарных отрезков.)
integration :: (Double -> Double) -> Double -> Double -> Double
integration f a b = undefined
GHCi> integration sin pi 0
-2.0
Результат может отличаться от -2.0, но не более чем на 1e-4.»
Мой код:
integration f a b | a < b = helper f a b 0 ( (b - a) / 1000)
| otherwise = -1 * integration f b a
helper f a b res step | (abs (b - a)) < step =
res + ( ((f a + f b) / 2) * abs (a - b) )
| otherwise = helper f (a + step) b
(res + ( ( (f a) + (f (a + step))) / 2 ) * step ) step
(Оформлено немного не так, но по-другому здесь отчего-то не всё помещается.)
Валится на первом же тесте: out of memory. Хоть убей не понимаю, что сделано неправильно. Что поменять? Как улучшить?