diff --git a/content/otopoiesis.md b/content/otopoiesis.md index 0c550991..c173b006 100644 --- a/content/otopoiesis.md +++ b/content/otopoiesis.md @@ -186,18 +186,25 @@ fn track_regions(regions:[{start:float,dur:float,generator:()->float}]){ let content = `{ phasor(Param!("freq",20,20000)) } -fn Track(name:string, content:()->`float)-> ()->`float{ - || `{ $content |> probe_to_track!(name) } +fn Track(name:string, content:()->`float)->`float{ + `{ + //stack is cleared and new track ui is placed on top of the stack + $content |> probe_to_track!(name) + } } -fn master(tracks:[()->`float])->()->`float{ - Track!("master", ||`{ map(tracks,|t| t!() ) |> sum }) +fn master(tracks:[`float])->`float{ + Track!("master", `{ lift_array(map(tracks,|t| $t ) ) |> sum }) } let dsp = master([t1,t2,t3...]) ``` -Trackの中でSliderとかが呼び出されると、そのスライダーはトラック内のパラメーターに属していて欲しいが、引数から順番に評価されるので、UI系の関数は全てサンク(レベル0)を受けて遅延評価するようなものでないとNG +Trackの中でSliderとかが呼び出されると、そのスライダーはトラック内のパラメーターに属していて欲しいが、引数は内側から評価されてしまう=sliderの評価の方が先に来てしまう + +UIツリー系の評価は、常にStackに積むような処理にしておいて、TrackのところではStackを消費し新たなUIをスタックに積むようにする、そして最後にトップレベルでスタックを全て消費しUIを構築、みたいな感じかな、これならサンクで包む必要もなし? + +UI系の関数は全てサンク(レベル0)を受けて遅延評価するようなものでないとNG ### 他