Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- abstract class Nat {
- def isZero: Boolean;
- def predecessor: Nat;
- def succesor: Nat = new Succ(this)
- def + (that: Nat): Nat;
- def - (that: Nat): Nat;
- override def toString: String = {
- var i = 0;
- var n: Nat = this;
- while(n != Zero){
- n = n.predecessor
- i = i + 1
- }
- i + ""
- }
- }
- object Zero extends Nat{
- def isZero = true
- def predecessor = throw new Error("negative number")
- def + (that: Nat) = that;
- def - (that: Nat) = if(that == Zero) 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
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement