gpt4 book ai didi

使用 let/set 设置 "remember"值的方案函数

转载 作者:行者123 更新时间:2023-12-04 16:24:44 24 4
gpt4 key购买 nike

我是 Scheme 的新手,并试图了解出现在函数中的某些值如何在多次使用中保持不变。取以下计数器:

(define count
(let ((next 0))
(lambda ()
(let ((v next))
(set! next (+ next 1))
v))))

我无法弄清楚(也没有在任何地方找到解释),这就是为什么 next不会每次都重置为 0 count用来。

最佳答案

这称为闭包。 next只有一个版本在整个节目中。

为了更清楚地说明这一点,请考虑以下程序:

(define next 0)

(define count
(lambda ()
(let ((v next))
(set! next (+ next 1))
v))))

现在很明显只有一个 next .

你写的版本不一样,因为你用过 let确保只有 lambda表情可以看 next .但仍然只有一个 next .如果你把它改成这个,而是:
(define count
(lambda ()
(let ((next 0))
(let ((v next))
(set! next (+ next 1))
v))))

然后你会创建一个新版本的 next每次都是因为 next的声明在 lambda 里面,这意味着每次 lambda 都会发生叫做。

关于使用 let/set 设置 "remember"值的方案函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10838122/

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