递归打印小写字母
Recursively Printing Out Lowercase Letters
我正在做一个练习,我需要创建一个名为 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) 如果给定的 char 是小写的,它 returns 为真。我假设我可以在字符串的每个 "index" 处测试小写字母的有效性并以这种方式抽出所有大写字母,但它不起作用。错误消息对我没有帮助。它说“=”处存在解析错误,但我不知道那是什么意思。它不应该是 == True。
这里有很多错误:
if
也需要 else
。
==
用于比较,=
用于赋值。
++
适用于 2 个列表,您正在寻找的是 (:)
它将一个元素附加到列表。
正确的函数应该是这样的:
allCaps :: String -> String
allCaps "" = ""
allCaps (c:cs) = if upperCase c == True then c : allCaps cs else allCaps cs
顺便说一句,Data.Char
有一个 isUpper
函数,除非创建该函数是你练习的一部分。
@shree.pat18 解决了这些问题,但我觉得有必要指出这是使用 filter
函数的教科书案例.... Haskell 惯用的解决方案是
allLow = filter isLower
我正在做一个练习,我需要创建一个名为 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) 如果给定的 char 是小写的,它 returns 为真。我假设我可以在字符串的每个 "index" 处测试小写字母的有效性并以这种方式抽出所有大写字母,但它不起作用。错误消息对我没有帮助。它说“=”处存在解析错误,但我不知道那是什么意思。它不应该是 == True。
这里有很多错误:
if
也需要else
。==
用于比较,=
用于赋值。++
适用于 2 个列表,您正在寻找的是(:)
它将一个元素附加到列表。
正确的函数应该是这样的:
allCaps :: String -> String
allCaps "" = ""
allCaps (c:cs) = if upperCase c == True then c : allCaps cs else allCaps cs
顺便说一句,Data.Char
有一个 isUpper
函数,除非创建该函数是你练习的一部分。
@shree.pat18 解决了这些问题,但我觉得有必要指出这是使用 filter
函数的教科书案例.... Haskell 惯用的解决方案是
allLow = filter isLower