入力を段階的に受け取り、段階的に出力を生成するステートフル アルゴリズムがあります。入力と出力の数は無関係です。つまり、入力は 0 個以上の出力を生成する可能性があります。
私はそれをEnumeratee
Play フレームワークで に変換しようとしていますが、始めるのに苦労しています。
私のアルゴリズムには、ローカルの可変状態と同期操作があり、次のようになります
var state = 'foo
var i = input()
while (i != null) {
if (state == 'foo && i >= 0) {
// 2 outputs, and change state
output(i - 2)
output(i * 3)
state = 'bar
} else if (state == 'foo) {
// error
error("expected >= 0")
} else if (state == 'bar) {
// 0 outputs, and change state
state = 'foo
}
... // etc
i = input()
}
if (state != 'bar) {
error("unexpected end")
}
map
、filter
などの実装を で研究しましたが、Enumeratee.scala
ある程度は理解しています。しかし、もっと複雑なものの独自の実装を作成する方法がわかりません。
このアルゴリズムを に変換する方法を説明/実演していただけEnumeratee
ますか?