免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8656 | 回复: 6
打印 上一主题 下一主题

haskell 中 '$' 能用在哪些地方呢? [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
1 [报告]
发表于 2009-04-11 16:06 |显示全部楼层
注意优先级就可以了。
冒号比 $ 的优先级高。

事实上 $ 的优先级最低。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2009-04-11 17:42 |显示全部楼层
原帖由 izhier 于 2009-4-11 17:39 发表
$ 是语法糖吗?

$ 是个函数(运算符),只不过优先级特低:
  1. *Main> :i ($)
  2. ($) :: (a -> b) -> a -> b       -- Defined in GHC.Base
  3. infixr 0 $
  4. *Main>
复制代码

[ 本帖最后由 flw 于 2009-4-11 17:45 编辑 ]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2009-04-11 17:59 |显示全部楼层
n :  threeAndOne $ n `div` 2
就等于
(n :  threeAndOne) $ (n `div` 2)
所以是错的。
n :  threeAndOne (n `div` 2)
就等于
n : (threeAndOne (n `div` 2))
所以是对的。

Lisp 用户在这个问题上永远都有资格鄙视别人。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2009-04-12 13:57 |显示全部楼层
你说的还真对,
$ 就相当于是 apply,
不过 Haskell 中的 apply 运算符实际上就是空白,它的优先级是最高的。
$ 相当于优先级最低的 apply,而且是右结合的。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2009-04-13 10:19 |显示全部楼层
原帖由 Magicloud 于 2009-4-13 09:40 发表

不考虑优先级,$就等效于“此后内容用括号”。

不正确。
正确的其实是【此前内容用括号包起来,此后内容也用括号包起来】

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2009-04-13 10:34 |显示全部楼层
原帖由 MMMIX 于 2009-4-13 10:30 发表

其实,这个也不是完全准确的,考虑存在多个 $ 的情况。

是啊。所以这样理解终究不是办法,还是老老实实搞清楚 $ 的本意好了。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
7 [报告]
发表于 2009-04-13 11:13 |显示全部楼层
原帖由 Magicloud 于 2009-4-13 11:05 发表

存在多个也是这样的,一级一级匹配而已。

你这个“一级一级匹配”实际上就是指结合性。

你只要搞清楚 $ 的功能是 apply,优先级是 0,结合性是右结合,就行了。
多么简单明了啊。整那个括号替换完全没必要。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP