Implement the curried functions in ocaml

Assignment Help Programming Languages
Reference no: EM13975043

Project - OCaml basics

Introduction

The goal of this project is to get you familiar with programming in OCaml. You will have to write a number of small functions, each of whose specification is given below. In our reference solution, each function's implementation is typically 3-6 lines of code; in a couple of cases you will want to write a helper function which will add another 3-6 lines.

Part A: Simple functions

Write the following functions:

Name

Type

Return value

Example

mult_of_five x

int -> bool

true if x is a multiple of 5 
false otherwise

mult_of_five 5 = true 
mult_of_five 1 = false

sum_upto_three ls

int list -> int

the sum of the list's elements up to the first three

sum_upto_three [1] = 1 
sum_upto_three [1;2;3] = 6 
sum_upto_three [1;2;3;4;5] = 6

caddr_int

int list -> int

the second element of the list 
-1 if the list has 0 or 1 elements

caddr_int [1;2;3] = 2 
caddr_int [1] = -1

Part B: Simple Curried Functions

A curried function is one that takes multiple arguments "one at a time". For example, the following function sub takes two arguments and computes their difference:

let sub x y = x - y

The type of this function is int -> int -> int. Technically, this says that sub is a function that takes an int and returns a function that takes another int and finally returns the answer, also an int. In other words, we could write

sub 2 1

and this will produce the answer 1. But we could also do something like this:

let f = sub 2 in

f 1

and this will also produce 1. Notice how we call sub with only one argument, so it returns a function f that takes the second argument. In general, you can think of a function f of the type

t1 -> t2 -> t3 -> ... -> tn

as a function that takes n-1 arguments of types t1, t2, t3, ..., tn-1 and produces a result of type tn. Such functions are written with OCaml syntax

let f a1 a2 a3 ... = body

where a1 has type t1, a2 has type t2, etc.

Implement the following simple, curried functions:

Name

Type

Return value

Example

mult_of_n x y

int -> int -> bool

whether x is a multiple of y

mult_of_n 5 5 = true 
mult_of_n 2 3 = false

triple_it x y z

'a -> 'b -> 'c -> 'a*'b*'c

a tuple containing the three arguments, in order

triple_it 5 5 5 = (5,5,5) 
triple_it "hello" "b" "a" = ("hello","b","a")

maxpair (x,y) (m,n)

'a*'b -> 'a*'b -> 'a*'b

(x,y) if it is larger than (m,n), according to lexicographic ordering 
(m,n) otherwise (see note about comparison functions below)

maxpair (1,2) (3,4) = (3,4) 
maxpair (1,2) (1,3) = (1,3)

The OCaml comparison functions (=,<=,>=,<, and >) are polymorphic, so you can give them any two arguments of the same type.

Part C: Recursive Functions

The rest of the project asks that you implement a number of recursive functions, many of which compute on lists.

Name

Type

Return value

Example

prod l

int list -> int

the product of all elements in l 
1 if l is empty

prod [5;6] = 30 
prod [0;5;3] = 0

unzip l

('a*'b) list -> ('a list)*('b list)

a pair of lists consisting of the all first and second elements, respectively, of the pairs in l

unzip [(1,2);(3,4)] = ([1;3],[2;4]) 
unzip [(3,7);(4,5);(6,9)] = ([3;4;6],[7;5;9])

maxpairall l

(int*int) list -> int*int

the largest pair in input list l, according to lexicographic ordering 
(0,0) if l is empty

maxpairall [(1,2);(3,4)] = (3,4) 
maxpairall [(1,2);(1,3);(0,0)] = (1,3)

addTail l x

'a list -> 'a -> 'a list

a new list where x is appended to the end of l

addTail [1;2] 3 = [1;2;3]

get_val x n

int list -> int -> int

element of list x at index n (indexes start at 0) 
-1 if n is outside the bounds of the list

get_val [5;6;7;3] 1 = 6 
get_val [5;6;7;3] 4 = -1

get_vals x y

int list -> int list -> int list

list of elements of list x at indexes in list y, 
-1 for any indexes in y are outside the bounds of x (as with get_vals) 
elements must be returned in order listed in y

get_vals [5;6;7;3] [2;0] = [7;5] 
get_vals [5;6;7;3] [2;4] = [7;-1]

list_swap_val b u v

'a list -> 'a -> 'a -> 'a list

list b with values u,v swapped 
change value of multiple occurrences of u and/or v, if found 
change value for u even if v not found in list, and vice versa

list_swap_val [5;6;7;3] 7 5 = [7;6;5;3] 
list_swap_val [5;6;3] 7 5 = [7;6;3]

index x v

'a list -> 'a -> int

index of rightmost occurrence of value v in list x 
(indexes start at 0)
 
-1 if not found

index [1;2;2] 1 = 0 
index [1;2;2;3] 2 = 2 
index [1;2;3] 5 = -1

distinct l

'a list -> 'a list

a new list that contains the distinct elements of l, in the same order they appear in l

distinct [1;2;2] = [1;2] 
distinct [2;1;2;2;3] = [2;1;3]

find_new x y

'a list -> 'a list -> 'a list

list of members of list x not found in list y 
maintain relative order of elements in result

find_new [4;3;7] [5;6;5;3] = [4;7] 
find_new [5;6;5;3] [4;3;7] = [5;6;5]

is_sorted x

'a list -> bool

true if elements in x are in sorted order, false otherwise 
return true for []

is_sorted [5;5;7;9] = true 
is_sorted [9;7;5] = false

Attachment:- OCaml basics.rar

Reference no: EM13975043

Questions Cloud

How characteristics of oil make anadarkos capacity planning : Discuss how the characteristics of oil make Anadarko's capacity planning strategy possible. Why would a company like Apple not be able to plan its capacity in the same way?
What procedures you implement to prevent disease outbreak : What resources will you use to help provide food, water, and toilet facilities for victims? Who will you call and when will you call? What procedures will you implement to prevent disease outbreak? How will you care for the needs of the public healt..
Determine the seasonal indexes and break : Combining the quarterly bookings for each year,   fit a linear trend equation and forecast the number of bookings for 2013. Determine the seasonal indexes and break the 2013 forecast in part (a) into its quarterly components.
Prices for regular unleaded gasoline : The U.S. Energy  Information Administration reports the following prices for regular unleaded gasoline in Germany from 2003 through 2008. Source: U.S. Energy Information Administration, Annual Energy Review 2008, p. 321.
Implement the curried functions in ocaml : Goal of this project is to get you familiar with programming in OCaml. You will have to write a number of small functions - write a helper function which will add another 3-6 lines.
What are the communication challenges within an organization : Create and deliver a presentation that provides results and suggestions for improvement based on the data obtained from the audit and the literature on organizational communication
What is the magnitude of the total momentum of the system : If you run toward the ball at a speed of 4.4 m/s, and the ball is flying directly at you at a speed of 32 m/s, what is the magnitude of the total momentum of the system (you and the ball)? Assume your mass is 60 kg.
Problem regarding the exponential smoothing : 1. Given the time series in Exercise 18.65, and using exponential smoothing with a 5 0.5, what would have been the forecast for 2009?
Forecast for water consumption during that quarter : A firm predicts it will use 560,000 gallons   of water next year. If the seasonal index of water consumption is 135 for the second quarter of the year, what is the forecast for water consumption during that quarter?

Reviews

Write a Review

Programming Languages Questions & Answers

  Write program to list all english-math and science teachers

Suppose that input consists of a file of teachers. You are told to write a program to list all English, math, and science teachers. Each teacher can teach only one subject.

  Direction and magnitude be integers or doubles

Design the program consider Will the direction and magnitude be integers or doubles - will the input vectors be passed by value, by reference, or by const reference?

  Required to implement parties - pair programming

Required to implement Parties - The player should be in his/her own Party and there can be other Parties (both hostile and non-hostile) as well. You should implement the user stories

  Learn redirecting standard output

Learn redirecting standard output (stdout) to a file using the output redirection operator

  Write function that takes array of positive integers

Write a function that takes an array of positive integers and the size of the array, and returns the average (type float) of the values.

  Reservations system to be horizontal or vertical application

Top Sail Realty Situation: Top Sail Realty is one of the largest time-sharing and rental brokers for vacation cottages. Do you consider the reservations system to be a horizontal or a vertical application? Give reasons for your answer.

  Why is each criterion important to a program

When reviewing a program, these are the four criteria for style: Why is each criterion important to a program

  Program for class quiz to implement measurable interface

State a class Quiz to implement Measurable interface. A quiz has a score and a letter grade (such as B+).

  Explain post-conditions and description of the parameters

Write specifications for method which advances any given date by one day. Write a statement of purpose, pre- and post-conditions, and description of the parameters.

  Create program to produce a summary of amounts due

Create a program that will produce a summary of the amounts due for Pat's Auto Repair Shop. Display a splash screen first, then display the Job Information Form.

  Write program uses while loop to output all odd numbers

Write a program that uses while loop to perform the following steps: Output all the odd numbers between firstnum and secondnum inclusive.

  Create the logic for a program which merges two files

Create the logic for a program which merges the two files into one file containing list of all students in district, maintaining student id number order.

Free Assignment Quote

Assured A++ Grade

Get guaranteed satisfaction & time on delivery in every assignment order you paid with us! We ensure premium quality solution document along with free turntin report!

All rights reserved! Copyrights ©2019-2020 ExpertsMind IT Educational Pvt Ltd