gpt4 book ai didi

scope - 方案 - 动态作用域和无限循环

转载 作者:太空宇宙 更新时间:2023-11-03 18:43:46 25 4
gpt4 key购买 nike

我看了一本关于方案的书,里面有下一个例子:

(define map
(lambda (f s)
(if (null? s)
'()
(cons (f (car s))
(map f (cdr s)))))

(map (lambda (s)
(set! s '(1 2 3 4))
'hello)
'(a b c d))

它说在动态范围内,我们将进入无限循环。但为什么?据我了解,在我们申请之后,我们到达 map

f = (lambda (s)
(set! s '(1 2 3 4))
'hello)

和 s= '(a b c d)。现在,对于第一次运行,我们将在 (car '(a b c d) 上应用 f:

((lambda (s)
(set! s '(1 2 3 4))
'hello)
(car '(a b c d)))

现在,它将 a 更改为 (1 2 3 4)。等等..这里的循环在哪里?

最佳答案

我觉得作者的意思是f(car s)执行后,s的值会是'(1 2 3 4),所以 (cdr s) 的值将是 '(2 3 4),所以你将调用 (map f '(2 3 4)) 无限次。

但是,我认为这不是动态范围的准确描述。由于 s 是 lambda 的参数(因此不是自由变量),只有该参数应该受到 set!s map 函数的 > 应该不受影响。所以不应该有无限循环——不管你是否使用动态范围。如果我将代码转换为 elisp(动态作用域),代码实际上不会导致无限循环。所以我想说你的书说使用动态作用域会出现无限循环是错误的。

关于scope - 方案 - 动态作用域和无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8616514/

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