HackerTube ?

Ruby Conf 12 - Y Not- Adventures in Functional Programming by Jim Weirich

Confreaks在 YouTube 播放 ↗

字幕解读

Jim Weirich 从图灵机与 lambda calculus 的等价计算能力切入,逐步讲解 Church 数字、布尔值、beta reduction、高阶函数和函数式重构,再以 factorial 推导匿名函数如何借助自我应用实现递归。推导出的 Y combinator 是 fact improver 的不动点生成器;演讲强调其理论之美,也指出日常具名递归通常无需直接使用它。

英文字幕轨道 · 引文按字幕原文展示,可点时间戳回看片段。

内容要点

  • lambda calculus 只有函数与函数调用,但 Church 编码和 beta reduction 足以表达数字、布尔选择与计算。
  • Y combinator 把递归函数写成改进器的不动点,使无名称的匿名函数也能递归。
  • 演讲通过逐步重构揭示推导过程;作者同时指出,具名函数已能递归时,直接用 Y combinator 的实际必要性很低。
视频章节 6
  1. 图灵机与可计算性
  2. lambda calculus 与 Church 编码
  3. 不动点的直观含义
  4. 匿名函数的递归难题
  5. 函数式重构与自我应用
  6. Y combinator 的形式与用途
具体观点与证据 4

纯lambda演算只用函数与函数应用,数字与布尔值也可编码为函数。

讲的是计算表达能力,不是这种编码的运行效率。

functions are the only data type. No integers, no strings,
探索此观点 →

匿名函数可通过自我应用实现递归,不必依赖全局函数名。

现场以阶乘推导,实际Ruby仍有栈深限制。

Recursion is no problem for it by doing this little trick
探索此观点 →

不动点组合子把递归机制与阶乘具体逻辑分离,可复用于其他按improver形式写的递归。

要求传入函数符合该构造,不代表任意函数都有数值不动点。

the function y calculates the fixpoint of an improver function.
探索此观点 →

Ruby的严格求值要求额外的函数包装延迟自我应用,否则构造递归时会无限展开。

演示得到的是适用于严格求值的Z组合子,区别于通常的惰性Y写法。

it evaluates its arguments before it passes the arguments down into functions.
探索此观点 →
补充字幕原文 2

Y combinator 将一个递归改进器映射到其不动点,从而得到对应的递归函数。

calculates the fixpoint of an improver function

作者区分理论推导与常规实践:已有具名函数时,通常没有必要使用 Y combinator。

you don't need the y combinator
解读边界

演讲是对 lambda calculus 与 Y combinator 的教学性推导,不是生产代码建议;现场 Ruby 演示依赖特定求值策略与堆栈限制,具名递归的可读性通常更实用。字幕为文本依据,未核听音频。

相关视频与证据 1

边界对照递归的表达能力与终止保证之间的取舍

Weirich用不动点组合子让匿名函数获得递归能力;Wadler明确简单类型演算的终止保证排除了无限制不动点算子。同一递归机制在前者是表达能力来源,在后者是保证边界。

当前视频

Ruby Conf 12 - Y Not- Adventures in Functional Programming by Jim Weirich

不动点组合子提供可复用递归机制。

the function y calculates the fixpoint of an improver function.
关联视频

"Propositions as Types" by Philip Wadler ↗

排除一般递归才有该终止保证。

not using What's called the fixo operator that is unlimited General recursion
▶ 21:59–22:07 · 观看片段

适用边界 比较的是演算与类型约束,不是宣称所有静态类型语言都不能递归。

Hacker News 评论

查看 HN 原评论 ↗