列表中的解引用变量

dav*_*ide 0 scheme

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

(define one 1)
(define two 2)

(define list '(one two))

(display (list-ref list 0))
Run Code Online (Sandbox Code Playgroud)

这里list-ref引用one并以字母display显示one.可以改为one取消引用同音变量包含的值吗?

Joh*_*nts 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))
Run Code Online (Sandbox Code Playgroud)