Scheme 列表中的取消引用变量

Scheme 列表中的取消引用变量,scheme,Scheme,是否可以取消引用列表中包含的变量以获取其值?例如: (define one 1) (define two 2) (define list '(one two)) (display (list-ref list 0)) 此处列出了对one的引用,而display以字母显示one。可以改为one取消对同名变量包含的值的引用吗?发生这种情况是因为引用的列表包含两个符号,one和two。请尝试以下操作: (显示(eval(列表参考列表0))) 来解决这个符号。Eval肯定能解决这个问题。。。但是,

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

(define one 1)
(define two 2)

(define list '(one two))

(display (list-ref list 0))

此处
列出了对
one
的引用,而
display
以字母显示
one
。可以改为
one
取消对同名变量包含的值的引用吗?

发生这种情况是因为引用的列表包含两个符号,
one
two
。请尝试以下操作:

(显示(eval(列表参考列表0)))


来解决这个符号。

Eval肯定能解决这个问题。。。但是,就像eval适用的大多数情况一样,它是一个巨大而危险的锤子

马修·弗拉特(Matthew Flatt)关于这一主题的博客文章已成为一个热门的解释:

下面是你如何在没有球拍评估的情况下做到这一点。剥去积垢,“dict ref”可以找到一个命名的 “关联列表”中的一个或多个元素


请注意,如果您实际上不想/不需要符号列表,您可以只做
(定义我的列表(列表一二))(显示列表参考我的列表0)
。一般来说,您应该避免在这样的简单情况下使用
eval
,原因请参见下面的博客文章John链接。
#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))