2012-05-01 4 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)에서 Rocket의 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' 솔루션과 달리). –

관련 문제