小编Eme*_*sJr的帖子

Scheme/Racket中letrec的含义

所以,据我了解,以下内容:let,let*,letrecletrec*在方案/球拍使用人工合成的糖.

现在,如果我有一个简单的程序:

(let ((x 1)
      (y 2))
     (+ x y))
Run Code Online (Sandbox Code Playgroud)

它被翻译成:

((lambda (x y) (+ x y)) 1 2)
Run Code Online (Sandbox Code Playgroud)

如果我有:

(let* ((x 1)
      (y 2))
     (+ x y))
Run Code Online (Sandbox Code Playgroud)

它被翻译成:

((lambda (x) ((lambda (y) (+ x y))) 2) 1)
Run Code Online (Sandbox Code Playgroud)

现在,对于我的第一个问题,我理解一个letrec表达式的含义,它允许一个人在let中使用递归,但我不明白它是如何完成的.什么是letrec翻译成?

例如,会是什么

(letrec ((x 1)
      (y 2))
     (+ x y)) 
Run Code Online (Sandbox Code Playgroud)

被翻译成?

第二个问题是类似的letrec*- 但letrec*我不明白它究竟有何不同letrec?而且,letrec*表达式将被翻译成什么?

scheme let racket letrec

6
推荐指数
1
解决办法
1867
查看次数

标签 统计

let ×1

letrec ×1

racket ×1

scheme ×1