use Ocaml for the following parts. part A Write a function in Ocaml cond_dup : 'a list -> ('a -> bool) -> 'a list that
use Ocaml for the following parts.
part A
Write a function in Ocaml
cond_dup : 'a list -> ('a -> bool) -> 'a
list that takes in a list and predicate and duplicates all elements which satisfy the condition expressed in the predicate. For example, cond_dup [3;4;5] (fun x -> x mod 2 = 1) = [3;3;4;5;5].
let rec cond_dup l f = (* YOUR CODE HERE *) raise (Failure "Not implemented") <-- remove when coded
assert (cond_dup [3;4;5] (fun x -> x mod 2 = 1) = [3;3;4;5;5])
part B
Write a function in ocaml
n_times : ('a -> 'a) * int * 'a -> 'a
such that n_times (f,n,v) applies f to v n times. For example, n_times((fun x-> x+1), 50, 0) = 50. If n<=0 return v.
let rec n_times (f, n, v) = (* YOUR CODE HERE *) raise (Failure "Not implemented")
assert (n_times((fun x-> x+1), 50, 0) = 50)
part C
Write a function in ocaml
range : int -> int -> int list
such that range num1 num2 returns an ordered list of all integers from num1 to num2 inclusive. For example, range 2 5 = [2;3;4;5]. Raise the exception IncorrectRange if num2 < num1.
exception IncorrectRange let rec range num1 num2 = (* YOUR CODE HERE *) raise (Failure "Not implemented")
assert (range 2 5 = [2;3;4;5])
part D
Write a function in Ocaml
zipwith : ('a -> 'b -> 'c) -> 'a list -> 'b list -> 'c list
such that zipwith f l1 l2 generates a list whose ith element is obtained by applying f to the ith element of l1 and the ith element of l2 . If the lists have different lengths, the extra elements in the longer list should be ignored. For example, zipwith (+) [1;2;3] [4;5] = [5;7].
let rec zipwith f l1 l2 = (* YOUR CODE HERE *) raise (Failure "Not implemented")
assert (zipwith (+) [1;2;3] [4;5] = [5;7])
part E
Write a function Ocaml
remove_stutter : 'a list -> 'a list
that removes stuttering from the original list. For example, remove_stutter [1;2;2;3;1;1;1;4;4;2;2]= [1;2;3;1;4;2]. Option type may come in handy.
let remove_stutter l = (* YOUR CODE HERE *) raise (Failure "Not implemented")
assert (remove_stutter [1;2;2;3;1;1;1;4;4;2;2] = [1; 2; 3; 1; 4; 2])
Step by Step Solution
There are 3 Steps involved in it
Step: 1
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