【发布时间】:2019-09-24 20:33:51
【问题描述】:
我刚开始使用 Haskell,这就像我要写的第三件事,所以,自然地,我发现自己有点难过。
我正在尝试编写一些代码,该代码将接受一个字符串、删除空格并将该字符串的每个字母大写。
例如,如果我输入“这是一个测试”,我想返回类似:“thisIsATest”的内容
import qualified Data.Char as Char
toCaps :: String -> String
toCaps [] = []
toCaps xs = filter(/=' ') xs
toCaps (_:xs) = map Char.toUpper xs
我认为我使用的方法是错误的。按此顺序使用我的代码,我可以使用 filter 函数删除所有空格,但没有任何内容变为大写。
当我将filter 位移动到代码的最末尾时,我可以使用map Char.toUpper 位。例如,当我映射该函数Char.toUpper 时,它只是将所有“HISISATEST”都大写。
我试图使用 if 函数来表达类似于
if ' ' then map Char.toUpper xs else Char.toLower xs,但这对我没有用。我还没有在 Haskell 中使用 if,而且我认为我做得不对。我也知道使用“xs”是错误的,但我不知道如何解决它。
任何人都可以就这个特定问题提供任何指示吗?
【问题讨论】:
-
最后一个子句永远不会触发,因为第二个模式
toCaps xs将捕获所有可能的输入。 -
使用
-Wall打开警告会检测到这个错误。 -
如果有前导空格怎么办?
toCaps " hey"应该是"hey"(因为'h'是第一个非空格字符)还是"Hey"(因为'h'不是第一个字符)?
标签: haskell