0

是否可以取消引用列表中包含的变量以获取其值?例如:

(define one 1)
(define two 2)

(define list '(one two))

(display (list-ref list 0))

此处list-ref引用one, 并以字母display表示one。可以改为one取消引用同名变量包含的值吗?

4

2 回答 2

6

eval 绝对可以解决这个问题……但是和大多数 eval 适用的情况一样,它是一把大而危险的锤子。

Matthew Flatt 关于这个主题的博文已成为首选解释:

http://blog.racket-lang.org/2011/10/on-eval-in-dynamic-languages-generally.html

以下是在 Racket 中不使用 eval 的方法。除去杂物,“dict-ref”可以在“关联列表”中找到一个命名元素(或多个元素)。

#lang racket

(define data
  '((one 1)
    (two 2)))


(define wanted-list '(two one))

;; evaluates to '((2) (1)):
(for/list ([wanted wanted-list])
  (dict-ref data wanted))
于 2012-06-05T21:30:58.983 回答
1

发生这种情况是因为引用的列表包含两个符号onetwo. 尝试以下操作:

(display (eval (list-ref list 0)))

解决该符号。

于 2012-06-05T21:00:47.203 回答