我有一个与方案相关的问题,我们如何实现let *作为lambda表达式。更确切地说,我并不想知道“常规”让,但是让我们使用*让我们使用一个让表达式在另一个中。
答案 0 :(得分:5)
let*
表单是一系列嵌套的lambda
。例如,这个:
(let* ((a 10)
(b (+ 10 a)))
(+ a b))
等同于:
((lambda (a)
((lambda (b)
(+ a b))
(+ 10 a)))
10)
答案 1 :(得分:4)
由于您不想知道“常规”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>)