Answered step by step
Verified Expert Solution
Link Copied!
Question
1 Approved Answer

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

blur-text-image
Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image_2

Step: 3

blur-text-image_3

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

PC Magazine Guide To Client Server Databases

Authors: Joe Salemi

1st Edition

156276070X, 978-1562760700

More Books

Students explore these related Databases questions

Question

=+ (b) Show that no record stands forever.

Answered: 3 weeks ago