橋
1 つのノードから同一のノードにわたって複数の流れが存在するときに、橋という糖衣構文を用いることができます。
例
copy
は上流の値をすべての下流に流します。
> 1 -> copy (-> * 2 ->) (-> + 2 ->) + -> output
5.
(-> ... ->)
という構文が橋であり、出力をそのまま次のノードの入力に変換しています。
次のようなプログラムとして解釈されます。
> :{
> 1 -> copy (-> * 2 -> @a) (-> + 2 -> @b)
> (@a ->) (@b ->) + -> output
> :}
5.
参照を使って複数行で書く必要があったプログラムを、一行で簡潔に書くことができます。
以下は 1
を copy
で分流し、分流した回数分足し合わせる例です。恒等関数 id
を用いています。
> 1 -> copy (-> id ->) (-> id ->) (-> id ->) + -> output
3.
橋は複数ノードが間にあってもかまいません。
> 2 -> copy (-> + 1 -> * 2 ->) (-> - 1 ->) merge -> output
1
6
1
6.
応用
橋は、分岐するノードと合流するノードがある場面でよく使えます。分岐するノードは copy
のほか if
やペアを展開する unpair
などがあります。合流するノードは merge
や +
*
などの演算子などがあります。
次の例は if
で橋を用いる例です。どちらの場合も共通の処理をまとめて書くことができます。
> 2 -> if (1 == 1) (then:-> * 2 ->) (else:-> + 1 ->) merge -> output
4.
注意: merge
を書くのを忘れないでください! output
は引数を複数受け取ることができません。