gpt4 book ai didi

count - 方案:为什么 'set!' 修改局部变量 'let' ?

转载 作者:行者123 更新时间:2023-12-02 21:51:53 25 4
gpt4 key购买 nike

我已经搜索了一段时间,但找不到合适的问题,所以我将其发布。我希望这还没有发布。

我明白 set!let 的作用,但我不明白为什么 set! 可以修改 set! 的局部变量 >让并永远保留该值。例如:

(define count
(let ((cont 0))
(lambda ()
(set! cont (+ cont 1))
cont)))

如果我们评估(count)几次,我们会看到结果是

> (count)
1
> (count)
2
> (count)
3
>

...等等。但是,据我了解, cont 是一个局部变量,那么为什么它保留该值呢?为什么每次调用该函数时不将其设置为 0?

嗯,就是这样:)提前致谢!

PS:请原谅我的英语*o*

最佳答案

发生这种情况是因为 count 正在创建 closure它“存储”cont 的值,即使在过程调用之间它也会记住它的值。请注意,在将 cont 定义为变量之后,lambda 被分配给 count 名称​​,并且这样做lambdacont 上关闭。它不再是一个本地变量,而是一个在过程外部定义的变量,并在其所有调用之间共享,“记住”它在上次调用中具有的值。

为了进行比较,看看具有真正局部变量的过程的外观:

(define count
(lambda ()
(let ((cont 0))
(set! cont (+ cont 1))
cont)))

上面的代码总是返回1,将其与问题中的过程进行比较。

关于count - 方案:为什么 'set!' 修改局部变量 'let' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18471157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com