Sorting a list is a common example in Computer Science, functional languages make it very easy to express a sorting algorithm. There are a number of ways a list can be sorted, ascending order, descending order, the first/second value of a tuple etc.
a) Write a higher order function that takes as its parameters a function that will be used to compare two elements and a list to be sorted. The result of the function should be a list that has been sorted according to the comparison function. (You may define that the items in the list will be Ord a, that means you can use comparison operator '==' to compare two items). Some example output expected of this function is shown below:
Main>mySort (<) [1,5,3,6,4,1,3,3,2]
[1,1,2,3,3,3,4,5,6]
Main>mySort (>) [1,5,3,6,4,1,3,3,2]
[6,5,4,3,3,3,2,1,1]
Main>mySortlongerWord ["Hello", "The", "a", "Daniel", "Declarative"]
["Declarative", "Daniel", "Hello", "The", "a"]
b) Write a higher order function list To that takes a function f and a number n and uses list comprehension to return a list of all the numbers from 1 to n for which the function f evaluates to True.
A prime number is a number that is only divisible by itself and 1. For example the number 7 is divisible by 7 and 1 but it cannot be divided by anything else.
c) Write a function prime that takes a single integer and returns true if it is a prime number and false if it is not. Your functions should give useful error messages if 0 or negative values are given as parameters. Use currying to define a function prime To in terms of the function list To. This function should return a list of all the prime numbers up to a given value n.
Some expected output is shown below:
Main> prime 1
True
Main> prime 4
False
Main>primeTo 10
[1,2,3,5,7]
d) Write a Haskell script that will
1. Store an unsorted list of students including their:
? First and last names
? Student ID
? midterm mark
? final exam mark
? assignment 1 mark
? assignment 2 mark
? assignment 3 mark
2. Sort the list according to the last name
3. Calculate the students final grade based on the following formula:
final grade = midterm * 0.25 + final * 0.5 + ((assignment 1 + assignment 2 + assignment3) / 3.0) * 0.25
4. Print a table with proper headings containing the following information for each student.
Student ID First Name Last Name Final Grade
5. Print a footer containing the class average at the bottom of the table.
Some expected output is shown below:
Computer Science Declarative Programming Results
Student ID First Name Last Name Final Grade
01234567 Jo Bloggs A
12345678 John Doe B
23456789 Jane Doe C
. . . .. . . Class Average: B