A few Func Prog questions to think about

These are a few questions I asked myself while taking notes in cs210. Some might not make sense, but I hope most can be

241 32 827KB

English Pages [16] Year 2022

Report DMCA / Copyright

DOWNLOAD PDF FILE

Recommend Papers

A few Func Prog questions to think about

  • 0 0 0
  • Like this paper and download? You can publish your own PDF file online for free in a few minutes! Sign Up
File loading please wait...
Citation preview

A few Func Prog questions to think about Joshua Freeman October 7, 2022 Abstract These are a few questions I asked myself while taking notes in cs210. Some might not make sense, but I hope most can be useful to you. Feel free to reach out at joshua dot freeman at epfl dot ch if you want to participate. I would like to extend a warm thank you to Fran¸cois Dumoncel, who has helped with proofreading and bettering this document. Also thank you to • Antoine Tran Link to check if your version of the pdf is up to date

Question 1. Q. What is the difference between call-by-value and call-by-name ? A. In call-by-value we evaluate arguments before applying the function (LTR), in call-by-name after. Question 2. Q. How to force a parameter of a function to be expressed with call-by-name ? A. To make an argument called by-name, simply prepend => (rocket symbol) to its type. def test(byname: => Int) = ???. This is similar to a function taking 0 arguments and returning the given value when called Question 3. Q. Tail recursion (flat complexity) vs recursion in general ? A. Tail recursion consists in a tail-call (call that is the last action) of a function in its own body. Question 4. Q. How to require for a function to be tail-recursive ? A. The @tailrec annotation. Question 5. Q. Special syntax for functions that return other functions ? 1

A.

def sum(f: Int => Int)(a: Int, b: Int): Int = if a > b then 0 else f(a) + sum(f)(a + 1, b)

Question 6. Q. How to require a precondition on a class ? A. Calling method require(Boolean cond, String msg) at the very beginning of the class. Question 7. Q. assert function vs require function ? A. (1) IllegalArgumentException for require, AssertionError for assert, (2) checking user input vs checking the code of the function itself. Question 8. Q. How to overload the constructor of a class ? A.

class Rational(x: Int, y: Int): def this(x: Int) = this(x, 1)

Question 9. Q. How to redefine addition for a given class ? A. With extension(x: C) infix def + (y: C) : C2 = ??? Question 10. Q. What is the keyword ”object” useful for ? A. To define a singleton object of a class (useful if we want to reuse it). it can have the same name as the class(companion) Question 11. Q. What is the point of a companion object ? A. To define something akin to static methods. Question 12.

2

Q.

given

A. Then answer is the common type of false and 1 : AnyVal. Question 13. Q. Which design pattern are case classes particularily useful for ? A. For pattern matching Question 14. Q. To make a list (always linked), what is the construction operator ? A. :: Question 15. 3

Q. How do operators ending in a colon associate ? A. To the right: (a ::

b ::

c ::

Nil) === (a ::

(b ::

(c ::

Nil)))

Question 16. Q. What are the three patterns we can use to pattern-match a list ? A.

Question 17. Q.

DRAW THE TREE A.

Question 18. Q. Two usages for enums in scala ? A.

i. Hierarchies of case classes (ADT) ii. Define a data type accepting different values (like in java)

Question 19. Q. What do S >: T and S