scala/cats2

Eval and Trampolining

wefree 2023. 7. 29. 11:43

scala with cats 에 나오는 Eval.defer 를 이용한 factorial 구현 

def factorial(n: BigInt): Eval[BigInt] =
  if(n == 1) {
    Eval.now(n)
  } else {
    Eval.defer(factorial(n - 1).map(_ * n))
  }

factorial(50000).value

 

 

내가 생각해본 Eval.defer 를 사용하지 않고 factorial 구현 

  def factorial(n: BigInt): Eval[BigInt] = {
    if (n == 1) Eval.now(n)
    else {
      for {
        x <- Eval.now(n)
        y <- factorial(n-1)
      } yield x * y
    }
  }