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

如何修改Haskell代码实现删除列表中指定元素的第一个出现项

问题原因

你当前写的列表推导式会遍历列表全部元素,过滤掉所有等于目标值的项,因此会删除所有匹配项,无法满足仅删除第一个出现项的需求。列表推导式本身无法记录「是否已经删除过元素」的状态,更适合全量过滤场景,改用递归实现即可:

rem2 :: Eq a => [a] -> a -> [a]
rem2 [] _ = []
rem2 (x:xs) y
    | x == y = xs
    | otherwise = x : rem2 xs y

实现逻辑

  • 传入空列表时直接返回空
  • 遍历列表时只要匹配到第一个和目标值相等的元素,直接返回该元素之后的剩余列表,不再继续处理后续元素
  • 未匹配到目标元素时,将当前元素拼接在递归处理的结果前

测试验证

执行 rem2 "hello" 'l' 会返回预期输出 "helo",符合需求。如果目标元素不在列表中,会直接返回原列表,常规使用场景都可以覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:48:04