使用let重写表达式

sta*_*93m 2 lambda scheme let racket

我一直在教方案语言,在我的教科书中,我按下了以下表达式。我的问题是为什么要对数字“ 10”进行评估?有人可以向我解释吗?意思是创建什么本地环境以及创建到符号的绑定。我也知道每个lambda表达式都可以使用重写let。任何想法如何做到这一点?我将不胜感激任何帮助。

(let ((x 10)) 
  (define y (lambda (x) x)) 
  (define x 5) 
  (+ x (y x)))
Run Code Online (Sandbox Code Playgroud)

Syl*_*ter 5

您的代码以更易读的形式:

(let ((x 10))
  (define y (lambda (x) x))
  (define x 5)
  (+ x (y x)))
Run Code Online (Sandbox Code Playgroud)

您可以应用替换方法:

(+ x (y x)) ; ==>
(+ 5 (y 5)) ; ==>
(+ 5 ((lambda (x) x) 5)) ; ==>
(+ 5 5) ; ==>
10
Run Code Online (Sandbox Code Playgroud)

你弄错了。每个let都可以重写为lambda,立即称为:

(let ((a aexpr) (b bexpr))
  body ...)

; ==

((lambda (a b) body ...) aexpr bexpr)
Run Code Online (Sandbox Code Playgroud)