这可能是微不足道的事,但我 无法弄清楚哪条路是正确的。
假设我们有以下define
s
(define foo1 "asd")
(define foo2 "qwe")
(define foo3 "zxc")
(define foo4 "rte")
(define foo5 "qlx")
然后
(define foos
'(foo1 foo2 foo3 foo4 foo5))
我想要的是获得包含的列表
foo.
符号的值。
到目前为止,我正在做的是以下内容 (即在诡计中):
(define (foovals lst)
(map (λ (x) (eval x (interaction-environment))) lst))
(foovals foos)
返回我想要的列表:
("asd" "qwe" "zxc" "rte" "qlx")
我想问的是:
有替代方法吗?即无需
首先使用eval
?
答案 0 :(得分:1)
没有标准的方式来做你想要做的事情。但是,一些 Scheme实现提供了(特定于实现的)方法来访问模块/顶级变量。 (这些变量不提供对词汇(局部)变量的访问,只能访问顶级变量。)
以下是您如何执行此操作in Guile:
(use-modules (srfi srfi-26))
(define (foovals lst)
(map (cut module-ref (current-module) <>) lst))
请注意,module-ref
和current-module
是特定于Guile的,不适用于其他Scheme实现。