Haskell 哈斯克尔正面字母
所以我在为未来教育自己Haskell 哈斯克尔正面字母,haskell,Haskell,所以我在为未来教育自己 firstLetter :: IO String firstLetter = do x <- getChar if (x == ' ') then return (show x) else firstLetter 试试这个。库函数lines将为您将输入拆分为行,因此剩下的就是从列表中的每个字符串中提取第一个字符,直到一个字符串为空。空字符串只是一个空列表,因此您可以检查它以结束对字符串列表的递归 firstLette
firstLetter :: IO String
firstLetter = do
x <- getChar
if (x == ' ')
then return (show x)
else firstLetter
试试这个。库函数
lines
将为您将输入拆分为行,因此剩下的就是从列表中的每个字符串中提取第一个字符,直到一个字符串为空。空字符串只是一个空列表,因此您可以检查它以结束对字符串列表的递归
firstLetters :: [String] -> String
firstLetters (x:xs)
| null x = []
| otherwise = head x : firstLetters xs
main = do
contents <- getContents
putStrLn . firstLetters . lines $ contents
firstLetters::[String]->String
第一个字母(x:xs)
|空x=[]
|否则=标题x:第一个字母xs
main=do
内容你看到了吗?这将帮助你消除IO,这似乎总是让事情对我来说更简单,希望你也一样
这将它简化为一个读取字符串并返回字符串的问题
这是一次艰难的尝试getLines
获取一个字符串,将其拆分为行
并使用它们(takeWhile
),直到它遇到一个包含单个空格的行(我不确定您的结束条件,正如另一张海报所说,使用null
将在第一个空列表处停止)。然后它遍历这些行并获取每行的第一个字符(使用映射头)
提示:空格字符不是换行符。我如何创建一个列表,在其中添加每一行的第一个字母?因为它看起来更性感,我已经将其切换为无点样式@SummerBreak,代码确实添加了每一个第一行字母<代码>映射头
检查列表中的所有项目,选择第一个字符并返回结果。但是,在插入以“”开头的行后,如何返回所有字母?这是类似的。我想您应该使用dropWhile
而不是takeWhile
。这将忽略元素,直到它到达第一行,即“”
firstLetters :: [String] -> String
firstLetters (x:xs)
| null x = []
| otherwise = head x : firstLetters xs
main = do
contents <- getContents
putStrLn . firstLetters . lines $ contents
getLines :: String -> String
getLines = map head . takeWhile (/= " ") . lines
main :: IO ()
main = interact getLines