diff options
-rw-r--r-- | Scala/sandbox/0-main.scala | 1 | ||||
-rw-r--r-- | Scala/sandbox/6-natural.scala | 33 |
2 files changed, 34 insertions, 0 deletions
diff --git a/Scala/sandbox/0-main.scala b/Scala/sandbox/0-main.scala index 2092d9d..99ee4ba 100644 --- a/Scala/sandbox/0-main.scala +++ b/Scala/sandbox/0-main.scala @@ -8,5 +8,6 @@ object Main extends App { Rationals.run IntSet.run IntList.run + Natural.run } diff --git a/Scala/sandbox/6-natural.scala b/Scala/sandbox/6-natural.scala new file mode 100644 index 0000000..01af1be --- /dev/null +++ b/Scala/sandbox/6-natural.scala @@ -0,0 +1,33 @@ +// Peano numbers +object Natural +{ + abstract class Nat + { + def isZero: Boolean + def predecessor: Nat + def successor = new Succ(this) + def + (that: Nat): Nat + def - (that: Nat): Nat + } + + + object Zero extends Nat + { + def isZero = true + def predecessor = throw new Error("0.predecessor") + def + (that: Nat) = that + def - (that: Nat) = if (that.isZero) this else throw new Error("negative number") + } + + class Succ(n: Nat) extends Nat + { + def isZero = false + def predecessor = n + def + (that: Nat) = new Succ(n + that) + def - (that: Nat) = if (that.isZero) this else n - that.predecessor + } + + def run = { + println("Natural") + } +} |