--- a/progs/lecture1.scala Thu Nov 10 01:30:15 2016 +0000
+++ b/progs/lecture1.scala Thu Nov 10 01:30:45 2016 +0000
@@ -1,16 +1,16 @@
// Lecture 1
-//==========
+//===========
-//**Assignments (values)**
-//(variable names should be lower case)
-//=====================================
+// Value assignments
+// (variable names should be lower case)
+//======================================
val x = 42
val y = 3 + 4
-//**Collections**
-//===============
+// Collections
+//=============
List(1,2,3,1)
Set(1,2,3,1)
@@ -26,13 +26,13 @@
1::2::3::Nil
List(1, 2, 3) ::: List(4, 5, 6)
-//**Printing/Strings**
-//====================
+// Printing/Strings
+//==================
println("test")
-val tst = "This is a " + "test"
+val tst = "This is a " ++ "test\n"
println(tst)
val lst = List(1,2,3,1)
@@ -43,26 +43,39 @@
// some methods take more than one argument
println(lst.mkString("[", ",", "]"))
-//**Conversion methods**
-//======================
+// Conversion methods
+//====================
List(1,2,3,1).toString
List(1,2,3,1).toSet
"hello".toList
1.toDouble
-//**Types**
-//=========
+
+List(1,2,3,4).reverse
+
+// Types
+//=======
+
+/* Scala is a strongly typed language
+
+ * Base types
-// Int, Long, BigInt, Float, Double
-// String, Char
-// List[Int], Set[Double]
-// Pairs: (Int, String)
-// List[(BigInt, String)]
+ Int, Long, BigInt, Float, Double
+ String, Char
+ Boolean
+
+ * Compound types
+ List[Int],
+ Set[Double]
+ Pairs: (Int, String)
+ List[(BigInt, String)]
+*/
-//**Smart Strings**
-//=================
+// Smart Strings
+//===============
+
println(">\n<")
println(""">\n<""")
@@ -81,8 +94,8 @@
println(lyrics)
-//**Pairs/Tuples**
-//================
+// Pairs/Tuples
+//==============
val p = (1, "one")
p._1
@@ -91,52 +104,100 @@
val t = (4,1,2,3)
t._4
-//**Function Definitions**
-//========================
+// Hello World
+//=============
+
+// show an example of a stand-alone scala file
+// remind that in the course work you are asked a
+// plain scala "work-sheet"
+
+
+
+// Function Definitions
+//======================
def square(x: Int): Int = x * x
-
+square(6)
-//**Ifs control structures**
-//==========================
+// If control structure
+//======================
def fact(n: Int): Int =
if (n == 0) 1 else n * fact(n - 1)
-
-
+/* boolean operators
+
+ == equals
+ ! not
+ && || and, or
+*/
def fact2(n: BigInt): BigInt =
if (n == 0) 1 else n * fact2(n - 1)
+fact2(150)
+
+
def fib(n: Int): Int =
if (n == 0) 1 else
- if (n == 1) 1 else fib(n - 1) + f(n - 2)
+ if (n == 1) 1 else fib(n - 1) + fib(n - 2)
+
+
+//gcd - Euclid's algorithm
+
+def gcd(a: Int, b: Int): Int =
+ if (b == 0) a else gcd(b, a % b)
+
+gcd(48, 18)
-//a recursive function
-def gcd(x: Int, y: Int): Int = 2 //???
+// String Interpolations
+//=======================
-//**String Interpolations**
-//=========================
+val n = 3
+println("The square of " + n + " is " + square(n) + ".")
+
+println(s"The square of ${n} is ${square(n)}.")
+
-//**Assert/Testing**
-====================
+def gcd_db(a: Int, b: Int): Int = {
+ println(s"Function called with ${a} and ${b}.")
+ if (b == 0) a else gcd_db(b, a % b)
+}
+
+gcd_db(48, 18)
-//**For-Maps (not For-Loops)**
-//============================
+
+// Assert/Testing
+//================
+
+// For-Comprehensions (not For-Loops)
+//====================================
for (n <- (1 to 10).toList) yield square(n)
-for (n <- (1 to 10).toList; m <- (1 to 10).toList) yield m * n
+for (n <- (1 to 10).toList;
+ m <- (1 to 10).toList) yield m * n
+
-val mtable = for (n <- (1 to 10).toList; m <- (1 to 10).toList) yield m * n
+val mult_table =
+ for (n <- (1 to 10).toList;
+ m <- (1 to 10).toList) yield m * n
-mtable.sliding(10,10).toList.mkString(
+mult_table.sliding(10,10).mkString("\n")
-// webpages
+// with patterns
+
+for ((m, n) <- List((1, 4), (2, 3), (3, 2), (4, 1))) yield m + n
+
+for (p <- List((1, 4), (2, 3), (3, 2), (4, 1))) yield p._1 + p._2
+
+
+
+// Webpages
+//==========