You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Haskell如何筛选字符串中包含大写字母的所有单词?

问题说明

输入参数a为String类型字符串,需求为查找出该字符串中所有包含大写字符的单词。实现功能时需要先将字符串拆分为单词组成的字符序列再做处理,当前给出的初始代码框架存在错误,无法正常运行:

listWordsWithUpper :: String -> [String]
listWordsWithUpper a = filter (any . (isUpper a)) 

该函数的预期运行结果如下:

listWordsWithUpper "Haskell is tHe BEST" == ["Haskell", "tHe", "BEST"]
实现方案

首先需要引入依赖的字符判断函数:

import Data.Char (isUpper)

现有代码有两个核心问题:

  1. 没有把输入的整串按空格拆分成单词列表。Haskell内置的words函数可以直接完成这个工作,它会把字符串按空白符分割,返回由每个单词组成的列表,而Haskell里String本身就是[Char]类型的字符序列,不需要额外做类型转换。
  2. 过滤谓词的写法类型错误。isUpper的类型是Char -> Bool,作用是判断单个字符是否为大写,不需要传入整个字符串a作为参数;any isUpper作为filter的谓词时,会对每个传入的单词(本质是字符列表)做检查,只要单词里存在任意一个字符满足大写判断,就保留这个单词。

修正后可直接运行的完整代码:

import Data.Char (isUpper)

listWordsWithUpper :: String -> [String]
listWordsWithUpper a = filter (any isUpper) (words a)

直接运行测试用例即可得到预期结果,传入"Haskell is tHe BEST"时,会过滤掉全小写的单词"is",返回包含大写字符的三个单词组成的列表。

内容的提问来源于stack exchange,提问作者teki2021

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 20:18:30