gpt4 book ai didi

Haskell interact() 截断我的输出?

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

我正在开发一个基本的 Haskell 程序,其中包含这行代码:

interact (unwords . (map pigLatin . words) )

但是,在将字符串数组传递给我的 pigLatin 函数之后,然后回绕成一个字符串,它总是截断我输入的最后一个单词。例如:

*HaskellPractice> getUserInput
this is broken
histay isway

出于某种原因,它没有打印出来。我在 Mac 上,所以我在调用交互之前在 getUserInput 中声明了以下选项:

hSetBuffering stdin LineBuffering
hSetBuffering stdout NoBuffering

我猜这是一个我还没有完全理解的小细节。感谢您的任何输入/帮助!OSFTW编辑:这是整个程序。

    import System.IO

pigLatin :: String -> String
pigLatin word = if ( (head word) `elem`['a', 'e', 'i', 'o', 'u'] )
then (word ++ "way")
else (tail word) ++ [(head word)] ++ "ay"

getUserInput = do
hSetBuffering stdin LineBuffering
hSetBuffering stdout NoBuffering

interact (unwords . (map pigLatin . words) )

最佳答案

这是我测试的程序:

import System.IO

pigLatin xs = "[" ++ xs ++ "]"

main = do
hSetBuffering stdin LineBuffering
hSetBuffering stdout NoBuffering
interact (unwords . (map pigLatin . words) )

这是 ghci session 的样子:

*Main> :main
this is line1
[this] [is] this is line2
[line1] [this] [is] [line2]<stdin>: hGetBuffering: illegal operation (handle is closed)

我输入:

this is line1
this is line2
(Control-d)

因此它不会截断输入 - 它只是在读取下一行(或遇到 EOF)之前不发出行中的最后一个单词。

如果你从 shell 运行它,你会得到你所期望的:

shell$ (echo this is line1; echo this is line2) | runhaskell  ./platin.hs

[this] [is] [line1] [this] [is] [line2]

关于Haskell interact() 截断我的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26898232/

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