【发布时间】:2015-01-18 04:56:44
【问题描述】:
我正在做一个练习,我需要创建一个名为 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。我假设我可以在字符串的每个“索引”处测试小写字母的有效性,并以这种方式抽出所有大写字母,但它不起作用。错误消息对我没有帮助。它说在“=”处有一个解析错误,但我知道这意味着什么。它不应该是 == True。
【问题讨论】:
-
if upperCase c==True。为什么不应该是==?另外,如果 c 不是大写怎么办? else 条件在哪里? -
@shree.pat18 我以为您使用 '=' 进行布尔运算,使用 '==' 进行算术运算。如果函数是大写的,我的函数“lowerCase”会打印出“False”。
-
不。只要类型是
Eq的实例,==在任何地方都适用于 AFAIK 平等。 -
风格注释:不要使用
== True,它是多余的。你可以简单地写if upperCase c then ... else ...。即使在英语中,“如果 c 是大写,那么..”比直接的“如果 c 是大写,那么..”更让人分心。
标签: haskell