下面的代码有问题。它应该是一种字典,它首先要求一个德语单词,而不是一个巴伐利亚词,并将两者保存在一个.txt文件中。接下来的一对是newLine。当您停止输入新单词时,程序将终止。更新: newLine "/n“不起作用。我该怎么解决呢?
main :: IO ()
main = do
putStrLn "Deutsches Wort: "
deutsch <-getLine
if deutsch /= []
then do
putStrLn "Bayerisches Wort: "
bayerisch <- getLine
appendFile "woerterbuch.txt" (deutsch++ " "++ bayerisch++ " /n")
putStrLn (deutsch ++ " ist auf bayerisch " ++ bayerisch)
main
else return()发布于 2016-04-22 14:44:06
我会这么做的。
import System.IO
import System.Environment
import Control.Monad
main :: IO ()
main = do
(fileName:_) <- getArgs
unless (null fileName) $
withFile fileName WriteMode makeDictionary
where
makeDictionary :: Handle -> IO()
makeDictionary h = do
putStrLn "Deutsches Wort: "
deutsch <-getLine
if not . null $ deutsch
then do
hPutStr h $ deutsch++" "
putStrLn "Bayerisches Wort: "
bayerisch <- getLine
hPutStrLn h bayerisch
putStrLn (deutsch ++ " ist auf bayerisch " ++ bayerisch)
makeDictionary h
else return()修改后的版本看起来应该可以工作,但是这里的优点是文件不会被反复打开和关闭。虽然我不确定GHC是否足够聪明让它在你的情况下保持开放。此外,与空列表相比,通常更好的方法是检查空字符串是否为null。
根据切普纳的评论编辑。
https://stackoverflow.com/questions/36795438
复制相似问题