我正在尝试编写一个名为 split 的函数,它接受一个列表并返回一个包含所有不同可能性的对列表来对其进行分区,例如
split [4,3,6] = [([],[4,3,6]),([4],[3,6]),([4,3],[6]),([4,3,6],[])]
现在我写了这个
split :: [a] -> [([a],[a])]
split [] = [([],[])]
split (x:xs) = ([],(x:xs)):(zip (map (x:) (map fst split(xs))) (map snd split(xs)))
一段代码和拥抱以及我选择的解释器让我得到这个
ERROR file:.\split.hs:3 - Type error in application
*** Expression : map snd split xs
*** Term : map
*** Type : (e -> f) -> [e] -> [f]
*** Does not match : a -> b -> c -> d
错误信息。我到底做错了什么?为什么 (map snd split xs) 是
(a-> b -> c -> d) 类型?