リスト内に含まれる変数を逆参照して、その値を取得することは可能ですか?例えば:
(define one 1)
(define two 2)
(define list '(one two))
(display (list-ref list 0))
ここでは、をlist-ref
参照しone
、文字でdisplay
示しています。代わりに、同音異義語変数に含まれる値を逆参照one
できますか?one
リスト内に含まれる変数を逆参照して、その値を取得することは可能ですか?例えば:
(define one 1)
(define two 2)
(define list '(one two))
(display (list-ref list 0))
ここでは、をlist-ref
参照しone
、文字でdisplay
示しています。代わりに、同音異義語変数に含まれる値を逆参照one
できますか?one
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))
That's happening because the quoted list contains two symbols, one
and two
. Try the following:
(display (eval (list-ref list 0)))
To resolve that symbol.