mimiumのif文は選択的にブランチを実行するので、例えば
fn dsp(){<!-- line:11 -->
if (random()){<!-- line:12 -->
gen_a() <!-- line:13 -->
}else{<!-- line:14 -->
gen_b()<!-- line:15 -->
}<!-- line:16 -->
}<!-- line:17 -->のようなコードを書くと、gen_aとgen_bはそれぞれランダムなサンプルレートで内部を更新するという形になってしまう。
Faustのselectプリミティブが両方のブランチを常に評価する戦略を取っている理由はこれを避けるため。
ただ、そういう意味ではOndemand primitive for Faustをmimiumのif文で再現できるとも言える。
つまり、アップサンプルやダウンサンプルを組み込み関数を新たに定義することなく、ライブラリで定義できる。(サンプルレートの動的な変化とかにどう対応するんだよという問題はあるけど)
内部状態のimplicitな更新は意味論的に結構曖昧なところなのでなんとかしたいなあ