gpt4 book ai didi

c# - 在 C# 中重置 IronScheme 引擎

转载 作者:行者123 更新时间:2023-11-30 17:09:36 24 4
gpt4 key购买 nike

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

比如我想被执行

"(定义 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 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();

关于c# - 在 C# 中重置 IronScheme 引擎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12829066/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com