我想要一个功能,你输入一个像#34的字符串;你好我25岁!"并获得一个列表,如["你好","我","我","年","旧& #34]。所以它应该将所有大写字母都放在小写中并删除所有不是字母的内容。它应该只使用Data.List和Data.Char。 我知道我应该在字符串上使用单词,然后过滤它,但我不能弄明白(是的,我是Haskell的新手)。
toString :: String -> [String]
toString str = ...
答案 0 :(得分:2)
冒着回答作业问题的风险:
import Data.Char
toString :: String -> [String]
toString str = filter (not . null) . map (map toLower . filter isAlpha) . words $ str
Prelude Data.Char> toString "Hello I am 25 years old!"
["hello", "i", "am", "years", "old"]
答案 1 :(得分:0)
这将是我的工作流程:使用hoogle并使用您需要的类型签名。
关于如何获取单词列表:您需要一个“一二三”的函数foo
- > [“one”,“two”,“three”]所以它有类型签名:String -> [String]
。通过hoogle搜索确切的此类型签名,您会在结果列表中找到函数words
。
执行大写的方法通常会使用类型签名Char -> Char
。将其输入到hoogle中,您会在列表中的第三位找到toUpper
。
是一封信:Char - >布尔
然后打开ghci并试用这些功能。 IE:
ghci> :t toUpper -- will print the type of isUpper
<interactive>:1:1: Not in scope: ‘isUpper’
- 您需要导入Data.Char
ghci> import Data.Char
- 所以让我们导入Data.Char
ghci> toUpper "abc"
ghci> words "a quick brown fox"
ghci> :t map
ghci> map toUpper ["a", "quick"]
......等等
你仍然需要弄清楚如何将这些部分与地图和过滤器放在一起但是我建议你仔细查看这些部分。