【发布时间】:2013-05-17 21:43:23
【问题描述】:
我有一个与方案相关的问题,我们如何将 let* 实现为 lambda 表达式。更准确地说,我不是想知道“常规”let,而是带 * 的 let 让我们在另一个中使用一个 let 表达式。
【问题讨论】:
标签: lambda functional-programming scheme sicp let
我有一个与方案相关的问题,我们如何将 let* 实现为 lambda 表达式。更准确地说,我不是想知道“常规”let,而是带 * 的 let 让我们在另一个中使用一个 let 表达式。
【问题讨论】:
标签: lambda functional-programming scheme sicp let
let* 表单是一系列嵌套的lambdas。例如,这个:
(let* ((a 10)
(b (+ 10 a)))
(+ a b))
相当于这个:
((lambda (a)
((lambda (b)
(+ a b))
(+ 10 a)))
10)
【讨论】:
既然您不知道“常规”let,如果let* 可以转换为let,那么您将得到答案。因此要知道:
(let* ((a ...) (b ...) (c ...)) body ...)
相当于:
(let ((a ...))
(let ((b ...))
(let ((c ...))
body ...)))
(参见 R5RS,第 44 页,(define-syntax let* ...))。现在,鉴于此,并且知道:
(let ((a ...)) body ...)
相当于:
((lambda (a) body ...) ...)
我上面展示的let* 的“扩展”变为:
((lambda (a)
((lambda (b)
((lambda (c)
body ...)
<c-init>))
<b-init>))
<a-init>)
【讨论】: