首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 从 λ 到 Ret:一次把 Lambda 演算和尾递归优化塞进生产代码的实录

    但一到 AST → 字节码就翻车:问题原教旨 λ工程补丁变量捕获纯 nameless 语法De Bruijn index + up-value 表递归定义Y combinator 炸栈额外 letrec 线上事故:一次 “letrec” 导致 TCO 失效的血案上线第二周,脚本里写了:(letrec ((f (lambda (x) (if (zero? 排查发现: letrec 展开后多出一条 SET! 指令,不再处于尾位置,TCO 检测失败。 修复:把 letrec 的初始化语句提前到函数头,让递归调用回归最后一个表达式。

    13400编辑于 2025-07-26
  • 来自专栏一个会写诗的程序员的博客

    Scala类型推导Scala类型推导

    Expression "(" Expression ")" * | "let" Identifier "=" Expression "in" Expression * | "letrec def toString = "(let " + binding + " = " + definition + " in " + body + ")" } case class Letrec , definition: Expression, body: Expression) extends Expression { override def toString = "(letrec definitionType) analyze(body, newEnv, nongeneric) } case Letrec (Identifier("factorial"), // letrec factorial = Lambda(Identifier("n"), // lambda

    2.9K20发布于 2018-08-20
领券