【发布时间】:2018-08-30 10:32:50
【问题描述】:
我目前正在通过Mike Vanier 浏览这个great article on Y-combinator。沿着解释删除以下行:
事实证明,任何 let 表达式都可以使用以下等式转换为等效的 lambda 表达式:
(let ((x <expr1>)) <expr2>) ==> ((lambda (x) <expr2>) <expr1>)
文章通过转换来说明这个陈述:
(define (part-factorial self)
(let ((f (self self)))
(lambda (n)
(if (= n 0)
1
(* n (f (- n 1)))))))
到:
(define (part-factorial self)
((lambda (f)
(lambda (n)
(if (= n 0)
1
(* n (f (- n 1))))))
(self self)))
现在,我明白了上面的两个代码 sn-ps 如何以及为什么相同,但我无法理解将let 转换为lambda 的一般公式是:
(let ((x <expr1>)) <expr2>)
==> ((lambda (x) <expr2>) <expr1>)
我会很感激详细的解释。
【问题讨论】:
-
re:这篇文章的题词,显然是约翰·冯·诺依曼说的,“在数学中你不理解事物。你只是习惯了它们”。
标签: lambda scheme lisp racket let