反復と状態#
現在のCNLでは、回数を制限したRepeat Zoneで状態を更新できます。NodeのRepeat Input/Repeat Outputと、Codeのrepeat_zoneは同じ構造を表します。
function increment(state: Float, delta: Float): Float {
return state + delta;
}
function main(): Float {
return repeat_zone(increment, 1, 4, 2);
}
この例の結果は9です。初期値1から、2を足す処理を四回行います。
repeat_zone(step, 初期値, 回数, 固定入力...)の順に書きます。stepの最初の入力が前回の状態、その後ろが固定入力です。stepの戻り値は状態と同じ型にします。回数は現在の実装で受け付ける、検証済みの静的な非負整数です。ゼロ回なら初期値を返します。
このstepには反復番号を自動で渡しません。一般のrepeatとはstepの契約が異なるので、名前だけを置き換えないでください。複数の独立した状態、動的な回数、反復番号の公開、一般のfor・whileは残る実装です。
有限Kernelの係数を順番に扱うfold_kernelもあります。順序を持つ状態更新であり、順序を無視する合計や任意のノード循環とは区別します。Nodeでの操作はRepeat Zoneの使い方を参照してください。