Question: Write a function buckets : ('a 'a -> bool) -> 'a list -> 'a list list that partitions a list into equivalence classes. That

Write a function buckets : ('a 'a -> bool) -> 'a list -> 'a list list that partitions a list into equivalence 

Write a function buckets : ('a 'a -> bool) -> 'a list -> 'a list list that partitions a list into equivalence classes. That is, buckets equiv 1st should return a list of lists where each sublist in the result contains equivalent elements, where two elements are considered equivalent if equiv returns true. For example: buckets (=) [1;2;3;4] = [[1]; [2]; [3];[4]] buckets (=) [1;2;3; 4;2;3;4;3;4] = [[1]; [2:2]; [3;3;3];[4;4;4]] buckets (fun x y-> (=) (x mod 3) (y mod 3)) [1;2;3;4;5;6] = [[1;4]; [2;5];[3;6]] The order of the buckets must reflect the order in which the elements appear in the original list. For example, the output of buckets (=) [1;2;3;4] should be [[1]; [2]; [3];[4]] and not [[2]; [1]; [3];[4]] or any other permutation. The order of the elements in each bucket must reflect the order in which the elements appear in the original list. For example, the output of buckets (fun x y-> (=) (x mod 3) (y mod 3)) [1; 2; 3; 4; 5; 6] should be [[1;4]; [2;5]; [3;6]] and not [[4;11; [5;2]; [3;6]] or any other permutations. Assume that the comparison function ('a -> 'a -> bool) is commutative, associative and idempotent. You are not allowed to use sets or hash tables in your solution. The list concatenation operator @ may come in handy. Feel free to use helper functions. let buckets p 1 = (* YOUR CODE HERE *) assert (buckets (=) [1;2;3;4] = [[1] [2] [3] [4]]); assert (buckets (=) [1;2;3; 4;2;3; 4;3;4] = [[1]; [2;2]; [3;3;3]; [4; 4;4]]); assert (buckets (fun x y-> (=) (x mod 3) (y mod 3)) [1;2;3; 4; 5;6] = [[1;4]; [2;5]; [3;6]]); Activat

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 Programming Questions!