gpt4 book ai didi

c# - 从 Visual Studio 运行 Common Lisp 的 Shell 命令

转载 作者:太空宇宙 更新时间:2023-11-03 20:57:08 24 4
gpt4 key购买 nike

我想创建一个新进程,使用我的 C# 程序提供的参数运行 Common Lisp 程序。换句话说,我正在寻找这些程序之间的互操作性。现在我正在使用此代码在 cmd 中打开 clisp:

Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.UseShellExecute = false;
cmd.Start();

cmd.StandardInput.WriteLine("clisp");
cmd.StandardInput.WriteLine("(load " + '"' + "CargarNodos.lisp" + '"' + ")");
cmd.StandardInput.WriteLine("(cargar-cds)");
cmd.StandardInput.Flush();
cmd.StandardInput.Close();
cmd.WaitForExit();
Console.WriteLine(cmd.StandardOutput.ReadToEnd());

我可以加载我的 .lisp 文件,但是当我调用函数“cargar-cds”时程序崩溃(如果我直接从 cmd 运行 lisp 函数它工作正常)。我认为崩溃的 .lisp 部分是这段代码:

(SETQ NODOS () )

(defun cargar-cds()
(SETQ L (OPEN "adyacencias.txt" :IF-DOES-NOT-EXIST NIL))
(WHEN L
(LOOP FOR LINEA = (READ-LINE L nil) WHILE LINEA DO
(setq lst (loop for i = 0 then (1+ j)
as j = (position #\tab LINEA :start i)
collect (subseq LINEA i j)
while j ))
(formato-plano lst)
(setq NODOS (append NODOS (list LISTAF))))
)
NODOS)

最佳答案

Visual Studio doesn't show me an error, even when the c# code posted is inside a try/catch, the application running only freezes

错误是在另一个进程 clisp 中抛出的,因此您不能指望调用环境中的 try/catch 会捕获这些错误。卡顿大概是因为定义为交互的底层Lisp环境进入了调试器。您可能希望添加 -on-error exit(请参阅 https://clisp.sourceforge.io/impnotes/clisp.html)以禁用此行为。此外,您可以将进程的输出/错误重定向到 C# 进程的输出流。这应该可以帮助您检测底层流程中的错误。

It runs fine,but the code I posted is missing an apostrophe: (SETQ NODOS '() ).

这里的撇号是多余的,()'() 表示相同的值。

the complete code is quite large, it calls another function, but I think the main problem is in the one posted, maybe because it reads a text file.

您的首要任务应该是能够仅使用 clisp 解释器和/或尝试查看为什么它在两种情况下(从 C# 和直接)表现不同。也许您正在使用的相对路径名已解析为在不同上下文中不存在的文件。

但是很难测试您的 Lisp 代码:似乎还有其他部分没有详细说明。例如,LISTAF 仅被引用一次,其他部分也是如此。如果您可以尝试重新格式化代码以使其与有效代码完全相同(可能删除注释)并提供一个在 clisp 中有效但在 C# 中失败的最小示例,这可以帮助我们确定问题所在。

关于c# - 从 Visual Studio 运行 Common Lisp 的 Shell 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49374593/

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