Copyright © Cay S. Horstmann 2011 Creative Commons License
This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License.

Functional Programming in Scala

If/Else

Recursion

Lists

List Functions

Why This Isn't Inefficient

Lab

???

Step 1: If/Else

  1. Open the Scala interpreter, like in the previous lab.

    Type if (true) 3 else 4. As always, don't type the period, but type ENTER. What do you get?

    HINT: These “What do you get” exercises are a lot more effective when you and your buddy first discuss what you think you'll get before you hit ENTER. “Form a hypothesis” is an essential part of the learning path.

  2. Type if (true) 3 else "Hello". What do you get? How is it different from the previous result? Why?
  3. Type val num = if (true) 3 else 4. What do you get?
  4. Type val num2 = if (true) 3. What do you get? Why?

Step 2: Recursion

  1. An easy way of computing a power xn (where n is a nonnegative integer) is given by the recursion

    xn = x xn - 1 if n > 0

    x0 = 1

    Write a Scala function easypow(x : Double, n : Int) : Double that implements this algorithm. What is the code of your function?

  2. What is easypow(5, 20)?
  3. An efficient way of computing a power xn (where n is a nonnegative integer) is given by the recursion

    xn = y2 if n is even and positive, where y = xn / 2

    xn = x xn - 1 if n is odd

    x0 = 1

    Write a Scala function fastpow(x : Double, n : Int) : Double that implements this algorithm. What is the code of your function?

Step 3: Lists

  1. What is the type of 1 :: 2 :: 3 :: Nil? (Just ask the Scala interpreter)
  2. What is the type of 1 :: "Hello" :: Nil?
  3. What happens when you evaluate the expression 1 :: 2 :: 3? Why?
  4. How do you make a list of the elements "Ho", "Chi", "Minh", "City" using a list constructor? (Be sure to try your answer in the Scala interpreter)
  5. How do you make a list of the elements "Ho", "Chi", "Minh", "City" using the cons (::) operator?

Step 4: List Functions

  1. Write a recursive function concat that concatenates all strings in a List[String], yielding a String. Hint: (1) String concatenation is +in Scala, just like in C++. (2) concat(Nil)is "". (3) Think about concat(lst) in terms of lst.head, lst.tail.

    Give the code of your function.

  2. What is the result of concat(List("Ho", "Chi", "Minh", "City"))?
  3. How can you modify concat so that it adds spaces between the strings (i.e. so that concat(List("Ho", "Chi", "Minh", "City")) is "Ho Chi Minh City" but not "Ho Chi Minh City "?