wrongwrong163377.hatenablog.com
qiita.com
続きです。
Arrowとは
Kotlinで関数型プログラミングをするためのライブラリです。
以下の記事で知りました。
techblog.picappinc.jp
トランポリンの実装と使い方
GitHubに実装と使い方(相互再帰で奇偶判定)が上がっています。
github.com
github.com
実装してみた
簡単な階乗を実装してみました。
import arrow.free.Trampoline import arrow.free.TrampolineF import arrow.free.map import arrow.free.runT import java.math.BigInteger fun fact(n: Int): TrampolineF<BigInteger> = when(n < 2){ true -> Trampoline.done(BigInteger.ONE) else -> Trampoline.defer { fact(n-1) }.map { x -> x * n.toBigInteger() } } fun main(){ val x = fact(10000).runT() println(x) }
実装の続き
トランポリン含め幾つかの末尾再帰アルゴリズムを実装したものをGitHubに上げています。
github.com
*1:執筆時点の最新版