Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Point(var x:Double = 0.0,
- var y:Double = 0.0) {
- override def toString = "[" + x + ", " + y + "]"
- }
- class Pixel(xp:Double =0.0,
- yp:Double =0.0) extends Point(xp, yp) {
- override def toString = super.toString + " "
- }
- class EmptyException(msg: String) extends Exception(msg)
- trait MyList[T] {
- def enqueue(el: T): MyList[T]
- def first: T
- def dequeue: MyList[T]
- def isEmpty: Boolean
- }
- object MyList {
- def apply[T](xs: T*): MyList[T] = new Queue[T](xs.toList, Nil)
- def empty[T]: MyList[T] = new Queue[T](Nil, Nil)
- private class Queue[T](private val x: List[T], private val y: List[T]) extends MyList[T] {
- def enqueue(el: T) =
- normalize(x, el::y)
- def first =
- x match {
- case x::_ => x
- case Nil => throw new EmptyException("Empty queue")
- }
- def dequeue =
- x match {
- case _::xs => normalize(xs, y)
- case Nil => this
- }
- def isEmpty =
- x == Nil
- def normalize(xx:List[T], yy:List[T]) =
- if (xx == Nil) new Queue(yy.reverse, Nil)
- else new Queue(xx, yy)
- }
- }
- val po=new Point(3,4)
- po.toString
- val px=new Pixel(5,6)
- px.toString
- var queue1 = MyList(po)
- val queue2 = queue1.enqueue(px)
- println(queue2.first)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement