Question: IN HASKELL This is my question: Define a function shuffle :: Int -> [a] -> [a] that takes a natural number n and an even-lengthed

IN HASKELL

This is my question: Define a function shuffle :: Int -> [a] -> [a] that takes a natural number n and an even-lengthed list, and splits and then riffles the list n times. For example, shuffle 2 [1,2,3,4,5,6] = [1,5,4,3,2,6].

Here is my riffle function:

riffle :: [a] -> [a] -> [a]

riffle [] ys = ys

riffle xs [] = xs

riffle (x:xs)(y:ys) = x : y : riffle xs ys

Here is my shuffle function that I am confused on:

shuffle :: Int -> [a] -> [a]

shuffle [] = []

let shuffle 0 x = x

shuffle n x = shuffle (n-1) $ uncurry riffle $ splitAt (length x `div` 2) x

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!