我已经编写了一个基本的递归函数:
bibliography_rec :: [(String, String, Int)] -> String
bibliography_rec [] = ""
bibliography_rec (x:xs) = (citeBook x) ++ "\n" ++ (bibliography_rec xs)citeBook只是将元组重新格式化为字符串。
当使用此输入运行时:
ghci> bibliography_rec [("Herman Melville", "Moby Dick", 1851),("Georgy Poo", "Alex Janakos", 1666)]它产生:
"Moby Dick (Herman Melville, 1851)\nAlex Janakos (Georgy Poo, 1666)\n"我需要逐行打印,所以我使用了以下代码:
bibliography_rec (x:xs) = putStr ((citeBook x) ++ "\n" ++ (bibliography_rec xs))我的问题是我的输出需要是String类型,而不是IO ()类型
我已经被困在这条路上太久了,所以任何帮助都是很棒的!
发布于 2016-01-12 04:25:35
看起来您已经在那里了,您只需要对字符串执行putStrLn操作,而不是对其执行print操作(这是ghci默认执行的操作)。print首先通过show运行参数,因此它将引用转义字符,如"\n"。
ghci> putStrLn $ bibliography_rec [...]https://stackoverflow.com/questions/34730326
复制相似问题