30
|
1 |
package greeter
|
|
2 |
|
|
3 |
object WorkSheet {
|
|
4 |
println("Welcome to the Scala worksheet") //> Welcome to the Scala worksheet
|
|
5 |
|
|
6 |
val x = 5 //> x : Int = 5
|
|
7 |
def increase(i: Int) = i + 1 //> increase: (i: Int)Int
|
|
8 |
increase(x) //> res0: Int = 6
|
|
9 |
|
|
10 |
// Expressions And Simple Functions
|
|
11 |
|
|
12 |
87 + 145 //> res1: Int(232) = 232
|
|
13 |
5 + 2 * 3 //> res2: Int = 11
|
|
14 |
|
|
15 |
"Hello" + " World!" //> res3: String("Hello World!") = Hello World!
|
|
16 |
|
|
17 |
def scale = 5 //> scale: => Int
|
|
18 |
7 * scale //> res4: Int = 35
|
|
19 |
|
|
20 |
def pi = 3.141592653589793 //> pi: => Double
|
|
21 |
def radius = 10 //> radius: => Int
|
|
22 |
2 * pi * radius //> res5: Double = 62.83185307179586
|
|
23 |
|
|
24 |
// PARAMETERS
|
|
25 |
|
|
26 |
def square(x: Double) = x * x //> square: (x: Double)Double
|
|
27 |
square(2) //> res6: Double = 4.0
|
|
28 |
square(square(4)) //> res7: Double = 256.0
|
|
29 |
|
|
30 |
def sumOfSquares(x: Double, y: Double) = square(x) + square(y)
|
|
31 |
//> sumOfSquares: (x: Double, y: Double)Double
|
|
32 |
sumOfSquares(3, 2 + 2) //> res8: Double = 25.0
|
|
33 |
|
|
34 |
def loop: Int = loop //> loop: => Int
|
|
35 |
def first(x: Int, y: Int) = x //> first: (x: Int, y: Int)Int
|
|
36 |
def constOne(x: Int, y: => Int) = 1 //> constOne: (x: Int, y: => Int)Int
|
|
37 |
constOne(1, loop) //> res9: Int = 1
|
|
38 |
|
|
39 |
// 4.3 CONDITIONAL EXPRESSIONS
|
|
40 |
|
|
41 |
def abs(x: Double) = if (x >= 5) x + 1 else x - 1
|
|
42 |
//> abs: (x: Double)Double
|
|
43 |
abs(4) //> res10: Double = 3.0
|
|
44 |
|
|
45 |
// 4.4: Square Roots by Newton's Method
|
|
46 |
|
|
47 |
def sqrtIter(guess: Double, x: Double): Double =
|
|
48 |
if (isGoodEnough(guess, x)) guess
|
|
49 |
else sqrtIter(improve(guess, x), x) //> sqrtIter: (guess: Double, x: Double)Double
|
|
50 |
|
|
51 |
def improve(guess: Double, x: Double) =
|
|
52 |
(guess + x / guess) / 2 //> improve: (guess: Double, x: Double)Double
|
|
53 |
|
|
54 |
def isGoodEnough(guess: Double, x: Double) =
|
|
55 |
abs(square(guess) - x) < 0.001 //> isGoodEnough: (guess: Double, x: Double)Boolean
|
|
56 |
|
|
57 |
//def sqrt(x: Double) = sqrtIter(1.0, x)
|
|
58 |
//sqrt(25)
|
|
59 |
|
|
60 |
// 4.5: Nested Functions
|
|
61 |
|
|
62 |
def sqrt(x: Double) = {
|
|
63 |
def sqrtIter(guess: Double): Double =
|
|
64 |
if (isGoodEnough(guess)) guess
|
|
65 |
else sqrtIter(improve(guess))
|
|
66 |
def improve(guess: Double) =
|
|
67 |
(guess + x / guess) / 2
|
|
68 |
def isGoodEnough(guess: Double) =
|
|
69 |
abs(square(guess) - x) < 0.001
|
|
70 |
sqrtIter(1.0)
|
|
71 |
} //> sqrt: (x: Double)Double
|
|
72 |
sqrt(25) //> res11: Double = 1.0
|
|
73 |
|
|
74 |
// 4.6: Tail Recursion
|
|
75 |
|
|
76 |
def gcd(a: Int, b: Int): Int = if (b == 0) a else gcd(b, a % b)
|
|
77 |
//> gcd: (a: Int, b: Int)Int
|
|
78 |
|
|
79 |
gcd(21, 36) //> res12: Int = 3
|
|
80 |
|
|
81 |
} |