diff -r b28e976dcd65 -r ef37fb04a343 progs/lecture1.scala --- a/progs/lecture1.scala Mon Nov 10 16:07:36 2025 +0000 +++ b/progs/lecture1.scala Mon Nov 10 16:24:46 2025 +0000 @@ -1,9 +1,9 @@ // Scala Lecture 1 //================= -println("Hello World") - +// Topics +//-------- // - List, Sets, Ints, Strings, ... // - Value assignments (val vs var) // - How to define functions? (What is returned?) @@ -11,7 +11,6 @@ // - For-Comprehensions (guards, with/without yield) // - String-Interpolations // -// @@ -44,7 +43,6 @@ // picking an element in a list val lst = List(1, 2, 3, 1) -val lst = List(1, 2, 3, 1) val lst1 = 0 :: lst @@ -74,7 +72,6 @@ (1 to 10).toList (1 to 10).toList.toString -(1 until 10).toList // Equality in Scala is structural @@ -229,6 +226,8 @@ } average(List(1,2,3,4,56)) + + def incr(x: Int) : Int = x + 1 def double(x: Int) : Int = x + x def square(x: Int) : Int = x * x @@ -252,32 +251,24 @@ - -def len(xs: List[Int]) : Int = xs match { - case Nil => 0 - case x :: xs => 1 + len(xs) -} - -len(List(1,2,3,4,1)) - - - // If-Conditionals //================= -// - Scala used to not have a then-keyword +// - Scala used to *not* have a then-keyword // - !!both if-else branches need to be present!! def fact(n: Int) : Int = if (n == 0) 1 else n * fact(n - 1) +fact(5) + // Scala 3 introduced if-then-else - maybe people // desperately needed it def fact(n: Int) : Int = if n == 0 then 1 else n * fact(n - 1) -fact(5) + fact(150) /* boolean operators @@ -351,10 +342,7 @@ m <- (1 to 10).toList) yield n * m println(mult_table.mkString(",")) -mult_table.sliding(10,10).toList.mkString(",") - - -.mkString("\n") +mult_table.sliding(10,10).toList.mkString("\n") // for-comprehensions also work for other // collections @@ -362,7 +350,6 @@ for (n <- Set(10,12,4,5,7,8,10)) yield n * n for (n <- (1 to 10)) yield { - n * n } @@ -381,9 +368,9 @@ val lst = List((1, 4), (2, 3), (3, 2), (4, 1)) -` yield m + n +for (p <- lst) yield p._1 + p._2 -for (p <- lst) yield p._1 + p._2 +for ((m, n) <- lst) yield m + n // general pattern of for-yield @@ -400,9 +387,9 @@ // with only a side-effect (no list is produced), // has no "yield" -val xs = for (n <- (1 to 10).toList) yield println(n * n) +val xs = for (n <- (1 to 10).toList) println(n * n) -xs.tail +xs.tail // error val foo = for (n <- (1 to 10).toList) yield n * n @@ -451,7 +438,7 @@ // Aside: concurrency -// scala-cli --extra-jars scala-parallel-collections_3-1.0.4.jar +// scala --extra-jars scala-parallel-collections_3-1.2.0.jar for (n <- (1 to 10)) println(n) @@ -498,9 +485,9 @@ def test() = { var cnt = 0 - for(i <- (1 to 100_000)) cnt += 1 + for(i <- (1 to 100_000).par) cnt += 1 - println(s"Should be 100000: $cnt") + println(s"Should be 100_000: $cnt") } test()