Advertisement
Guest User

Untitled

a guest
Jan 16th, 2019
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.25 KB | None | 0 0
  1. class Point(var x:Double = 0.0,
  2. var y:Double = 0.0) {
  3. override def toString = "[" + x + ", " + y + "]"
  4. }
  5.  
  6.  
  7. class Pixel(xp:Double =0.0,
  8. yp:Double =0.0) extends Point(xp, yp) {
  9. override def toString = super.toString + " "
  10. }
  11. class EmptyException(msg: String) extends Exception(msg)
  12. trait MyList[T] {
  13. def enqueue(el: T): MyList[T]
  14. def first: T
  15. def dequeue: MyList[T]
  16. def isEmpty: Boolean
  17. }
  18. object MyList {
  19. def apply[T](xs: T*): MyList[T] = new Queue[T](xs.toList, Nil)
  20. def empty[T]: MyList[T] = new Queue[T](Nil, Nil)
  21.  
  22. private class Queue[T](private val x: List[T], private val y: List[T]) extends MyList[T] {
  23. def enqueue(el: T) =
  24. normalize(x, el::y)
  25. def first =
  26. x match {
  27. case x::_ => x
  28. case Nil => throw new EmptyException("Empty queue")
  29. }
  30. def dequeue =
  31. x match {
  32. case _::xs => normalize(xs, y)
  33. case Nil => this
  34. }
  35. def isEmpty =
  36. x == Nil
  37. def normalize(xx:List[T], yy:List[T]) =
  38. if (xx == Nil) new Queue(yy.reverse, Nil)
  39. else new Queue(xx, yy)
  40. }
  41. }
  42. val po=new Point(3,4)
  43. po.toString
  44. val px=new Pixel(5,6)
  45. px.toString
  46. var queue1 = MyList(po)
  47. val queue2 = queue1.enqueue(px)
  48. println(queue2.first)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement