Haskell: Spliting List в кортеж двух новых списков

У меня есть трудности выяснить, как разделить список INT, в кортеж, содержащий два новых списка, так что каждый элемент (начиная с первого) входит в первый список и каждый другой элемент во втором.

Вроде так:

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))    
5
задан Shabu 14 September 2011 в 03:38
поделиться