Haskell 递归打印出小写字母
我在做一个练习,我需要做一个名为allLow的函数,它的签名是Haskell 递归打印出小写字母,haskell,Haskell,我在做一个练习,我需要做一个名为allLow的函数,它的签名是allLow::String->String,它接受一个字符串并递归地打印出所有的大写字母。所以它会像 > allLow "WhERe IS MY PEPPErONI PIZZa?" "hera" 以下是我所拥有的: allLow :: String -> String allLow "" = "" allLow (c:cs) = if lowerCase c = True then (c ++ (allLow cs))
allLow::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)的函数,如果给定的字符是小写的,它将返回true。我假设我可以在字符串的每个“索引”处测试小写字母的有效性,并以这种方式输出所有大写字母,但它不起作用。错误消息对我没有帮助。它的意思是在“=”处有一个解析错误,但Idk知道这意味着什么。这不应该是==真的。这里有很多错误:
if
也需要else
=
用于比较,=
用于分配++
适用于两个列表,您要查找的是将元素附加到列表的(:)
allCaps :: String -> String
allCaps "" = ""
allCaps (c:cs) = if upperCase c == True then c : allCaps cs else allCaps cs
顺便说一句,Data.Char
有一个isUpper
函数,除非创建该函数是练习的一部分
这里有很多错误:
if
也需要else
=
用于比较,=
用于分配++
适用于两个列表,您要查找的是将元素附加到列表的(:)
allCaps :: String -> String
allCaps "" = ""
allCaps (c:cs) = if upperCase c == True then c : allCaps cs else allCaps cs
顺便说一句,Data.Char
有一个isUpper
函数,除非创建该函数是练习的一部分
@shree.pat18解决了这些问题,但我觉得有必要指出,这是使用
过滤器
功能的教科书案例。。。。Haskell惯用的解决方案是
allLow = filter isLower
@shree.pat18解决了这些问题,但我觉得有必要指出,这是使用
过滤器函数的教科书案例。。。。Haskell惯用的解决方案是
allLow = filter isLower
如果大写c
=为True
。为什么不应该是==?还有,如果c不是大写怎么办?else条件在哪里?@shree.pat18我以为布尔运算使用“=”而算术运算使用“=”。如果函数为大写,则我的函数“lowerCase”打印出“False”。否=
在任何地方都是平等的,只要类型是Eq
的实例。风格注释:不要使用==True
,这是多余的。你可以简单地写如果大写c那么。。。否则…
。即使在英语中,“如果c是大写的,那么…”比直接的“如果c是大写的,那么…”更让人分心。为什么不应该是==?还有,如果c不是大写怎么办?else条件在哪里?@shree.pat18我以为布尔运算使用“=”而算术运算使用“=”。如果函数为大写,则我的函数“lowerCase”打印出“False”。否=
在任何地方都是平等的,只要类型是Eq
的实例。风格注释:不要使用==True
,这是多余的。你可以简单地写如果大写c那么。。。否则…
。即使在英语中,“如果c是大写的,那么…”比直接的“如果c是大写的,那么…”更让人分心。我说错了。我本来应该用小写字母写的,但都是一样的。它起作用了。谢谢大家!如果x==True,则a else b
应写成如果x then a else b
。我说错了。我本来应该用小写字母写的,但都是一样的。它起作用了。谢谢大家!如果x==True,则a else b
应写成如果x then a else b
。