据我所知,以下内容:
如果我有:
let
、let*
、letrec
和 letrec*
是Scheme/Racket中使用的合成糖。现在,如果我有一个简单的程序:(let ((x 1)
(y 2))
(+ x y))
It is translated into:
((lambda (x y) (+ x y)) 1 2)
如果我有:
(let* ((x 1)
(y 2))
(+ x y))
It is translated into:
((lambda (x) ((lambda (y) (+ x y))) 2) 1)
现在,我有一个问题,我理解了letrec
表达式的含义,允许在let语句中使用递归,但我不明白具体是如何实现的。 letrec
被翻译成什么?
例如,下面的代码将会……
(letrec ((x 1)
(y 2))
(+ x y))
需要翻译成什么语言?
第二个问题与letrec*
类似 - 但是对于letrec*
,我不明白它与letrec
有什么区别?而且,letrec*
表达式将被翻译成什么?
letrec
,就像我在示例中指定let
和let*
的等效表达式一样? - user4285147letrec
和letrec*
。(所以,这可能是一个重复的问题...) - Will Ness