Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
package org.example
trait Num {
def value: Int
}
object Zero extends Num {
val value = 0
}
case class Succ(arg: Num) extends Num {
val value = arg.value + 1
}
case class Proj( idx: Int, args: Num*) extends Num {//буду считать, что n содержится в args
require(!args.isEmpty)
require(0 <= idx && idx < args.size)
def value = args(idx) value
}
case class Sum(a: Num, b: Num) extends Num {
def value = (b match {
case Zero => a
case Succ(num) => Succ(Proj(2, a, num, Sum(a, num)))
}) value
}
object ExampleApp extends App {
val one = Succ(Zero)
val two = Succ(Succ(Zero))
println(Sum(one, two) value)
}
Рекурсивные функции — создание собственной математики (Scala)