progs/expr.scala
author Christian Urban <christian.urban@kcl.ac.uk>
Thu, 03 Nov 2022 11:30:09 +0000
changeset 429 440836d805e3
parent 360 1bd1e9cd8c72
permissions -rw-r--r--
updated
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
360
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     1
// Scala is about expressions
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     2
//
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     3
//
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     4
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     5
1 + 2
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     6
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     7
val r1 = 1 + 2
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     8
val r2 = r1 * r1
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
     9
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    10
val new_list = 
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    11
  for (n <- (1 to 10).toList) yield n * n
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    12
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    13
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    14
def my_not_equal(x: Int, y: Int) : Boolean = {
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    15
 !(x == y)
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    16
}
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    17
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    18
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    19
// why return is not needed in Scala
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    20
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    21
def sum_even(ls: List[Int]): Int = {
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    22
  val aux = for (x <- ls) yield {
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    23
    if (x % 2 == 0) x else 0
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    24
  }
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    25
  aux.sum
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    26
}
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    27
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    28
sum_even(List(1,2,3,4,5,6))
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    29
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    30
def sum_return(ls: List[Int]): Int = {
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    31
  val aux = for (x <- ls) yield {
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    32
    if (x % 2 == 0) (return x) else (return 0)
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    33
  }
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    34
  aux.sum[Int]
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    35
}
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    36
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    37
sum_return(List(2,3,4,5,6))
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    38
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    39
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    40
// replace subexpressions should not 
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    41
// change the meaning, but with return it does:
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    42
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    43
def sq1(n: Int): Int = n * n
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    44
def sq2(n: Int): Int = return n * n
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    45
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    46
def sum_squares(ls: List[Int]): Int = {  
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    47
  (for (n <- ls) yield (return n * n)).sum[Int]
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    48
}
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    49
1bd1e9cd8c72 updated
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff changeset
    50
sum_squares(List(1,2,3,4,5,6))