32得票10回答
动态作用域的优点是什么?

我了解到静态作用域是做事情的唯一明智选择,而动态作用域只是由于解释器/编译器实现不佳而导致的工具,是魔鬼的产物。 然后我在 Common Lisp vs. Scheme 文章中看到这个代码片段: 既具有词法作用域,也具有动态作用域 标准仅支持词法作用域。 ...

32得票1回答
Clojure: binding和with-redefs的区别

clojure.core有宏bindings和with-redefs。通过查看clojuredocs.org上的文档字符串和示例,它们似乎做了非常相似的事情。它们之间有什么区别,我应该在哪些情况下使用哪个?

30得票3回答
动态作用域 - 深绑定 vs 浅绑定

我一直在尝试理解浅绑定和深绑定,但维基百科没有很好地解释清楚。如果我有以下代码,在使用动态作用域的语言中: a) 使用深度绑定,输出是什么? b) 使用浅绑定,输出是什么?x: integer := 1 y: integer := 2 procedure add x := x + y...

28得票7回答
能否在JavaScript中实现动态作用域而不使用eval?

JavaScript 的词法作用域意味着从函数内部访问的非局部变量会在该函数定义时解析为父级作用域中存在的变量。这与动态作用域形成对比,其中从函数内部访问的非局部变量会在调用函数的作用域中解析为存在的变量。 x=1 function g () { echo $x ; x=2 ; } func...

28得票1回答
Clojure和^:dynamic

我尝试理解动态变量和绑定函数,因此我尝试了这个(Clojure 1.3):user=> (defn f [] (def ^:dynamic x 5) (defn g [] (println x)) (defn h [...

18得票2回答
Emacs 24中变量作用域的新规则是什么?

Emacs 24现在拥有词法作用域的变量,当然它还有动态作用域的变量。既然现在两者都有了,我对于什么时候一个变量将具有哪种类型的作用域感到很困惑。存在一个名为lexical-binding的变量来控制何时启用词法绑定,我想我读过一些关于defvar现在声明动态作用域变量的内容,但总体上我感到相...

16得票4回答
如何在Python中创建动态作用域变量?

我正在将一些Lisp代码翻译成Python。 在Lisp中,您可以使用let结构并将引入的变量声明为特殊的,从而具有动态作用域。 (参见http://en.wikipedia.org/wiki/Dynamic_scope#Dynamic_scoping) 在Python中如何实现类似功能呢...

11得票4回答
如何解决emacs lisp闭包中的局部变量不足问题

我现在正在学习Emacs Lisp,参考手册是reference manual,同时也在从一本LISP书中学习Common Lisp。 来自Common Lisp书籍。 >> (setf power-of-two (let ((previous-power-of-tw...

11得票1回答
基于SICP的求值环境模型,词法作用域和动态作用域的区别

在SICP的3.2.2节中,执行以下代码片段:(define (square x) (* x x)) (define (sum-of-squares x y) (+ (square x) (square y))) (define (f a) (sum-of-squares (+ a...

10得票1回答
循环宏中的Common Lisp绑定

我想在循环中重新绑定一个特殊变量。通常情况下,可以使用 let 来实现这一点。(let ((*read-eval* nil)) (do-something-here)) 但由于loop宏拥有这些不错的with子句,我认为我可能可以在其中实现。表达式(macroexpand '(loop w...