Question: Haskell: A higher-order function unfold can be defined as follows to encapsulate a pattern of recursion for producing a list: unfold p htx px =[]

Haskell: A higher-order function unfold can be defined as follows to encapsulate a pattern of recursion for producing a list: unfold p htx \px =[] otherwise = h x : unfold p h t (tx) That is, the function unfold p h t produces the empty list if the predicate p is true of the argument, and otherwise produces a non-empty list by applying the function h to give the head, and the function t to generate another argument that is recursively processed in the same way to produce the tail of the list. For example, a function intabin (to convert integers to binary numbers) can be written as follows: ntabin-unfold (so(mod' 2) (div'2) Note: putting function names mod and div inside back quotes allows them to be used infix] Define the following functions using unfold: a) map f b) iterate f, where iterate fx produces a list by applying the function ftox an increasing number of times, as follows terate fx lx,fx,ffx),f of f x),. c) repHalve, where repHalve I takes list l, and returns a list of lists containing the elements of I, so that the first list contains half of I's elements (if I's length is odd, including the odd element), the next contains half of the remaining elements, and so on For example, repHalve [1 2.3.4, 5 6 7 8 9, 10 11, 12, 13, 14, 15] should return [[1,24.5 6,7,8] [9,1 11,12] [13 14],[15]] Haskell: A higher-order function unfold can be defined as follows to encapsulate a pattern of recursion for producing a list: unfold p htx \px =[] otherwise = h x : unfold p h t (tx) That is, the function unfold p h t produces the empty list if the predicate p is true of the argument, and otherwise produces a non-empty list by applying the function h to give the head, and the function t to generate another argument that is recursively processed in the same way to produce the tail of the list. For example, a function intabin (to convert integers to binary numbers) can be written as follows: ntabin-unfold (so(mod' 2) (div'2) Note: putting function names mod and div inside back quotes allows them to be used infix] Define the following functions using unfold: a) map f b) iterate f, where iterate fx produces a list by applying the function ftox an increasing number of times, as follows terate fx lx,fx,ffx),f of f x),. c) repHalve, where repHalve I takes list l, and returns a list of lists containing the elements of I, so that the first list contains half of I's elements (if I's length is odd, including the odd element), the next contains half of the remaining elements, and so on For example, repHalve [1 2.3.4, 5 6 7 8 9, 10 11, 12, 13, 14, 15] should return [[1,24.5 6,7,8] [9,1 11,12] [13 14],[15]]
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
