2012-05-01 6 views
5

文字列を読み込んで文字列の内容を評価するeval関数を取得する方法を理解しようとしています。ラケットで文字列を評価する方法

現在、私は

> (eval '(+ 1 2)) 
    3 

ことを知っているが、私はラケットを使用している精通していませんよ。だから私はこれを行うことができるようにそれを取得しようとしています:

> (eval "(+ 1 2)") 
    3 

有用なリソースへのアドバイスやリンクがあれば幸いです。

+1

私は、これはあなたが欲しいものだと思う:http://stackoverflow.com/q/318952/535275 –

+3

また、ほとんどの慣用的なラケットコードevalの使用を避けます。たぶんあなたが本当に必要な例があるかもしれませんが、[この記事](http://blog.racket-lang.org/2011/10/on-eval-in-dynamic-languages-generally)を読んでみてください。 html)のRacketでのevalの使用について –

答えて

13

readopen-input-stringを一緒に使用します。これと同じように:

-> (eval (read (open-input-string "(+ 1 2)"))) 
3 

あなたが使用することもできwith-input-from-string

-> (with-input-from-string "(+ 1 2)" 
    (lambda() (eval (read)))) 
3 
+7

'(eval(call-with-input-string"(+ 1 2) "read))'を使うのが好きです。どうして? 1.文字列ポートは 'eval'の前に自動的に閉じられます(' open-input-string'の解とは異なります;文字列ポートの場合、Guile ;-)を使用している場合を除き) 、 それでも); 2.流体/パラメータを使用しません( 'with-input-from-string'ソリューションとは異なります)。 –

関連する問題