gpt4 book ai didi

haskell - 在删除空格的同时大写单词的首字母(Haskell)

转载 作者:行者123 更新时间:2023-12-01 08:21:36 25 4
gpt4 key购买 nike

我刚刚开始使用 Haskell,这就像我正在写的第三件事,所以,很自然地,我发现自己有点困惑。

我正在尝试编写一些代码来获取一个字符串,删除空格,并将该字符串的每个字母大写。

例如,如果我输入“this is a test”,我想返回类似:“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”是错误的,但我不确定如何修复它。任何人都可以就这个特定问题提供任何指示吗?

最佳答案

我认为将问题拆分为更小的子问题可能会更好。首先,我们可以创建一个函数,对于给定的单词,它会将第一个字符大写。对于驼峰式,我们可以这样实现:

import Data.Char(toUpper)

capWord :: String -> String
capWord "" = ""
capWord (c:cs) = toUpper c : cs

然后我们可以使用 words 来获取单词列表:

toCaps :: String -> String
toCaps = go . words
where go [] = ""
go (w:ws) = concat (w : map capWord ws)

例如:

Prelude Data.Char> toCaps "this is a test"
"thisIsATest"

对于 Pascal 大小写,我们可以使用 concatMap 代替:

toCaps :: String -> String
toCaps = concatMap capWord . words

关于haskell - 在删除空格的同时大写单词的首字母(Haskell),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58087750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com