progs/lecture4.scala
changeset 418 fa7f7144f2bb
parent 384 6e1237691307
child 449 d67c5f7177a6
--- a/progs/lecture4.scala	Tue Dec 07 01:35:00 2021 +0000
+++ b/progs/lecture4.scala	Tue Dec 07 23:17:51 2021 +0000
@@ -1,6 +1,36 @@
 // Scala Lecture 4
 //=================
 
+// tail-recursion
+// polymorphic types
+// implicits
+
+import scala.annotation.tailrec
+
+@tailrec 
+def fact(n: BigInt): BigInt = 
+  if (n == 0) 1 else n * fact(n - 1)
+      
+@tailrec      
+def factT(n: BigInt, acc: BigInt): BigInt =
+  if (n == 0) acc else factT(n - 1, n * acc)
+
+
+println(factT(1000000), 1)) 
+
+
+def foo[A](args: List[A]) = ???
+
+foo(List("1","2","3","4"))
+import scala.annotation.tailrec
+
+
+// from knight1.scala
+def first(xs: List[Pos], f: Pos => Option[Path]) : Option[Path] = ???
+
+// should be
+def first[A, B](xs: List[A], f: A => Option[B]) : Option[B] = ???
+
 
 // expressions (essentially trees)
 
@@ -252,7 +282,6 @@
 // Tail recursion
 //================
 
-@tailrec
 def fact(n: BigInt): BigInt = 
   if (n == 0) 1 else n * fact(n - 1)
 
@@ -519,7 +548,7 @@
   def increment = s.map(c => (c + 1).toChar) 
 }
 
-"HAL".increment
+"HAL".increment.map(_.toInt)
 
 
 // Abstract idea:
@@ -580,7 +609,7 @@
 implicit def string2rexp(s: String): Rexp = 
   charlist2rexp(s.toList)
 
-val r1 = STAR("hello")
+val r1 = STAR("ab")
 val r2 = STAR("hello") | STAR("world")