gpt4 book ai didi

Frege putStr 刷新行为与 Haskell 或 Java 不同

转载 作者:行者123 更新时间:2023-12-05 00:58:46 27 4
gpt4 key购买 nike

假设您使用 putStr 的组合提示用户输入和 getLine :

main = do
putStrLn "A line with line termination" -- printed correctly
putStr "A line without line termination, e.g. to prompt for input: " -- NOT printed
line <- getLine
putStrLn ("You entered: " ++ line)

与 Haskell 相比,Frege 不打印第二行(使用 putStr 而不是 putStrLn)。这种缺少冲洗的行为是有意的吗?

如果 Frege 偏离 Haskell 的行为,我会假设它模仿 Java 的行为。一个概念上类似的例子:
public static void main(String[] args) {
System.out.println("A line with line termination");
System.out.print("A line without line termination, e.g. to prompt for input: ");
String line = new java.util.Scanner(System.in).nextLine();
System.out.println("You entered: " + line);
}

然而,这表现得像 Haskell 变体,即 System.out.print立即脸红。

提前感谢您的任何反馈!

PS:(错误?)行为可以用最新的 Eclipse-Plugin 以及 IntelliJ/Gradle 重现。

最佳答案

您的 Java 代码使用 System.out,它是一个 PrintStream。
Frege 代码使用 PrintWriter。

这两个类在冲洗方面的工作有点不同。来自 PrintWriter 的文档:

Unlike the {@link PrintStream} class, if automatic flushing is enabled it will be done only when one of the println, printf, or format methods is invoked, ..



因此,对于您的 Frege 代码,您必须添加 stdout.flushprint让它立即出现。

在这方面,请随意提出问题,要求将 Frege 与 Haskell 行为保持一致。 (我们可以保持 print 不变,但让 putStr 自动添加 flush。)

关于Frege putStr 刷新行为与 Haskell 或 Java 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31742423/

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