2012-10-10 2 views
3

IronScheme 엔진을 "재설정"할 수있는 방법이 있습니까? 필자는 본질적으로 string.Eval()에 대한 연속 호출이 독립적으로 실행되도록 보장하려고합니다.C에서 IronScheme 엔진 재설정

예를 들어, 나는

"(define x 1.0) (+ x 5.0)".Eval()

후 다시 실행되고 싶어하고,

"(+ x 3.0)".Eval()

가 단독으로 실행 된 경우는 마찬가지로 실패 전화를 가지고있다.

더 나은 방법은 n 개의 동시 스레드 각각에 실행을위한 자체 독립 공간을 제공하는 것입니다.

답변

2

REPL을위한 두 가지 옵션이 있습니다 (라이브러리를 사용하면 이러한 코드를 작성할 수도 없습니다).

1 : 상호 작용 환경을 재설정하십시오.

(interaction-environment (new-interaction-environment))으로 수행 할 수 있습니다.

샘플 :

> (define x 5) (+ x 5) 
10 
> (interaction-environment (new-interaction-environment)) 
> (+ x 5) 
Unhandled exception during evaluation: 
&undefined 
&message: "attempted to use undefined symbol" 
&irritants: (x) 

2 : C#으로 붙잡고 새로운 상호 작용 환경을 만듭니다.

동시 환경을 원한다면이 옵션이 가장 좋습니다. 나는이 접근법을 IronScheme online evaluator에 사용한다.

샘플 :

"(define x 1.0) (+ x 5.0)".Eval(); 
var env = "(new-interaction-environment)".Eval(); 
"(+ x 3.0)".EvalWithEnvironment(env); 

가능한 해결 방법 :

Func<object> reset = 
    "(lambda() (interaction-environment (new-interaction-environment)))". 
    Eval<Callable>().Call; 

"(define x 1.0) (+ x 5.0)".Eval(); 

reset(); 

"(+ x 5.0)".Eval(); 
+1

큰 물건, 트릭을했다. 감사! – pcbulldozer

+0

@pcbulldozer : 문제 없음 :) 더 많은 문제가 있으면 알려주세요. – leppie