首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >深入理解赛跑的例子

深入理解赛跑的例子
EN

Stack Overflow用户
提问于 2016-07-13 21:54:39
回答 1查看 212关注 0票数 1

读取https://wiki.haskell.org/Currying

它指出:

在大多数情况下,新程序员可以忽略跑步。理论上考虑所有函数的主要优点是:当所有函数都被统一处理时,形式证明更容易(一个论点,一个结果)。话虽如此,但有一些Haskell成语和技巧你需要理解。

什么是Haskell技术/成语,需要对赛跑有更深入的理解?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-14 01:50:15

部分函数应用程序实际上并不是Haskell的一个独特特性;它只是仓促函数的结果。

代码语言:javascript
运行
复制
map :: (a -> b) -> [a] -> [b]

在像Python这样的语言中,map总是使用两个参数:类型为a -> b的函数和类型为[a]的列表。

代码语言:javascript
运行
复制
map(f, [x, y, z]) == [f(x), f(y), f(z)]

这要求您假装->语法只是为了显示,而(a -> b)[a]之间的->[a] -> [b]之间的语法并不完全相同。然而,情况并非如此;它是完全相同的运算符,而且它是正确的结合。map的类型可以显式地括号为

代码语言:javascript
运行
复制
map :: (a -> b) -> ([a] -> [b])

突然之间,您可能只向map提供一个参数(函数),并返回一个类型为[a] -> [b]的新函数,这似乎就没那么有趣了。这就是所有的部分函数应用是:利用所有函数都是草率的事实。

实际上,对于一个函数,您从来没有给出过一个以上的参数。为了配合->是右关联的,函数应用程序是左关联的,意思是一个“多参数”调用,如

代码语言:javascript
运行
复制
map f [1,2,3]

实际上是两个函数应用程序,如果我们插入它,它就会变得更清晰。

代码语言:javascript
运行
复制
(map f) [1,2,3]

map首先“部分”应用于一个参数f,该参数返回一个新函数。然后将该函数应用于[1,2,3]以获得最终结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38362348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档