Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Racket 解释x值在此球拍语言代码中未更新的原因?_Racket - Fatal编程技术网

Racket 解释x值在此球拍语言代码中未更新的原因?

Racket 解释x值在此球拍语言代码中未更新的原因?,racket,Racket,此代码: (let((x2))(let((f(lambda(n)(+xn)))(let((x17))(f3))) 答案是5,为什么x值没有从2更新到17?的魔力 以下是一个带有注释的版本: (let((x 2)) ;x与2绑定 (设((f(λ(n)(+xn))) ;f绑定到一个函数,该函数将'x'和一个数字'n'相加` (让((x17))(f3))) ; 将'x'绑定到17,在体内调用(f3)。 在第三行中,名称x绑定到17。但是前面的let已经绑定了f以添加2和一个新的数字n。这表明了同样

此代码:

(let((x2))(let((f(lambda(n)(+xn)))(let((x17))(f3)))
答案是5,为什么x值没有从2更新到17?

的魔力

以下是一个带有注释的版本:

(let((x 2))
;x与2绑定
(设((f(λ(n)(+xn)))
;f绑定到一个函数,该函数将'x'和一个数字'n'相加`
(让((x17))(f3)))
; 将'x'绑定到17,在体内调用(f3)。
在第三行中,名称
x
绑定到17。但是前面的
let
已经绑定了
f
以添加
2
和一个新的数字
n
。这表明了同样的想法:

(let((f(λ(n)(+2n)))
(让((x17))(f3)))

稍后将x绑定到17是不相关的,因为在编写f的环境中,x绑定到2。在计算函数调用时,请始终查看函数定义的环境,而不是函数调用的环境。

@YAwwad词法范围-定义lambda/函数时,x“捕获”lambda-2可见的x。因此,
f
是由这个函数体使用
x=2
定义的。非常感谢您的解释。这个问题出现在我的测验中