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

尝试在Haskell中自定义partition函数遇类型匹配错误求助

修复Haskell自定义partition函数的类型错误

你的代码出现类型不匹配的核心问题是:递归调用myPartition f xs返回的是元组([a], [a]),但你直接用x : myPartition f xs尝试将元素拼在元组前——:运算符要求右边必须是同类型元素的列表[a],而非元组,这就导致了类型冲突。

正确的实现需要先递归处理剩余列表,拆分出符合条件和不符合条件的两个子列表,再将当前元素追加到对应子列表中:

myPartition :: (a -> Bool) -> [a] -> ([a], [a])
myPartition f (x:xs) = let (yes, no) = myPartition f xs
                       in if f x
                          then (x : yes, no)
                          else (yes, x : no)
myPartition _ [] = ([], [])

这段代码通过let绑定拆解递归结果,把符合条件的元素存入yes列表,不符合的存入no列表,再根据当前元素是否满足判断条件,将其追加到对应列表后重新组合成元组返回,完全匹配函数声明的类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:25:11