// GENERATED /* INSTRUCTIONS * * Complete the exercises below.  For each “EXERCISE” comment, add * code immediately below the comment. * * Please see README.md for instructions, including compilation and testing. * * GRADING * * 1. Submissions MUST compile using SBT with UNCHANGED configuration and tests with no *    compilation errors.  Submissions with compilation errors will receive 0 points. *    Note that refactoring the code will cause the tests to fail. * * 2. You MUST NOT edit the SBT configuration and tests.  Altering it in your submission will *    result in 0 points for this assignment. * * 3. You MUST NOT use while loops or (re)assignment to variables (you can use “val” declarations, *    but not “var” declarations).  You must use recursion instead. * * 4. You may declare auxiliary functions if you like. * * SUBMISSION * * 1. Push your local repository to the repository created for you on Bitbucket before the deadline. * * 2. Late submissions will not be permitted because solutions will be discussed in class. * */ object subtyping { // Instances of Counter have a integer field that can be incremented, decremented, or read. class Counter { private var n = 0 def increment () = { n = n + 1 } def decrement () = { n = n – 1 } def get () : Int = n } // EXERCISE 1: complete the following function. // The observeCounter function has one parameter f: a function that accepts (a reference to) a Counter instance but returns nothing. // The observeCounter function should call f with (a reference to) an object (of a class extending Counter). // Your class that extends Counter must keep track of the total number of times that increment/decrement have been called. // I.e., if the increment method is called 3 times on an instance, and the decrement method is called 2 times on the same instance, then it should store 5  (somewhere other than the existing field n). // observeCounter should call f, and then return the total number of times that increment/decrement were called on the instance by f. def observeCounter (f : Counter => Unit) : Int = { // TODO: Provide definition here. -1 } // EXERCISE 2: complete the following function. // It is the same as observeCounter except that f has a parameter of type List[Counter] not Counter. // f will insist that the List[Counter] has length 3. // You must return a List[Int] not an Int. // The first element of the result List[Int] must correspond to the number of times that increment/decrement were called on the first element of type List[Counter], similarly for the second and third elements. def observeCounterList (f : List[Counter] => Unit) : List[Int] = { // TODO: Provide definition here. List (-1, -1, -1) } // EXERCISE 3: complete the following function. // It is the same as observeCounterList except that f has a parameter of type Array[Counter] not List[Counter]. // f will insist that the Array[Counter] has length 3. // You must return a Array[Int] not a List[Int]. // The first element of the result Array[Int] must correspond to the number of times that increment/decrement were called on the first element of type Array[Counter], similarly for the second and third elements. def observeCounterArray (f : Array[Counter] => Unit) : Array[Int] = { // TODO: Provide definition here. List (-1, -1, -1).toArray } }

Looking for solution of this Assignment?

WHY CHOOSE US?

We deliver quality original papers

Our experts write quality original papers using academic databases.  

Free revisions

We offer our clients multiple free revisions just to ensure you get what you want.

Discounted prices

All our prices are discounted which makes it affordable to you. Use code FIRST15 to get your discount

100% originality

We deliver papers that are written from scratch to deliver 100% originality. Our papers are free from plagiarism and NO similarity

On-time delivery

We will deliver your paper on time even on short notice or  short deadline, overnight essay or even an urgent essay