updated default tip
authorChristian Urban <christian.urban@kcl.ac.uk>
Thu, 11 Dec 2025 13:23:30 +0000
changeset 507 2e3945ff7b66
parent 506 28f78d9081d7
updated
progs/lecture4.scala
progs/lecture5.scala
slides/slides04.pdf
slides/slides04.tex
slides/slides05.pdf
slides/slides05.tex
--- a/progs/lecture4.scala	Fri Dec 05 10:20:00 2025 +0000
+++ b/progs/lecture4.scala	Thu Dec 11 13:23:30 2025 +0000
@@ -37,7 +37,7 @@
 length(List(1, 2, 3, 4))
 
 
-length[String](List(1, 2, 3, 4))
+length[Int](List(1, 2, 3, 4))
 
 
 def map[A, B](lst: List[A], f: A => B): List[B] = lst match {
@@ -247,9 +247,13 @@
 // Tail recursion
 //================
 
+@tailrec
 def fact(n: BigInt): BigInt = 
   if (n == 0) 1 else n * fact(n - 1)
 
+fact(3) -> fact(2)
+
+
 
 fact(10)          
 fact(1000)        
@@ -260,7 +264,7 @@
   if (n == 0) acc else factT(n - 1, n * acc)
 
 
-factT(1000,1)
+factT(10,1)
 println(factT(100000, 1))
 
 
@@ -303,14 +307,17 @@
   case _ :: tail => 1 + length(tail)
 }
 
-length(List.fill(100000)(1))
+val long_lst = List.fill(100000)(1)
+
+length(long_lst)
+long_lst.length
 
 def lengthT[A](xs: List[A], acc : Int = 0) : Int = xs match {
   case Nil => acc
   case _ :: tail => lengthT(tail, 1 + acc)
 }
 
-lengthT(List.fill(100000)(1))
+      
 
 
 
@@ -628,15 +635,15 @@
 // Regular expressions - the power of DSLs in Scala
 //==================================================
 
-abstract class Rexp
-case object ZERO extends Rexp                     // nothing
-case object ONE extends Rexp                      // the empty string
-case class CHAR(c: Char) extends Rexp             // a character c
-case class ALT(r1: Rexp, r2: Rexp) extends Rexp   // alternative  r1 + r2
-case class SEQ(r1: Rexp, r2: Rexp) extends Rexp   // sequence     r1 . r2  
-case class STAR(r: Rexp) extends Rexp             // star         r*
-
-
+enum Rexp {
+  case ZERO                      // nothing
+  case ONE                       // the empty string
+  case CHAR(c: Char)             // a character c
+  case ALT(r1: Rexp, r2: Rexp)   // alternative  r1 + r2
+  case SEQ(r1: Rexp, r2: Rexp)   // sequence     r1 . r2  
+  case STAR(r: Rexp)             // star         r*
+}
+import Rexp._
 
 // writing (ab)* in the format above is 
 // tedious
@@ -676,7 +683,15 @@
 val number = sign ~ digit ~ digit.% 
 
 
+extension (n: Int) {
+  def ++ = n + 1
+}
 
+def --(n: Int) = n - 1
+
+val n = 3
+val m = (n.++)  
+val k = --(n)  
 
 // In mandelbrot.scala I used complex (imaginary) numbers 
 // and implemented the usual arithmetic operations for complex 
--- a/progs/lecture5.scala	Fri Dec 05 10:20:00 2025 +0000
+++ b/progs/lecture5.scala	Thu Dec 11 13:23:30 2025 +0000
@@ -1,12 +1,36 @@
 // Scala Lecture 5
 //=================
 
-def foo(n: Int) = ???
+// (Immutable) OOP
+
+
+import scala.util._      // Try,...
+import io.Source         // fromURL
+
+val my_url = "https://urbanchr.github.io/"
+
+
+
+
+Source.fromURL(my_url)(using "ISO-8859-1").mkString
+
+Try(Source.fromURL(my_url)(using "ISO-8859-1").mkString).toOption
 
-fop(10)
+Try(Source.fromURL(my_url)(using "ISO-8859-1").mkString).getOrElse("")
+
+
+// the same for files
+
+Try(Some(Source.fromFile("test.txt")(using "ISO-8859-1").mkString)).getOrElse(None)
 
-List.fill(1)(100)
-// (Immutable) OOP
+// how to implement a function for reading 
+// (lines) from files...
+//
+def get_contents(name: String) : List[String] = 
+  Try(Source.fromURL(name)(using "ISO-8859-1").getLines().toList).getOrElse(Nil)
+
+get_contents(my_url)
+
 
 // Object Oriented Programming in Scala
 // =====================================
Binary file slides/slides04.pdf has changed
--- a/slides/slides04.tex	Fri Dec 05 10:20:00 2025 +0000
+++ b/slides/slides04.tex	Thu Dec 11 13:23:30 2025 +0000
@@ -178,7 +178,7 @@
     %%Office: & N\liningnums{7.07} (North Wing, Bush House)\bigskip\\
     Slides \& Code: & KEATS\bigskip\\
 
-    Office Hour: &  Thursdays 13:00 -- 14:00 (send email first)\\
+    Office Hour: &  Fridays 11:30 -- 12:30 (send email first)\\
     Location: & N7.07 (North Wing, Bush House)\bigskip\\
 
     %Pollev: & \texttt{\alert{https://pollev.com/cfltutoratki576}}\\  \\
@@ -516,6 +516,19 @@
 \end{frame}
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{frame}
+\end{frame}
+\begin{frame}
+\end{frame}
+\begin{frame}
+\end{frame}
+\begin{frame}
+\end{frame}
+\begin{frame}
+\end{frame}
+\begin{frame}
+\end{frame}
+
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     
 %\begin{frame}[c,fragile]
Binary file slides/slides05.pdf has changed
--- a/slides/slides05.tex	Fri Dec 05 10:20:00 2025 +0000
+++ b/slides/slides05.tex	Thu Dec 11 13:23:30 2025 +0000
@@ -161,11 +161,12 @@
   \begin{center}
   \begin{tabular}{ll}
     Email:  & christian.urban at kcl.ac.uk\\
+            & I will try to stay on top of my inbox during Christmas\medskip\\
     %Office: & N\liningnums{7.07} (North Wing, Bush House)\bigskip\\
     Slides \& Code: & KEATS\bigskip\\
 
-    Office Hour: &  Thursdays 13:00 -- 14:00\\
-    Location: & N7.07 (North Wing, Bush House)\bigskip\\
+    %%Office Hour: &  Thursdays 13:00 -- 14:00\\
+    %%%Location: & N7.07 (North Wing, Bush House)\bigskip\\
 
     %Pollev: & \texttt{\alert{https://pollev.com/cfltutoratki576}}\\  \\
   \end{tabular}