【问题标题】:What is Eta abstraction in lambda calculus used for?lambda 演算中的 Eta 抽象用于什么?
【发布时间】:2017-03-29 19:15:53
【问题描述】:

λ演算中的Eta抽象意味着跟随。

函数f可以写成\x -> f x

  • Eta 抽象在减少 lambda 表达式时是否有用?
  • 它只是写某些表达式的另一种方式吗?

实际用例将不胜感激。

【问题讨论】:

  • 根据您的评估策略,eta 转换可能是延迟评估的有用方法
  • 谢谢,你能指出一些链接或示例,其中有一些 eta 抽象的用例。
  • 我觉得这叫eta reduction
  • 引用 Haskell wiki 中 Eta conversion 文章中的一句话:"\x -> f x 转换为 f 将构成 eta 减少,并移动以相反的方式将是 eta 抽象。术语 eta 转换 可以指代任一方向的过程。"
  • @toraritte 的另一个术语是 eta 扩展。

标签: lambda-calculus


【解决方案1】:

eta 减少/膨胀只是定律的结果,即给定

f = g

它必须是,对于任何 x

f x = g x

反之亦然。

因此给出:

f x = (\y -> f y) x

我们得到,通过 beta 减少右手边

f x = f x

这一定是真的。因此我们可以得出结论

f   = \y -> f y

【讨论】:

    【解决方案2】:

    首先,为了澄清术语,转述 Haskell wiki 中 Eta conversion 文章中的一段引述(也包含上述 Will Ness 的评论):

    \x -> f x 转换为f 将 构成 eta reduction,并以相反的方式移动 将是 eta abstractionexpansioneta conversion 一词可以指代任一方向的过程。

    找到的用例总结:

    1. 无点(风格)编程
    2. 允许在使用严格/急切评估策略的语言中进行惰性评估
    3. 编译时优化
    4. 扩展性

    1。无点(风格)编程

    来自Tacit programming 维基百科文章:

    隐性编程,也称为无点式,是一种编程 函数定义不识别参数的范式 (或“点”)他们操作。相反,定义仅仅是 编写其他函数

    sth's answer 借用一个 Haskell 示例(这也显示了我在这里选择忽略的组合):

    inc x = x + 1
    

    可以改写为

    inc = (+) 1
    

    这是因为(在yatima2975's reasoning 之后)inc x = x + 1 只是\x -> (+) 1 x 的语法糖,所以

    \x -> f       x   => f
    \x -> ((+) 1) x   => (+) 1
    

    (请查看Ingo's answer 以获取完整证明。)

    在其用法上有一个good thread on Stackoverflow。 (另见this repl.it snippet。)

    2。允许在语言中使用严格/急切的评估策略进行惰性评估

    使得在急切/严格的语言中使用惰性求值成为可能。

    引用Eta Expansion 上的 MLton 文档:

    Eta 扩展会延迟对 f 的评估,直到应用周围的函数/lambda,并且每次应用函数/lambda 时都会重新评估 f

    有趣的 Stackoverflow 线程:Can every functional language be lazy?

    2.1 重击

    我可能是错的,但我认为 thunkingthunks 的概念属于这里。来自the wikipedia article on thunks

    在计算机编程中,thunk 是用于注入 附加计算到另一个子程序中。 Thunks 主要是 用于延迟计算直到需要其结果,或插入 在另一个子程序的开头或结尾进行操作。

    Structure and Interpretation of Computer Programs (pdf) 的4.2 Variations on a Scheme — Lazy Evaluation 对thunk 有非常详细的介绍(尽管后者没有出现“lambda calculus”这个短语,但值得一读)。

    (这篇论文看起来也很有趣,但还没有时间研究它:Thunks and the λ-Calculus。)

    3。编译时优化

    完全不了解这个话题,因此只提供来源:

    4。 Extensionality

    这是另一个我知之甚少的话题,而且是比较理论化的,所以就这样吧:

    来自Lambda calculus 维基百科文章:

    η-reduction 表达了extensionality 的思想,在这种情况下,两个函数是相同的当且仅当它们对所有参数给出相同的结果。

    其他一些来源:

    将此页面递归保存在 Internet 存档中,因此如果任何链接不再存在,那么 that snapshot 可能也已保存这些链接。

    【讨论】:

    • 现在,this,女士们,先生们,这是一个很好的答案。您不仅解释了用途,还理顺了对术语的混淆,因此我们可以清楚地理解您在说什么。谢谢——这正是我现在需要阅读的内容。
    • Awww,你让我很开心,谢谢!最后,我的边缘强迫症得到了回报:)
    猜你喜欢
    • 2019-08-12
    • 1970-01-01
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    相关资源
    最近更新 更多