Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/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 let和let的区别是什么,我不明白这个(球拍)_Racket_Let - Fatal编程技术网

Racket let和let的区别是什么,我不明白这个(球拍)

Racket let和let的区别是什么,我不明白这个(球拍),racket,let,Racket,Let,你得到4分 (define x 2) (let ((x 1) (y (+ x 1))) (+ x y)) 你得到3分 我不明白let是如何工作的。有人能解释一下吗,我是计算机科学新手,谢谢 (let* ((x 1) (y (+ x 1))) (+ x y)) 相当于: (let ((x 0) (z x)) ...) (let* ((x 0) (z x)) ...) 也许在匿名过程调用中,您可以看到,当对参数求值时,主体内的变量还不存在,但主体内的x是0,前面的x在整个主体中被隐

你得到4分

(define x 2)

(let ((x 1) (y (+ x 1))) (+ x y))
你得到3分

我不明白let是如何工作的。有人能解释一下吗,我是计算机科学新手,谢谢

(let* ((x 1) (y (+ x 1))) (+ x y))
相当于:

(let ((x 0) (z x))
  ...)
(let* ((x 0) (z x))
  ...)
也许在匿名过程调用中,您可以看到,当对参数求值时,主体内的变量还不存在,但主体内的
x
0
,前面的
x
在整个主体中被隐藏,但可以作为
z
访问

((lambda (x z) ...) 0 x)
这相当于:

(let ((x 0) (z x))
  ...)
(let* ((x 0) (z x))
  ...)
查看此图,您会立即看到
x
设置为
0
,并在
z
绑定时对任何其他
x
进行阴影处理

假设您要计算三角形的假设:

(let ((x 0))
  (let ((z x))
    ...))
您希望将其拆分一点,以便将其更改为
let*
,如下所示:

(let ((hypotenuse (sqrt (+ (square a) (square b)))))
  ...)
如果您想使用
let
,那么
sqa
sqb
将不可用! 经验法则是使用
let
并在需要引用绑定在同一
let
中的内容时将其更改为
let*
。注意不要对以后使用的变量进行阴影处理

相当于:

(let ((x 0) (z x))
  ...)
(let* ((x 0) (z x))
  ...)
也许在匿名过程调用中,您可以看到,当对参数求值时,主体内的变量还不存在,但主体内的
x
0
,前面的
x
在整个主体中被隐藏,但可以作为
z
访问

((lambda (x z) ...) 0 x)
这相当于:

(let ((x 0) (z x))
  ...)
(let* ((x 0) (z x))
  ...)
查看此图,您会立即看到
x
设置为
0
,并在
z
绑定时对任何其他
x
进行阴影处理

假设您要计算三角形的假设:

(let ((x 0))
  (let ((z x))
    ...))
您希望将其拆分一点,以便将其更改为
let*
,如下所示:

(let ((hypotenuse (sqrt (+ (square a) (square b)))))
  ...)
如果您想使用
let
,那么
sqa
sqb
将不可用! 经验法则是使用
let
并在需要引用绑定在同一
let
中的内容时将其更改为
let*
。注意不要对以后使用的变量进行阴影处理

相当于:

(let ((x 0) (z x))
  ...)
(let* ((x 0) (z x))
  ...)
也许在匿名过程调用中,您可以看到,当对参数求值时,主体内的变量还不存在,但主体内的
x
0
,前面的
x
在整个主体中被隐藏,但可以作为
z
访问

((lambda (x z) ...) 0 x)
这相当于:

(let ((x 0) (z x))
  ...)
(let* ((x 0) (z x))
  ...)
查看此图,您会立即看到
x
设置为
0
,并在
z
绑定时对任何其他
x
进行阴影处理

假设您要计算三角形的假设:

(let ((x 0))
  (let ((z x))
    ...))
您希望将其拆分一点,以便将其更改为
let*
,如下所示:

(let ((hypotenuse (sqrt (+ (square a) (square b)))))
  ...)
如果您想使用
let
,那么
sqa
sqb
将不可用! 经验法则是使用
let
并在需要引用绑定在同一
let
中的内容时将其更改为
let*
。注意不要对以后使用的变量进行阴影处理

相当于:

(let ((x 0) (z x))
  ...)
(let* ((x 0) (z x))
  ...)
也许在匿名过程调用中,您可以看到,当对参数求值时,主体内的变量还不存在,但主体内的
x
0
,前面的
x
在整个主体中被隐藏,但可以作为
z
访问

((lambda (x z) ...) 0 x)
这相当于:

(let ((x 0) (z x))
  ...)
(let* ((x 0) (z x))
  ...)
查看此图,您会立即看到
x
设置为
0
,并在
z
绑定时对任何其他
x
进行阴影处理

假设您要计算三角形的假设:

(let ((x 0))
  (let ((z x))
    ...))
您希望将其拆分一点,以便将其更改为
let*
,如下所示:

(let ((hypotenuse (sqrt (+ (square a) (square b)))))
  ...)
如果您想使用
let
,那么
sqa
sqb
将不可用! 经验法则是使用
let
并在需要引用绑定在同一
let
中的内容时将其更改为
let*
。注意不要对以后使用的变量进行阴影处理