gpt4 book ai didi

java - 通过Java使用cmd执行Haskell文件

转载 作者:行者123 更新时间:2023-12-01 12:02:56 24 4
gpt4 key购买 nike

我正在开发一个项目,我需要通过 cmd 编译和执行 Haskell 文件,我用 Java 启动/控制该文件。这就是现在的样子:

public class CmdTest {
public static void main(String[] args) throws Exception {
ProcessBuilder builder = new ProcessBuilder( "cmd.exe", "/c", "cd \"C:\\Users\\ray\\Documents\\Project\" && ghci ", "test.hs");
builder.redirectErrorStream(true);
Process p = builder.start();
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while (true) {
line = r.readLine();
if (line == null) { break; }
System.out.println(line);
}
}
}

到目前为止一切顺利。然后我尝试通过直接在“test.hs”后面编写它来执行我的实际haskell函数(testfunction),并且我尝试编写“...”test.hs“,”testfunction 2“);”还有更多方式,但当我添加其中任何一个时,我无法加载它。请告诉我如何修复它并使其运行。感谢您的宝贵时间

最佳答案

假设您的文件 test.hs 看起来像

module Main where

testfunction :: Int -> IO ()
testFunction n = print n

main :: IO ()
main = do
testfunction 2

然后您可以使用 runhaskell 命令从 Java 中调用它,而无需编译:

public class CmdTest {
public static void main(String[] args) throws Exception {
ProcessBuilder builder = new ProcessBuilder(
"cmd.exe",
"/c",
"cd \"C:\\Users\\ray\\Documents\\Project\" && runhaskell ",
"test.hs");
builder.redirectErrorStream(true);
Process p = builder.start();
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while (true) {
line = r.readLine();
if (line == null) { break; }
System.out.println(line);
}
}
}

需要注意的重要部分:

你的Haskell文件必须明确是module Main或者没有模块声明(它是隐式的Main,但显式总是好的),它必须有一个名为 main 的函数,其类型为 IO (),并使用 runhaskell 命令。 ghci 命令用于运行交互式 REPL,与 IPython 或 irb 非常相似,它并不意味着将源文件作为脚本运行。您也不能只指定要运行 .hs 文件中的哪个函数,您的文件必须是可执行文件。您不会期望这适用于 Java

// SayHello.java
public class SayHello {
public static void sayHello(String name) {
System.out.print("Hello, ");
System.out.println(name);
}
}

然后运行它

> java SayHello.java SayHello.sayHello "World"

您必须首先编译它并从某个 public static void main(String[] args) 调用目标函数。 Haskell 也是如此,您必须有一个 main 函数来运行任何东西,而 runhaskell 将简单地一步编译并运行您的代码。

关于java - 通过Java使用cmd执行Haskell文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27862886/

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