我有困难搞清楚如何INTS的名单分成包含两个新的列表,元组的元组,使得每一个元素(从第一个)进入第一个列表,每其他元素在第二。哈斯克尔:拆分列表为两个新的列表
像这样:
split [] = ([],[])
split [1] = ([1],[])
split [1,2] = ([1],[2])
split [1,2,3] = ([1,3],[2])
split [1,2,3,4] = ([1,3],[2,4])
我试图递归地做到这一点(有警卫),并且仅使用单个参数XS
这是我的方法,保持收到错误消息:
split :: [Int] -> ([Int],[Int])
split xs | length(xs) == 0 = ([],[])
| length(xs) == 1 = (xs !! 0 : [],[])
| length(xs) == 2 = (xs !! 0 : [], xs !! 1 : [])
| otherwise = (fst ++ xs !! 0, snd ++ xs !! 1) ++ split(drop 2 xs))
谢谢你们! – Shabu
你应该接受其中一个答案。 –