我试图使用梯形规则在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
Run Code Online (Sandbox Code Playgroud)
在上面,我用
n - for the number of subintervals
d - for the width of each subinterval
Run Code Online (Sandbox Code Playgroud)
除了lambda中绑定的参数a,b之外,这几乎可以正常工作.我收到错误消息:
Not in scope: `b'
Not in scope: `a'
Run Code Online (Sandbox Code Playgroud)
我可以理解a,b的范围仅限于lambda表达式,但是在Haskell中有一个解决方法,所以我不必在上面的每次出现时写(ba)/ n吗?
在GHCI中,我键入以下内容:
map (+1) [1..10]
Run Code Online (Sandbox Code Playgroud)
返回[2,3,4,5,6,7,8,9,10,11]
到现在为止还挺好.
现在我输入:
min (map (+1) [1..10])
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
No instance for (Show ([b0] -> [b0]))
arising from a use of `print'
Possible fix: add an instance declaration for (Show ([b0] -> [b0]))
In a stmt of an interactive GHCi command: print it
Run Code Online (Sandbox Code Playgroud)
这对我来说很奇怪.为什么Haskell认为我正在尝试打印任何参数,我该如何解决这个问题呢?