progs/lecture3.scala
changeset 449 d67c5f7177a6
parent 448 db2a3e3287a9
child 481 e03a0100ec46
equal deleted inserted replaced
448:db2a3e3287a9 449:d67c5f7177a6
     1 // Scala Lecture 3
     1 // Scala Lecture 3
     2 //=================
     2 //=================
     3 
     3 
       
     4 // - Higher-Order functions
     4 // - maps (behind for-comprehensions)
     5 // - maps (behind for-comprehensions)
       
     6 
     5 // - Pattern-Matching
     7 // - Pattern-Matching
       
     8 
       
     9 def fib(n: Int) : Int = n match {
       
    10   case 0 => 1
       
    11   case 1 =>  1
       
    12   case n => fib(n - 1) + fib(n - 2)
       
    13 }
       
    14 
     6 
    15 
     7 abstract class Rexp
    16 abstract class Rexp
     8 case object ZERO extends Rexp                      // matches nothing
    17 case object ZERO extends Rexp                      // matches nothing
     9 case object ONE extends Rexp                       // matches the empty string
    18 case object ONE extends Rexp                       // matches the empty string
    10 case class CHAR(c: Char) extends Rexp              // matches a character c
    19 case class CHAR(c: Char) extends Rexp              // matches a character c
   308 
   317 
   309 
   318 
   310 // Sudoku
   319 // Sudoku
   311 //========
   320 //========
   312 
   321 
       
   322 // uses Strings for games
   313 
   323 
   314 type Pos = (Int, Int)
   324 type Pos = (Int, Int)
   315 val emptyValue = '.'
   325 val emptyValue = '.'
   316 val maxValue = 9
   326 val maxValue = 9
   317 
   327 
   347   allValues.diff(toAvoid(game, pos))
   357   allValues.diff(toAvoid(game, pos))
   348 
   358 
   349 def search(game: String): List[String] = {
   359 def search(game: String): List[String] = {
   350   if (isDone(game)) List(game)
   360   if (isDone(game)) List(game)
   351   else 
   361   else 
   352     candidates(game, emptyPosition(game)).par.
   362     candidates(game, emptyPosition(game)).
   353       map(c => search(update(game, empty(game), c))).toList.flatten
   363       map(c => search(update(game, empty(game), c))).flatten
   354 }
   364 }
   355 
   365 
   356 
   366 
   357 def search1T(games: List[String]): Option[String] = games match {
   367 def search1T(games: List[String]): Option[String] = games match {
   358   case Nil => None
   368   case Nil => None