Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scheme 不使用eval读取符号值_Scheme_Eval - Fatal编程技术网

Scheme 不使用eval读取符号值

Scheme 不使用eval读取符号值,scheme,eval,Scheme,Eval,这可能是一件非常琐碎的事情,但我 不知道该走哪条路 假设我们有以下定义 (define foo1 "asd") (define foo2 "qwe") (define foo3 "zxc") (define foo4 "rte") (define foo5 "qlx") 然后 (define foos '(foo1 foo2 foo3 foo4 foo5)) 我想要的是得到一个包含 foo.符号的值 到目前为止,我正在做以下工作 (即欺骗): 返回我想要的列表: ("asd" "qwe

这可能是一件非常琐碎的事情,但我 不知道该走哪条路

假设我们有以下定义

(define foo1 "asd")
(define foo2 "qwe")
(define foo3 "zxc")
(define foo4 "rte")
(define foo5 "qlx")
然后

(define foos 
  '(foo1 foo2 foo3 foo4 foo5))
我想要的是得到一个包含
foo.
符号的值

到目前为止,我正在做以下工作 (即欺骗):

返回我想要的列表:

("asd" "qwe" "zxc" "rte" "qlx")
我想问的是: 有没有其他办法?也就是说,不必
首先使用
eval

没有标准的方案方法来完成您想要做的事情。然而,一些方案实现提供了(特定于实现的)访问模块/顶级变量的方法。(它们不提供对词法(本地)变量的访问,只提供顶级变量。)

以下是您可以如何做到这一点:

(使用模块(srfi srfi-26))
(定义(foovals lst)
(地图(切割模块参考(当前模块))lst)

请注意,
module ref
current module
是特定于Guile的,在其他方案实施中不起作用。

您不使用
eval
的动机是什么?它的设计正是为了满足您的需求。另外,它也是RnRS的一部分。@GoZoner我主要想知道我是否使用了正确的方法,或者是否有其他(更合适的)方法来实现它(假设我不能修改初始的
定义
s)。例如,获取符号值的替代方法。
eval
的限制是只需要表达式才能工作。因此,
(eval'(define foo“abc”)…)
是不能指望的(因为定义不是一个表达式)。
(define foos(list foo1 foo2 foo3 foo4 foo5))
怎么了?@JoshuaTaylor最初的列表是引用的(我也对符号名称感兴趣,例如符号名称->文件名,符号值->“处理后的内容”)。当然你是绝对正确的!我总是可以将两个列表(带引号和不带引号)和
zip
放在一起(而
symbol->string
是第一个),然后使用它:)我确实怀疑还有其他几种方法可以获取
列表((symbol name symbol value)…)
我不知道/想不起来(注意,
foovals
实际上是
(符号名称符号值)
生成部分的一部分)。我知道这是OP代码的诡计版本,但我在问题中没有看到任何解释
问题的东西(定义foos(列出foo1 foo2 foo3 foo4 foo5))
。这不是一个更简单的解决方案吗?
("asd" "qwe" "zxc" "rte" "qlx")
(use-modules (srfi srfi-26))
(define (foovals lst)
  (map (cut module-ref (current-module) <>) lst))