阅读https://wiki.haskell.org/Currying
它声明:
很多时候,新程序员可以忽略curry。该 将所有功能视为咖喱的主要优点是 理论:当处理所有函数时,形式证明更容易 统一(一个参数,一个结果)。话虽如此,那里 是您需要了解的Haskell习语和技巧 钻营。
什么是Haskell技术/成语,需要更深入地了解currying?
答案 0 :(得分:1)
部分功能应用程序并不是Haskell的一个独特功能;这只是咖喱功能的结果。
map :: (a -> b) -> [a] -> [b]
在像Python这样的语言中,map
始终采用两个参数:类型为a -> b
的函数和类型为[a]
的列表
map(f, [x, y, z]) == [f(x), f(y), f(z)]
这要求您假装->
语法仅用于展示,并且->
和(a -> b)
之间的[a]
与之间的[a] -> [b]
不同map
。但事实并非如此;它是精确相同的运算符,它是右关联的。 map :: (a -> b) -> ([a] -> [b])
的类型可以明确括号为
map
突然之间,您可能只向[a] -> [b]
提供一个参数(函数)并返回类型为->
的 new 函数,这似乎不那么有趣。这就是所有部分功能应用是:利用所有功能都是咖喱的事实。
实际上,你从来没有给函数提供过多个参数。为了使map f [1,2,3]
与权利相关联,函数应用程序是 left -associative,这意味着像
(map f) [1,2,3]
实际上是两个函数应用程序,如果我们将它括起来就会变得更清晰。
map
f
首先“部分”应用于一个参数[1,2,3]
,它返回一个新函数。 然后将此函数应用于top
以获得最终结果。