技术问询:如何不使用elem函数判断整数n是否在整数列表中
Haskell代码修正:判断整数是否存在于列表
问题所在
你当前的代码通过列表推导式生成了所有与目标整数n相等的元素列表,返回类型是[Integer],但函数签名明确要求返回Bool类型,类型不匹配是导致错误的核心原因。
修正方案
方案1:基于现有逻辑快速调整
利用null函数判断匹配列表是否为空,再取反即可得到布尔结果(空列表表示无匹配,非空表示存在):
present:: Integer -> [Integer] -> Bool present n llist = not $ null [x | x <- llist, x == n]
方案2:递归实现(函数式风格更地道)
手动遍历列表,逐个元素比较,符合Haskell的递归思维,也避免依赖额外的辅助函数:
present:: Integer -> [Integer] -> Bool present _ [] = False -- 空列表中不可能存在目标元素 present n (x:xs) | x == n = True -- 找到匹配元素,立即返回True | otherwise = present n xs -- 未找到,继续遍历剩余列表
内容的提问来源于stack exchange,提问作者Jessie
相关产品推荐
相关产品推荐

