scala/recs.scala
changeset 198 d93cc4295306
parent 195 f06aa4e1c25b
child 200 8dde2e46c69d
equal deleted inserted replaced
197:0eef61c56891 198:d93cc4295306
     7 }
     7 }
     8 
     8 
     9 case object Z extends Rec {
     9 case object Z extends Rec {
    10   override def eval(ns: List[Int]) = ns match {
    10   override def eval(ns: List[Int]) = ns match {
    11     case n::Nil => 0
    11     case n::Nil => 0
    12     case _ => throw new IllegalArgumentException("Z: args")
    12     case _ => throw new IllegalArgumentException("Z args: " + ns)
    13   }
    13   }
    14 } 
    14 } 
    15 
    15 
    16 case object S extends Rec {
    16 case object S extends Rec {
    17   override def eval(ns: List[Int]) = ns match {
    17   override def eval(ns: List[Int]) = ns match {
    18     case n::Nil => n + 1
    18     case n::Nil => n + 1
    19     case _ => throw new IllegalArgumentException("S: args")
    19     case _ => throw new IllegalArgumentException("S args: " + ns)
    20   }
    20   }
    21 } 
    21 } 
    22 
    22 
    23 case class Id(n: Int, m: Int) extends Rec {
    23 case class Id(n: Int, m: Int) extends Rec {
    24   override def eval(ns: List[Int]) = 
    24   override def eval(ns: List[Int]) = 
    25     if (ns.length == n && m < n) ns(m)
    25     if (ns.length == n && m < n) ns(m)
    26     else throw new IllegalArgumentException("Id: args")
    26     else throw new IllegalArgumentException("Id args: " + ns + "," + n + "," + m)
    27 }
    27 }
    28 
    28 
    29 case class Cn(n: Int, f: Rec, gs: List[Rec]) extends Rec {
    29 case class Cn(n: Int, f: Rec, gs: List[Rec]) extends Rec {
    30   override def eval(ns: List[Int]) = 
    30   override def eval(ns: List[Int]) = 
    31     if (ns.length == n) f.eval(gs.map(_.eval(ns)))
    31     if (ns.length == n) f.eval(gs.map(_.eval(ns)))