• Как в Scala обобщить Int и BigInt?

    sheerluck
    @sheerluck
    import Integral.Implicits._
    
    object Main {
     
      def half[T:Integral](a:T) : T = a / 2.asInstanceOf[T]
      def odd[T:Integral](a:T) : Boolean = a % 2.asInstanceOf[T] == 1.asInstanceOf[T]
      
      def mult_acc11[T:Integral](n:T, a:T, r:T = 0) : T = (odd(n), n) match {
        case (true, 1) => r + a
        case (true, _) => mult_acc11(half(n), a + a, r + a)
        case (_,_)     => mult_acc11(half(n), a + a, r)
      }
      
      def main(args: Array[String]): Unit = {
        def f(n: Int) = (BigInt(1) to BigInt(n)).product
        println(mult_acc11(7,5))
      }
    }