gpt4 book ai didi

binding - 方案和浅绑定(bind)

转载 作者:行者123 更新时间:2023-12-04 05:10:02 27 4
gpt4 key购买 nike

 (define make (lambda (x) (lambda (y) (cons x (list y)))))

(let ((x 7)
(p (make 4)))
(cons x (p 0)))

我是 Scheme 和函数式程序的新手,所以我在浏览程序时有点笨拙,但我知道如果我使用深度绑定(bind),这个程序将返回 (7 4 0)。说得通。这个程序使用浅绑定(bind)会做什么?我知道这听起来可能很愚蠢,但是与 cons 一致的 p 是重新定义吗?所以在那种情况下,我们会返回 (7 0)?

基本上,我理解 deep v. shallow binding 的概念,但我觉得在看 Scheme 时我把它搞混了,因为我对它并不熟悉。

最佳答案

深层或浅层绑定(bind)是一种实现技术,无法从程序内部观察到。程序员的区别在于词法和动态范围规则之间,但两者都可以用这两种技术中的任何一种来实现(即一个概念与另一个无关)。

深或浅是指选择堆栈帧来保存给定的外部范围变量的绑定(bind)。在深度绑定(bind)中,需要访问一系列帧,直到输入正确的帧来保存变量的记录;在浅层绑定(bind)中,所有绑定(bind)都存在于一个浅层环境中。另请参阅“rerooting”(仅在词法范围的浅绑定(bind)实现的上下文中才有意义)。

对于您的具体问题,根据词法范围规则,您的代码将返回 (7 4 0)在动态下 - (7 7 0) , 因为调用 ((lambda(y) (list x y)) 0)x=7 的动态范围内完成绑定(bind)(作为旁注,(cons x (list y))(list x y) 相同):

x = 7
p = (lambda (y) (list x y)) ; x=4 is unused, in p=(make 4)
(cons 7 (p 0)) == (list 7 7 0) ; 'x' in this line and in lambda body for p
; both refer to same binding that is
; in effect, i.e. x=7

NB 相同的术语(深/浅绑定(bind))现在在其他语言中使用完全不同的含义(它们确实与那里的范围规则有关),我不想完全理解。这个答案是在 Scheme 的上下文中给出的。

引用: Shallow Binding in LISP 1.5贝克,亨利 G. Jr.,1977 年。

关于binding - 方案和浅绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15013254/

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