当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Scala control.TailCalls用法及代码示例


用法:

object TailCalls

此对象导出的方法通过蹦床实现尾调用。尾调用方法必须使用 done 返回其结果或使用 tailcall 调用下一个方法。两者都返回一个TailRec 对象。可以使用方法 resultTailrec 值中检索尾调用函数的评估结果。按照“带有免费 Monads 的 Stackless Scala”https://blog.higher-order.com/assets/trampolines.pdf 中的说明实现

这是一个使用示例:

import scala.util.control.TailCalls._

def isEven(xs: List[Int]): TailRec[Boolean] =
  if (xs.isEmpty) done(true) else tailcall(isOdd(xs.tail))

def isOdd(xs: List[Int]): TailRec[Boolean] =
 if (xs.isEmpty) done(false) else tailcall(isEven(xs.tail))

isEven((1 to 100000).toList).result

def fib(n: Int): TailRec[Int] =
  if (n < 2) done(n) else for {
    x <- tailcall(fib(n - 1))
    y <- tailcall(fib(n - 2))
  } yield x + y

fib(40).result

源码:

TailCalls.scala

相关用法


注:本文由纯净天空筛选整理自scala-lang.org大神的英文原创作品 control.TailCalls。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。