读取https://wiki.haskell.org/Currying
它指出:
在大多数情况下,新程序员可以忽略跑步。理论上考虑所有函数的主要优点是:当所有函数都被统一处理时,形式证明更容易(一个论点,一个结果)。话虽如此,但有一些Haskell成语和技巧你需要理解。
什么是Haskell技术/成语,需要对赛跑有更深入的理解?
发布于 2016-07-14 01:50:15
部分函数应用程序实际上并不是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]的新函数,这似乎就没那么有趣了。这就是所有的部分函数应用是:利用所有函数都是草率的事实。
实际上,对于一个函数,您从来没有给出过一个以上的参数。为了配合->是右关联的,函数应用程序是左关联的,意思是一个“多参数”调用,如
map f [1,2,3]实际上是两个函数应用程序,如果我们插入它,它就会变得更清晰。
(map f) [1,2,3]map首先“部分”应用于一个参数f,该参数返回一个新函数。然后将该函数应用于[1,2,3]以获得最终结果。
https://stackoverflow.com/questions/38362348
复制相似问题