I want do do something like:
>enumerate [\"banana\", \"potato\", \"ice\"]
[(1, \"banana\"), (2, \"potato\"), (3, \"ice\")]
I wrote:
<
There is already a function which does this called zip (zip :: [a] -> [b] -> [(a,b)]
). Now for your function you just can pass a list with 1,2,...
as first argument and get your result, e.g.
enumerate :: [String] -> [(Int, String)]
enumerate = zip [1..]
EDIT:
If you also want to implement your own zip
function, just use:
zip' :: [a] -> [b] -> [(a,b)]
zip' _ [] = []
zip' [] _ = []
zip' (x:xs) (y:ys) = (x,y):zip' xs ys
You take two lists ([a]
and [b]
) and put each element into a tuple. Edge cases are of cores when one of the lists is empty you return an empty list. Otherwise you use pattern matching to get the first element of the list put them into a tuple and call zip'
again with the tail of the list.