我有一个与方案相关的问题,我们如何将 let* 实现为 lambda 表达式。更准确地说,我不是想知道“常规”let,而是带 * 的 let 让我们在另一个中使用一个 let 表达式。
问问题
299 次
2 回答
5
let*
形式是一系列嵌套的lambda
s。例如,这个:
(let* ((a 10)
(b (+ 10 a)))
(+ a b))
相当于这个:
((lambda (a)
((lambda (b)
(+ a b))
(+ 10 a)))
10)
于 2013-05-22T18:03:23.110 回答
4
由于您对 'regular' 不感兴趣let
,因此如果 alet*
可以转换为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>)
于 2013-05-22T21:01:38.623 回答