gpt4 book ai didi

variables - 普通 Lisp : How do I set a variable in my parent's lexical scope?

转载 作者:行者123 更新时间:2023-12-04 14:30:46 24 4
gpt4 key购买 nike

我想定义一个可以在其调用范围内设置变量的函数(不是宏)。
我努力了:

(defun var-set (var-str val)
(let ((var-interned
(intern (string-upcase var-str))))
(set var-interned val)
))

(let ((year "1400"))
(var-set "year" 1388)
(labeled identity year))
由于范围规则,这不起作用。任何“黑客”来实现这一点?
在python中,我可以使用
previous_frame = sys._getframe(1)
previous_frame_locals = previous_frame.f_locals
previous_frame_locals['my-var'] = some_value
lisp的任何等效API?

最佳答案

您不能这样做,因为编译后该变量甚至可能在任何有意义的意义上都不存在。
例如,尝试通过查看 (disassemble (lambda (x) (+ x 4))) 的输出来弄清楚你在哪里
将写入 x 的新值.
你必须告诉调用者和被调用者(在编译时!)变量是 special 。 :

(defun set-x (v)
(declare (special x))
(setq x v))
(defun test-set (a)
(let ((x a))
(declare (special x))
(set-x 10)
x))
(test-set 3)
==> 10
Dynamic and Lexical variables in Common Lisp有关词法与动态绑定(bind)的更多详细信息。

关于variables - 普通 Lisp : How do I set a variable in my parent's lexical scope?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69334197/

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