将单词的第一个字母大写,同时删除空格(Haskell)

2024-04-23

我刚刚开始使用 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,但这对我来说没有用。我没用过if还没有在 Haskell 中,我认为我做得不正确。我也知道使用“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"

For 帕斯卡案例,我们可以利用concatMap反而:

toCaps :: String -> String
toCaps = concatMap capWord . words
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将单词的第一个字母大写,同时删除空格(Haskell) 的相关文章

随机推荐

  • 如何使用下面定义的类?

    class A public B b class B public A a 我不能在 A 类 B b 中写入 因为 B 类定义如下 有什么办法让它发挥作用吗 thanks 这不可能 您需要在其中一个类中使用指针或引用 class B for
  • Sql 异常:管道的另一端没有进程

    我无法从 C 代码访问我的 sql 服务器连接 我收到此错误 Sql 异常 管道的另一端没有进程 这是我的 app config 中的连接字符串
  • 如何在JavaFX中使用Node类的intersect()方法?

    JavaFX Node 类提供了两种相交方法 intersects Bounds localBounds and intersects double localX double localY double localWidth double
  • XSLT 和临时文档

    我正在尝试处理一个 xml 文件 该文件有几个不同的状态组 例如
  • 以角度实现 canActivate auth 防护

    我有一个带有此函数的服务 它会在令牌有效或无效时返回 true 或 false loggedIn return this http get http localhost 3000 users validateToken map res gt
  • C# 中的字符串加密和解密? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何在 C 中加密和解密字符串 编辑 2013 年 10 月 虽然我随着时间的推移编辑了这个答案以解决缺点 但请参阅jbtule 的回
  • 使用自定义视图填充 ListFragments?

    以前 我可以将布局扩展为 ListView 的自定义视图层次结构 但我不知道如何对 listFragment 执行相同的操作 假设我有一个 item list 布局 其中有一个 ImageView 和 2 个文本视图 我想将其膨胀以在我的
  • Symfony 身份验证 - 无法通过生产中的登录页面

    我已经在本地开发服务器上设置了 Symfony 身份验证 它在生产和开发环境中都完美运行 今天我注册了一个域进行测试并将我的代码推送到 AWS EC2 服务器 我可以毫无问题地访问登录页面但一旦我尝试登录 我就会直接重定向回登录页面 没有任
  • 添加后收集所有非未定义值

    我对伊莎贝尔有以下补充 function proj add real real bit real real bit real real bit where proj add x1 y1 l x2 y2 j add x1 y1 x2 y2 l
  • 为什么 memo.Lines 使用 TStrings 而不是 TStringList?

    为什么Memo Lines使用抽象类TStrings 为什么不使用TStringList反而 我应该将其转换为TStringList在使用它之前 TMemo Lines TListBox Items TComboBox Items ETC
  • 复制 Ctrl-C 的快捷方式在 Android Studio 中不起作用

    我可以从其他程序复制文本并将其粘贴到 Android Studio 我可以右键单击并复制选定的文本 我可以使用快捷方式剪切文本并粘贴它 但是 在使用快捷键 Ctrl C 复制文本时 我经常无法复制 这是一个非常烦人的问题 这里有人知道如何解
  • 如何配置 apache 查看隐藏(`.`)文件?

    如何在 apache 中显示目录列表 隐藏文件 我都尝试过
  • 使用 Rack::SSLEnforcer 时从 Devise 确认链接中删除 HTTPS

    我在 Rails 应用程序中使用 Devise 和 Rack SSLEnforcer 当用户收到确认电子邮件时 它看起来像 http mysite com 443 users confirmation confirmation token
  • 单击开放图层版本 5 标记上的特征

    我正在使用开放层库版本 5 我需要标记上的 onClick 事件来执行一些业务逻辑 任何人都可以帮我解决这个问题 谢谢 我已经尝试了所有代码和片段 我正在使用这个库来响应js import Feature from ol Feature i
  • 通过css替换图片

    我正在 Stylish 一个 Firefox 插件 中编写代码来更改显示的图像 image 属性没有 div 标签 所以我必须使用它 img src s dschjungelplanet 因此 这将替换页面中任何位置的 img src 中的
  • 使用多个提供程序的客户端应用程序应使用什么设计/模式?

    这是一个与设计相关的问题 假设我们有一个名为 ClientAPI 的公共 API 其中包含一些 Web 方法 例如 CreateAccount GetAccount 根据客户的不同 我们使用许多不同的提供商来满足这些请求 假设我们有 Pro
  • 如何在Python中在后台运行长时间运行的作业

    我有一个运行长时间运行的作业 大约几个小时 的网络服务 我正在使用 Flask Gunicorn 和 nginx 来开发它 我想做的是让需要很长时间才能完成的路线 调用创建线程的函数 然后 该函数将向路由返回一个 guid 并且路由将返回一
  • C# FileSystemWatcher 和 FTP

    我通过文件系统观察器监视在 ftp 上删除的文件 然后移动到另一个目录 现在我触发文件系统观察程序的创建事件的复制 但显然在 ftp 的情况下 创建只是一个存根文件 数据会进入并在上传时填充文件直至完成 任何人对此都有一个优雅的解决方案 或
  • Python Mogo ImportError:无法导入名称连接

    不明白为什么这不起作用 mogo 0 2 4 File Users Sam Envs AdiosScraper lib python2 7 site packages mogo connection py line 3 in
  • 将单词的第一个字母大写,同时删除空格(Haskell)

    我刚刚开始使用 Haskell 这就像我正在写的第三件事 所以 自然地 我发现自己有点困惑 我正在尝试编写一些代码 该代码将获取一个字符串 删除空格 并将该字符串的每个字母大写 例如 如果我输入 这是一个测试 我想返回类似 thisIsAT