列表中的解引用变量

时间:2012-06-05 20:56:10

标签: scheme

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

(define one 1)
(define two 2)

(define list '(one two))

(display (list-ref list 0))

此处list-ref引用onedisplay以字母显示one。可以改为one取消引用同音变量包含的值吗?

2 个答案:

答案 0 :(得分: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))

答案 1 :(得分:1)

这种情况正在发生,因为引用的列表包含两个符号,onetwo。请尝试以下方法:

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

解决该问题。