我正在做一个练习,我需要创建一个名为allLow的函数,它具有allLow :: String -> String
的签名,它接受一个String并递归打印出所有大写字母。所以它会像,
> allLow "WhERe IS MY PEPPErONI PIZZa?"
"hera"
以下是我所拥有的:
allLow :: String -> String
allLow "" = ""
allLow (c:cs) = if lowerCase c = True then (c ++ (allLow cs))
我写了一个名为" lowerCase"的函数。 (Char - > Bool)如果给定的char是小写,则返回true。我假设我可以在每个"指数"中测试lowerCase的有效性。字符串并用那个方式抽出所有大写字母,但它不起作用。错误消息对我没有帮助。它说'' ='有一个解析错误。但Idk意味着什么。它不应该是==真。
答案 0 :(得分:5)
@ shree.pat18解决了这些问题,但我觉得有必要指出这是一个使用filter
函数的教科书案例...... Haskell惯用解决方案将是
allLow = filter isLower
答案 1 :(得分:4)
这里有点不对劲:
if
也需要else
。==
用于比较,=
用于分配。++
适用于2个列表,您要查找的是(:)
,它会将一个元素附加到列表中。正确的功能应如下所示:
allCaps :: String -> String
allCaps "" = ""
allCaps (c:cs) = if upperCase c == True then c : allCaps cs else allCaps cs
BTW,Data.Char
具有isUpper
功能,除非创建该功能是您练习的一部分。