首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >命名函数($)或(>>=)

命名函数($)或(>>=)
EN

Stack Overflow用户
提问于 2017-12-28 00:31:52
回答 1查看 136关注 0票数 0

($)(>>=)开头的函数应该做什么。我不是在问$>>=到底是什么意思,但我明白

代码语言:javascript
运行
复制
f :: Int -> Int
f x = x+2

是一个接受整数并添加两个整数的函数,但是在学习Haskell时,我遇到了一些问题,解决方案如下所示:

代码语言:javascript
运行
复制
($) :: (a -> b) -> (a -> b)
f $ x = f x

来自What does $ mean/do in Haskell?

我假设这意味着函数($)接受lambda (a -> b)并输出lambda (a -> b),然后我不确定下一行。

但我总是假设函数的定义

代码语言:javascript
运行
复制
f :: Int -> Int

必须后面跟着一个以f开头的参数的函数,就像我的第一个代码示例。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-28 00:48:57

Infix应用程序,如1 + 2f $ x,分别只是(+) 1 2($) f x的语法糖。无论它们是出现在模式匹配(=的左侧)还是出现在表达式中,都是如此。所以,你的小白脸

代码语言:javascript
运行
复制
f :: Int -> Int
f x = (+) x 2

($) :: (a -> b) -> (a -> b)
($) f x = f x

后者也可以写成

代码语言:javascript
运行
复制
apply :: (a -> b) -> a -> b
apply f x = f x

语法规则是:如果一个标识符由字母(可能还包括数字,在非主导位置)组成,那么它被解析为一个带有右边所有参数的函数,或者在没有参数的情况下被简单地解析为一个常量值。如果它由任何其他符号组成,并且不被括号所包围,那么它被解析为一个infix,也就是说,将左边的任何位置用作第一个参数,而位于右侧的任何元素都被用作第二个参数。

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

https://stackoverflow.com/questions/48000209

复制
相关文章

相似问题

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