尝试在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
相关产品推荐
相关产品推荐

