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

Haskell中判断一个列表包含另一个列表所有元素的惯用方法是什么?

Haskell 检查列表是否包含全部26个英文字母的简洁方案

基础实现(无需额外依赖)

直接使用高阶函数all简化批量判断逻辑,无需手动编写26次elem调用:

import Data.Char (toLower)

-- 检查输入字符串是否包含全部26个小写英文字母(自动兼容大写输入)
hasAllAlphabets :: String -> Bool
hasAllAlphabets input = all (`elem` map toLower input) ['a'..'z']

代码逻辑说明:

  • ['a'..'z']自动生成包含全部26个小写字母的列表,无需手动枚举
  • all函数会逐个验证每个字母是否存在于输入列表中,自动对所有判断结果做与运算
  • map toLower input将输入统一转为小写,兼容大小写混合的输入场景,不需要的话可以移除

通用封装(支持任意元素类型的全包含判断)

如果需要复用“判断列表A是否包含列表B所有元素”的逻辑,可以封装为通用函数:

containsAll :: Eq a => [a] -> [a] -> Bool
containsAll sourceList targetList = all (`elem` sourceList) targetList

调用示例:
containsAll 你的输入列表 ['a'..'z']

高性能版本(适合长输入场景)

如果输入列表很长,使用Set优化查找效率,复杂度从O(n*m)降低到O((n+m)log n):

import qualified Data.Set as Set
import Data.Char (toLower)

hasAllAlphabetsFast :: String -> Bool
hasAllAlphabetsFast input = charSet `Set.isSupersetOf` alphabetSet
  where
    charSet = Set.fromList $ map toLower input
    alphabetSet = Set.fromList ['a'..'z']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:45:06