Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 递归打印出小写字母_Haskell - Fatal编程技术网

Haskell 递归打印出小写字母

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的函数,它的签名是
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