在C#中重置IronScheme引擎

有没有办法“重置”IronScheme引擎? 我本质上的目标是确保连续调用string.Eval()是独立执行的。

例如,我想要执行

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

然后重置,并接听电话

"(+ x 3.0)".Eval()

如果它被自己执行就会失败。

更好的方法是为每个n个并发线程提供一个独立的空间来执行。

REPL有2个选项(使用库甚至不允许你编写这样的代码; p)。

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在线评估程序 。

样品:

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

可能的方法:

 Func reset = "(lambda () (interaction-environment (new-interaction-environment)))". Eval().Call; "(define x 1.0) (+ x 5.0)".Eval(); reset(); "(+ x 5.0)".Eval();