发布
社区首页 >问答首页 >使用无点标识函数而不是通配符有好处吗?

使用无点标识函数而不是通配符有好处吗?
EN

Stack Overflow用户
提问于 2015-01-18 22:30:04
回答 1查看 119关注 0票数 2

如果一个函数的情况会导致输入按原样返回,那么在这种情况下使用无点id可以获得什么结果呢?

示例:

代码语言:javascript
代码运行次数:0
复制
-- First way, use some symbol as wildcard
myFunc :: Int -> SomeData -> SomeData
myFunc 0 _ = _
myFunc ...

-- Second way, point-free `id`. Is this more efficient?
myFunc :: Int -> SomeData -> SomeData
myFunc 0 = id
myFunc ...

我认为可以使用的一个标准函数是drop,因为drop 0实际上是id。但是如果你看源代码,它不是免费的(有drop 0 xs = xs .您必须向下滚动一点才能看到定义;查找drop (I# n#) ls)。我怀疑如果drop不使用它,这不会有多大关系。

编辑:实际上它看起来不允许有不同数目的参数的方程。通过案例扩展的方法来翻译多方程函数定义.

所以,如果你选择了这条路线,你必须确保函数的所有剩余方程也可以用相同的无点风格定义--这对于大多数函数来说是非常不可能的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-18 22:45:26

在GHC中,可能有不同之处。哪个更好将取决于情况。具体来说,一个函数只有在“完全应用”时才会被优化器内联。所以在第一个公式中,如果你要做一些类似的事情

代码语言:javascript
代码运行次数:0
复制
fooThing (myFunc 0)

然后(除非首先进行其他优化),GHC将生成一个表示myFunc 0的闭包,然后在fooThing决定这样做时应用它。如果您使用的是id-based实现,GHC将将上述转换为

代码语言:javascript
代码运行次数:0
复制
fooThing id
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28015570

复制
相关文章

相似问题

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