Homework 06
Due Wednesday, 17 November, 10:10am. Please hand it in to Hossein before the beginning of the exercise session.
Problem 1
Determine if the following piece of codes type check according to the type rules.
a) The class Array has a field length in which the length of the array is stored.
def swap(lst: Array[Int], a: Int, b: Int): Array[Int] = {
if (a >= lst.length || b >= lst.length) lst else {
val swap = lst(a)
lst(a) = lst(b)
lst(b) = swap
lst
}
}
b)
For solving this part you have to write down the type rule corresponding to new.
class Shape
class Rectangle(width: Int, length: Int) extends Shape {
def area : Int = width * length
}
class Square(length: Int) extends Rectangle(length,length)
new Square(5).area
Problem 2
We can partition the set of positive integers
into the set of
and the set of
numbers.
Assume that we have the types pos, even and odd in a programming language.
Give the type rules for addition, multiplication, division and exponentiation.
For division, consider the following cases.
- Division rounds up the result: x / y is interpreted as
.
- Division returns the quotient: x / y is interpreted as
.
Specify in which case(s) there may be run-time error. Is there any way to prevent the run-time error at the type checking phase?