【发布时间】:2018-11-29 13:00:36
【问题描述】:
我想向用户询问一个句子,然后将句子返回,但单词位于不同的行。
例如,如果用户输入"hello I am tall",则计算机返回:
hello,
I
am
tall
我试着开始了一点,但不知道一个函数或什么我可以用来尝试分隔句子。到目前为止我的代码:
displayWords ::IO ()
displayWords = do putStr "Please enter a line of text"
x <- getLine
mapM print x
我得到错误:
无法将类型“[()]”与“()”匹配
编辑:还有一点……使用mapM_ print (words x) 可以解决我想要的问题,但是有没有办法在不带引号的情况下打印它?
EDIT2:还有一件事...... cmets 中的某个人帮助回答了之前的编辑,但如果我将其格式更改为
displayWords:: String -> IO Int()
displayWords s = do
mapM_ putStrLn s
return (length s)
我得到了错误
无法将类型“Char”与“[Char]”匹配
putStrLn 怎么在这里不起作用?
【问题讨论】:
-
改用
mapM_ print (words x) -
有没有办法去掉引号?
-
去掉引号,
words $ filter (/='"') x -
每个帖子一个问题,拜托。用新鲜的问题发新鲜的帖子不被认为是不礼貌的,不用担心;但先花一点时间尝试自己解决。 (半小时似乎不足以尝试自己解决两个后续问题。)
-
print调用show来生成一个字符串值,但您已经有了字符串值,这就是您得到引号的原因。使用putStrLn而不是print。