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
}
}