C# 在C语言中重置IronScheme引擎#

C# 在C语言中重置IronScheme引擎#,c#,.net,ironscheme,C#,.net,Ironscheme,有没有办法“重置”IronScheme引擎? 我的主要目标是确保对string.Eval()的连续调用独立执行 例如,我想被执行 “(定义x1.0)(+x5.0)”.Eval() 然后重新设置,并进行通话 “(+x3.0)”.Eval() 如果它是自己执行的,就会失败 更好的方法是为n个并发线程中的每个线程提供自己独立的执行空间。对于REPL,您有两个选项(对于库,它甚至不允许您编写这样的代码;p) 1:重置交互环境。 这可以通过(交互环境(新交互环境))完成 样本: > (define

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

例如,我想被执行

“(定义x1.0)(+x5.0)”.Eval()

然后重新设置,并进行通话

“(+x3.0)”.Eval()

如果它是自己执行的,就会失败


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

对于REPL,您有两个选项(对于库,它甚至不允许您编写这样的代码;p)

1:重置交互环境。

这可以通过
(交互环境(新交互环境))
完成

样本:

> (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#中保持住。

如果您想创建并发环境,这可能是最好的选择。我使用这种方法来解决问题

样本:

"(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();
Func重置=
“(lambda()(交互环境(新交互环境)))”。
Eval()调用;
“(定义x1.0)(+x5.0)”.Eval();
重置();
“(+x5.0)”.Eval();
@pcbulldozer:没问题:)如果您有更多问题,请告诉我。