gpt4 book ai didi

scheme - 放!并在 Scheme 中别名

转载 作者:行者123 更新时间:2023-12-02 17:08:41 27 4
gpt4 key购买 nike

我在理解似乎不一致的方案中的破坏性操作时遇到问题。即为什么下例中bar没有变化

(define foo '(a b))
(define bar foo)
(set! foo '(c d))
foo
>(c d)
bar
>(a b)

但是这会通过改变 foo 来改变 bar

(define foo '(a b))
(define bar foo)
(set-car! foo 'c)
foo
>(c b)
bar
>(c b)

如果我理解正确的话,在这两个例子中 bar 都指向它的汽车中的 foo,但是不知何故旧的 foo 在使用 set 时并没有改变!在第一个。我在任何地方都找不到关于发生这种情况的方式和原因的答案。

最佳答案

别名并不意味着 bar指向 foo ,而是bar指向与 foo 相同的事物指向此刻。如果图片有帮助,这里有方框图和箭头图来说明发生了什么。在你的设置代码之后,你有这个:

(define foo (list 'a 'b))
(define bar foo)

initial

现在,如果您运行第一次尝试,您将创建一个新列表并设置 foo在不改变任何关于 bar 的情况下指向它或引用的内容。

(set! foo (list 'c 'd))

first

但是如果您改为运行此代码,您将修改(共享)列表,这两个 foobar恰好指向,此刻。

(set-car! foo 'c)

second

关于scheme - 放!并在 Scheme 中别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50427983/

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