Revision: 50344
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at August 18, 2011 06:50 by rtperson
Initial Code
-- Introducing my convoluted implementation of splitAt split :: [a] -> Int -> ([a], [a]) split xs n = (pre xs 0 n, post xs 0 (n-1)) where pre :: [a] -> Int -> Int -> [a] pre [] _ _ = [] pre xs dex n | dex > length xs = xs | n > length xs = xs | otherwise = if (dex < n) then xs!!dex : pre xs (dex+1) n else [] post :: [a] -> Int -> Int -> [a] post [] _ _ = [] post (x:xs) dex n | n < 0 = (x:xs) | otherwise = if (dex < n) then post xs (dex+1) n else xs -- Or, to borrow from the solutions on Haskell.org -- (which is incorrectfor negative n, BTW) split' :: [a] -> Int -> ([a], [a]) split' xs 0 = ([], xs) split' (x:xs) n = let (f,l) = split xs (n-1) in (x : f, l)
Initial URL
http://haskell.org/haskellwiki/99_questions/11_to_20
Initial Description
problem 17, Split a list into two parts; the length of the first part is given. Do not use any predefined predicates. (Meaning no splitAt or take or drop) *Main> split "abcdefghik" 3 ("abc", "defghik")
Initial Title
Haskell 99 Problems - Number 17
Initial Tags
Initial Language
Haskell