listhaskelltuplesalternating

Haskell - alternating elements from two lists


I'm trying to write a haskell function that takes in two lists of integers and generates a list with elements that have been taken alternatingly from the two lists.

I have the function:

blend xs ys

An example:

blend [1,2,3] [4,5,6]

should return

[1,4,2,5,3,6]

My logic is to zip the two lists together, generating the pairs of alternate elements, then somehow remove them from their tuples.

It's removing them from their tuples that I can't figure out how to implement.


Solution

  • How about exchanging the arguments during recursion-descend?

    blend (x:xs) ys = x:(blend ys xs)
    blend _ _ = []
    

    You can even generalise this approach for any number of lists (I'll leave this to you) or take the remaining elements of a list if the other is empty:

    blend _ ys = ys