【发布时间】:2014-11-12 22:54:12
【问题描述】:
我正在开发一个包含这行代码的基本 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) )
【问题讨论】:
-
你能发布一个完整的程序来复制这个问题吗?当您从 ghci 运行时,您是否在输入的末尾键入了 Control-d?
-
感谢您的关注!我更新了OP。是的,我正在按下 control-d
标签: haskell io functional-programming