首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Haskell函数组合(.)和函数应用($)习惯用法:正确使用

Haskell函数组合(.)和函数应用($)习惯用法:正确使用
EN

Stack Overflow用户
提问于 2010-06-13 08:57:49
回答 7查看 22.2K关注 0票数 135

我一直在阅读Real World Haskell,我已经快要读完了,但是关于(.)($)操作符的风格问题一直困扰着我。

当你编写一个由其他函数组合而成的函数时,你可以这样写:

代码语言:javascript
复制
f = g . h

但是当你在这些函数的末尾应用一些东西时,我会写成这样:

代码语言:javascript
复制
k = a $ b $ c $ value

但这本书是这样写的:

代码语言:javascript
复制
k = a . b . c $ value

现在,在我看来,它们在功能上是等同的,在我看来,它们做的事情是完全一样的。然而,我看得越多,我就越发现人们以书中的方式编写函数:首先使用(.)组合,然后只在最后使用($)附加一个值来计算批量(没有人使用很多美元组合)。

使用书籍的方式比使用所有($)符号要好得多,有什么原因吗?或者,这里有没有我没有得到的最佳实践?或者它是多余的,我根本不应该担心它?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-06-13 09:49:05

我想我可以从权威人士那里回答这个问题。

使用图书的方式比使用所有($)符号要好得多,这是有原因的吗?

没有什么特别的原因。布莱恩和我都更喜欢减少线路噪音。.$更安静。因此,本书使用了f . g . h $ x语法。

票数 159
EN

Stack Overflow用户

发布于 2010-06-13 10:08:07

它们实际上是等价的:请记住,$操作符本质上什么也不做。f $ x的计算结果为f x$的目的是它的固定行为:右关联和最小优先级。删除$并使用括号进行分组,而不是使用中缀优先级,代码片段如下所示:

代码语言:javascript
复制
k = a (b (c (value)))

代码语言:javascript
复制
k = (a . b . c) value

$版本相比,更喜欢.版本的原因与更喜欢两者而不是上面带括号的版本的原因是相同的:美学吸引力。

尽管,有些人可能会想,使用中缀运算符而不是括号是否基于某种潜意识的冲动,以避免与Lisp可能的任何相似之处(只是开玩笑...我想?)。

票数 54
EN

Stack Overflow用户

发布于 2010-06-22 23:06:57

我要补充的是,在f . g $ x中,f . g是一个有意义的语法单元。

同时,在f $ g $ x中,f $ g不是一个有意义的单元。可以说,$链更有必要--首先获得xg的结果,然后对其执行f,然后对其执行foo,然后依此类推。

同时,.链可以说更具声明性,在某种意义上更接近以数据流为中心的视图--组成一系列函数,并最终将它们应用于某些东西。

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

https://stackoverflow.com/questions/3030675

复制
相关文章

相似问题

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