Нечисловой тип, возвращаемый функцией карри - PullRequest
0 голосов
/ 12 июня 2019

Новое в Scala и функциональном программировании в целом.Получите следующий фрагмент кода, который означает вычисление суммы за закрытый интервал Int с.Реализован как хвостовой рекурсивный метод (sum1), так и не хвостовой рекурсивный метод (sum2).

package test

import scala.annotation.tailrec

object Currying extends App{

  def sum1(f:Int=>Int)(a:Int, b:Int): (Int, Int) => Int = {
    require(a <=  b, "Received a=" + a + " and b=" + b)
    @tailrec
    def sum(a:Int, acc:Int) : Int = {
      if(a > b) acc
      else sum(a+1, acc + f(a))
    }
    sum
  }

  println("sum1(x=>x*x)(1, 4)=" + sum1(x=>x*x)(1, 4))
  println("sum1(x=>x*x*x)(1, 4)=" + sum1(x=>x*x*x)(1, 4))

  def sum2(f:Int=>Int)(a:Int, b:Int): Int => Int = {
    def sum(a:Int) : Int = {
      if(a > b) 0
      else f(a) + sum(a+1)
    }
    sum
  }

  println("sum2(x=>x*x)(1, 4)=" + sum2(x=>x*x)(1, 4))
  println("sum2(x=>x*x*x)(1, 4)=" + sum2(x=>x*x*x)(1, 4))

}

Однако распечатки возвращают , а не фактические Int с, но то, что кажется самой функцией:

sum(x=>x*x)(1, 4)=week2.Currying$$$Lambda$12/1468177767@3d24753a
sum(x=>x*x*x)(1, 4)=week2.Currying$$$Lambda$12/1468177767@67b64c45
sum2(x=>x*x)(1, 4)=week2.Currying$$$Lambda$15/1626877848@2f7a2457
sum2(x=>x*x*x)(1, 4)=week2.Currying$$$Lambda$15/1626877848@6108b2d7

Process finished with exit code 0

Я явно делаю что-то тупое в карри, но я не могу понять, насколько я понимаю.

...