我是Haskell的新手,我正在尝试调用我从中得到的函数: http://www.haskell.org/haskellwiki/Functional_differentiation
derive :: (Fractional a) => a -> (a -> a) -> (a -> a)
derive h f x = (f (x+h) - f x) / h
我无法理解方法的参数以及h f x对应的内容。
据我所知:
h是分数
f是一个接收小数并返回小数
的函数x ??它来自哪里?
但是当我输入GHCi时:
Prelude> let derive h f x = (f (x+h) - f x) / h
Prelude> :t derive
derive :: Fractional a => a -> (a -> a) -> a -> a
Prelude>
我从中获得了不同的类型。
发生了什么事?这是某种干扰吗?
答案 0 :(得分:3)
确实令人讨厌。 (Fractional a) => a -> (a -> a) -> (a -> a)
和Fractional a => a -> (a -> a) -> a -> a
属于同一类型,因为->
是右关联的。
取add x y = x + y
。其类型为Int -> Int -> Int
〜Int -> (Int -> Int)
。所以add 5
是一个函数,它接受一个Int并将它加5。
人们可能会写第一个表格的原因可能是强调功能的咖喱形式的使用。
答案 1 :(得分:1)
由于->
是关联的,derive
的类型可以写为
derive :: (Fractional a) => a -> (a -> a) -> a -> a
换句话说,
derive :: (Fractional a) => a -> (a -> a) -> (a -> a)
等于
derive :: (Fractional a) => a -> (a -> a) -> a -> a
我认为x
意味着很明确: - )
答案 2 :(得分:1)
好的,所以区别可以近似为:
df(x)/dx = (f(x+h) - f(x)) / h , in the limit of h -> 0 at point x
其中h
是一个小数字。在Haskell中,f(x)
被写为f x
。它需要和x
并返回一个数字,就像f(x)
获取一个数字并返回另一个数字一样。您的衍生函数是直接翻译。在此处,f
是您要在点x
处获得的函数,其中小数 h
。
因此,对于deriv
,您需要提供小号h
,函数f
以及您想要计算衍生x
的点。在Haskell,
derive h f x = ...
答案 3 :(得分:0)
不完全是。 h
类型为a
,可以是任何内容,但需要instance Fractional
。 Fractional
本身不是一个类型,而是一个类型类,即类型必须支持的接口。
f
是一个函数,它接受a
类型的某些内容并返回相同类型a
的内容。它应该与以前相同a
。不是Fractional
的其他一些实例;同一个。