Haskell换行,怎么样?
Haskell newline, how?
我遇到了以下代码的问题。它应该是一种字典,首先询问德语单词,而不是巴伐利亚单词,并将两者都保存在 .txt 文件中。然后是下一对的换行符。当您停止输入新单词时程序终止。更新:
换行符“/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()
这是我的做法。
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 检查空字符串而不是与空列表进行比较。
根据 chepner 的评论进行了编辑。
我遇到了以下代码的问题。它应该是一种字典,首先询问德语单词,而不是巴伐利亚单词,并将两者都保存在 .txt 文件中。然后是下一对的换行符。当您停止输入新单词时程序终止。更新: 换行符“/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()
这是我的做法。
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 检查空字符串而不是与空列表进行比较。
根据 chepner 的评论进行了编辑。