String 用Haskell阅读行和反转文本
我的程序应执行以下操作:String 用Haskell阅读行和反转文本,string,haskell,text,io,functional-programming,String,Haskell,Text,Io,Functional Programming,我的程序应执行以下操作: 从文件中读取行 对于每一行,颠倒每个单词的文本(“蝙蝠猫帽”变成“tab tac tah”) 打印出相反的文本 但是它不起作用,作为一个哈斯克尔的新手,我不理解其中的错误 这是我的密码: main = do content <- readFile "test.txt" let linesList = lines content reverseLines reverseWords :: String -> String rever
- 从文件中读取行
- 对于每一行,颠倒每个单词的文本(“蝙蝠猫帽”变成“tab tac tah”)
- 打印出相反的文本
main = do
content <- readFile "test.txt"
let linesList = lines content
reverseLines
reverseWords :: String -> String
reverseWords = unwords . map reverse . words
reverseLines :: [String] -> IO ()
reverseLines inputList = do
if null inputList
then return ()
else do
line <- inputList!!0
if null line
then return ()
else do
putStrLn $ reverseWords line
reverseLines . tail inputList
main=do
内容字符串
reverseWords=unwords。地图倒过来。话
反向线::[String]->IO()
反向线输入列表=do
如果输入列表为null
然后返回()
否则会
行IO()'
在“do”块的stmt中:反向线
在表达式中:
执行{content首先,main
函数中的最后一行是[String]->IO()类型,您需要它是IO(),因此您实际上需要将字符串列表传递给它。下面是一种执行请求的方法:
main :: IO ()
main = do
content <- readFile "test.txt"
let linesList = lines content
reverseLines linesList
reverseWords :: String -> String
reverseWords = unwords . map reverse . words
reverseLines :: [String] -> IO ()
reverseLines = mapM_ (putStrLn . reverseWords)
我也修改了你的版本,只做了很少的修改,但请记住,这并不是Haskell真正的方法
main = do
content <- readFile "test.txt"
let linesList = lines content
reverseLines linesList
reverseWords :: String -> String
reverseWords = unwords . map reverse . words
reverseLines :: [String] -> IO ()
reverseLines inputList = do
if null inputList
then return ()
else do
let line = head inputList
if null line
then return ()
else do
putStrLn $ reverseWords line
reverseLines $ tail inputList
main=do
内容字符串
reverseWords=unwords.map reverse.words
反向线::[String]->IO()
反向线输入列表=do
如果输入列表为null
然后返回()
否则会
let line=头输入列表
如果为空行
然后返回()
否则会
putStrLn$reverseWords行
反向线$tail输入列表
当您看到一条新的错误消息时,首先应该仔细阅读它,如果您不能理解它的含义,请执行以下操作。
reverseLines2 :: [String] -> IO ()
reverseLines2 [] = return ()
reverseLines2 (x:xs) = do
putStrLn (reverseWords x)
reverseLines2 xs
main = do
content <- readFile "test.txt"
let linesList = lines content
reverseLines linesList
reverseWords :: String -> String
reverseWords = unwords . map reverse . words
reverseLines :: [String] -> IO ()
reverseLines inputList = do
if null inputList
then return ()
else do
let line = head inputList
if null line
then return ()
else do
putStrLn $ reverseWords line
reverseLines $ tail inputList