更改

跳到导航 跳到搜索
添加5字节 、 2026年9月17日 (星期四)
第507行: 第507行:  
====与Y组合子的关系====
 
====与Y组合子的关系====
   −
<math>\lambda</math> 演算(Church 1930 年代发明的、Lisp 等函数式语言的祖先)中有一个著名对象 '''Y 组合子''':对任何函数 <math>F</math>,<math>YF = F(YF)</math>,即 <math>Y</math> 直接生产出 <math>F</math> 的不动点,纯函数式地实现递归——它让匿名函数也能"引用自己"。
+
[[lambda演算]](Church 1930 年代发明的、Lisp 等函数式语言的祖先)中有一个著名对象 '''[[Y 组合子]]''':对任何函数 <math>F</math>,<math>YF = F(YF)</math>,即 <math>Y</math> 直接生产出 <math>F</math> 的不动点,纯函数式地实现递归——它让匿名函数也能"引用自己"。
    
Kiselyov 在'''分阶段 <math>\lambda</math> 演算'''(staged lambda-calculus,区分"代码"与"值"两个阶段的现代元编程框架)中重构了第二递归定理,得出一个漂亮的结论:'''第二递归定理就是 Y 组合子的"带代码"推广'''——[[Y组合子]]给出函数层面的不动点,SRT 给出"程序 + 自身代码"层面的不动点;当把"代码"取为平凡编码(程序即自身)时,SRT 的构造精确退化为 Y 组合子<ref name="kiselyov" />。
 
Kiselyov 在'''分阶段 <math>\lambda</math> 演算'''(staged lambda-calculus,区分"代码"与"值"两个阶段的现代元编程框架)中重构了第二递归定理,得出一个漂亮的结论:'''第二递归定理就是 Y 组合子的"带代码"推广'''——[[Y组合子]]给出函数层面的不动点,SRT 给出"程序 + 自身代码"层面的不动点;当把"代码"取为平凡编码(程序即自身)时,SRT 的构造精确退化为 Y 组合子<ref name="kiselyov" />。
   −
这一视角澄清了 SRT 对计算机科学的意义:'''它陈述的是"任何合理的程序系统对自指构造封闭",是把高阶操作(程序变换)降阶到数据层面(编号)的不动点原理'''——部分求值(partial evaluation)、编译器自举(bootstrapping)、宏系统的理论基础。
+
这一视角澄清了 SRT 对计算机科学的意义:'''它陈述的是"任何合理的程序系统对自指构造封闭",是把高阶操作(程序变换)降阶到数据层面(编号)的不动点原理'''——[[部分求值]](partial evaluation)、[[编译器自举]](bootstrapping)、[[宏系统]]的理论基础。
    
=== SRT与自指===
 
=== SRT与自指===

导航菜单