Answered step by step
Verified Expert Solution
Question
1 Approved Answer
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 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
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started