gpt4 book ai didi

lambda - 计划中的关闭如何运作?

转载 作者:行者123 更新时间:2023-12-02 06:18:32 24 4
gpt4 key购买 nike

我在 Racket/DrScheme 中测试了以下代码:

(define (makem)
(define x 34)
(list (lambda () (set! x (+ x 1)) x)
(lambda () (set! x (+ x 1)) x))
)

(define f (car (makem)))
(define f2 (car (cdr (makem))))

> (f)
35
> (f2)
35 ; I thought this would give me 36
> (f)
36
> (f)
37
>

在函数调用中创建的每个 lambda 是否都会获得其作用域内每个变量的副本?它像某种隐式的 let 吗?我期望 lambda 具有某种指向它们创建范围的指针,使它们能够访问堆栈变量,但这告诉我事实并非如此,因为 f 和 f2 似乎有 x 的不同副本。到底发生了什么?

最佳答案

您调用了 (makem) 两次,因此您使用 x 的两个不同副本创建了两个不同的环境。如果您调用了 (makem) 一次,如下所示:

(define m (makem))
(define f (car m))
(define f2 (car (cdr m)))

那么ff2确实会共享同一个x,即m中的那个。

关于lambda - 计划中的关闭如何运作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5608325/

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