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

Haskell删除列表元素首实例的自定义函数运行无效应如何修复?

问题原因

你的代码错误来自模式匹配顺序不符合执行逻辑:Haskell对函数子句的匹配是从上到下依次执行的,只要匹配到某一个子句就会直接执行不再向后校验。
你编写的第二个子句rem1 ys _ = ys会匹配所有第一个子句没接住的非空列表,直接原样返回输入列表,根本不会走到第三个处理元素判断的分支,所以测试时列表没有任何变化。

修复方案

直接删除多余的第二个匹配子句即可,修正后的代码如下:

rem1 :: Eq a => [a] -> a -> [a]
rem1 [] _ = []
rem1 (y:ys) x   | x == y    = ys
                | otherwise = y : rem1 ys x

验证测试

修正后在GHCi中执行测试即可得到预期结果:

ghci> rem1 "abab" 'b'
"aab"

补充说明

如果后续要写多子句的Haskell函数,一定要注意把子集范围更窄、更特殊的匹配规则放在前面,范围更宽的通用匹配规则放在后面,避免出现匹配提前截断的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:30:05