Numeration count inside a recursive function

后端 未结 3 1346
无人共我
无人共我 2021-01-23 18:50

I want do do something like:

>enumerate [\"banana\", \"potato\", \"ice\"]
[(1, \"banana\"), (2, \"potato\"), (3, \"ice\")]

I wrote:

<
3条回答
  •  -上瘾入骨i
    2021-01-23 18:57

    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.

提交回复
热议问题