當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。