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))