Skip to content

Instantly share code, notes, and snippets.

@rgordeev
Created November 16, 2015 12:49
Show Gist options
  • Save rgordeev/e80f850c4325ce6bad6c to your computer and use it in GitHub Desktop.
Save rgordeev/e80f850c4325ce6bad6c to your computer and use it in GitHub Desktop.
scala homework #3
// Натуральные числа
abstract class Nat{
// является ли нулем
def isZero: Boolean
// возвращает предыдущее натуральное число
def predecessor: Nat
// возвращает следущее натуральное число
def successor: Nat = new Succ(this)
// возвращает результат сложения с that
def +(that: Nat): Nat
// возвращает результат вычитания that
def -(that: Nat):Nat
}
object Zero extends Nat{
// является ли нулем
override def isZero: Boolean = true
// возвращает предыдущее натуральное число
override def predecessor: Nat = throw new Error("нет предыдущего числа у Zero")
// возвращает результат сложения с that
override def +(that: Nat): Nat = that
// возвращает результат вычитания that
override def -(that: Nat): Nat = if(that.isZero) this else throw new Error("результат не может быть отрицательным числом")
}
class Succ(n: Nat) extends Nat{
// является ли нулем
override def isZero: Boolean = false
// возвращает предыдущее натуральное число
override def predecessor: Nat = n
// возвращает результат сложения с that
override def +(that: Nat): Nat = new Succ(n + that)
// возвращает результат вычитания that
override def -(that: Nat): Nat = n - that.predecessor
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment