【发布时间】:2016-05-07 10:09:33
【问题描述】:
我正在尝试从http://learnyouahaskell.com/higher-order-functions 的本指南中了解高阶函数。但我有点困惑,希望有人能帮我澄清一些事情。
所以我在看这个例子:
applyTwice :: (a -> a) -> a -> a
applyTwice f x = f (f x)
好的,所以applyTwice 是一个接受两个参数的函数,一个接受类型a 和返回类型a 的函数,第二个参数是一个类型a。并且该函数返回一个类型a。
在命令行中我们得到了这个结果:
ghci> applyTwice (++ " HAHA") "HEY"
"HEY HAHA HAHA"
所以函数f是(++),它的类型是[a] -> [a] -> [a]。 (++ " HAHA") 部分申请正确吗?我们只给了它一个参数,所以它返回[a] -> [a]。
在applyTwice 定义中,我想从(f x) 部分开始。所以 f 取 "HEY" 这会产生 "HEY HAHA" 类型为a,然后我需要申请 f 来获得 "HEY HAHA HAHA"
编辑:
用这两个例子:(++ " HAHA")和("HAHA " ++)有什么区别
ghci> applyTwice (++ " HAHA") "HEY"
"HEY HAHA HAHA"
ghci> applyTwice ("HAHA " ++) "HEY"
"HAHA HAHA HEY"
【问题讨论】:
-
听起来你已经掌握了它的基本要点。您有具体问题吗?
-
(++ " HAHA")实际上是 section 但除此之外,您的理解看起来是正确的。你有什么问题?
标签: haskell higher-order-functions