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
- 图灵机与可计算性
- lambda calculus 与 Church 编码
- 不动点的直观含义
- 匿名函数的递归难题
- 函数式重构与自我应用
- 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 · 观看片段适用边界 比较的是演算与类型约束,不是宣称所有静态类型语言都不能递归。