読者です 読者をやめる 読者になる 読者になる

Lambdaカクテル

ソフトウェア開発者です.玉石混淆です.

scalazのunfoldで失敗漸化式

scala scalaz

scalazではfoldの逆操作としてunfoldが用意されている。

この関数は初期値と B => Option[(A, B)]の関数を取り、そのタプルのB成分を再び関数に適用していくことで、Aから成るStreamを構成する。

Githubscalaz/core/src/main/scala/scalaz/StreamT.scalaによれば、

gist8886250

このような定義がなされている。

失敗する可能性のある関数を繰り返し、失敗するまで、もしくはそれまでの一定回数の試行をStreamで得ることができる。

0から100までの数字nを受け取り1を加えたSome(n+1)を返すが、入力値がそれ以外の場合はNoneを返す関数failableを考える。

unfold_example1

さて、初期値が0だとして、失敗するまで次値を計算し続けてみる:

unfold_example1

このように、漸化式チックなものを利用するときに使える。