据我了解,以下内容:let
、、let*
和是 Scheme/Racketletrec
中letrec*
使用的合成糖。
现在,如果我有一个简单的程序:
(let ((x 1)
(y 2))
(+ x y))
它被翻译成:
((lambda (x y) (+ x y)) 1 2)
如果我有:
(let* ((x 1)
(y 2))
(+ x y))
它被翻译成:
((lambda (x) ((lambda (y) (+ x y))) 2) 1)
现在,对于我的第一个问题,我理解了letrec
表达式的含义,它使人们能够在 let 中使用递归,但我不明白它是如何完成的。letrec
翻译成什么?
例如,会发生什么
(letrec ((x 1)
(y 2))
(+ x y))
被翻译成?
第二个问题与letrec*
- 但letrec*
我不明白它到底有什么不同letrec
?还有,一个letrec*
表达式会被翻译成什么?