構文

1 つのノードから同一のノードにわたって複数の流れが存在するときに、橋という糖衣構文を用いることができます。

copy は上流の値をすべての下流に流します。

> 1 -> copy (-> * 2 ->) (-> + 2 ->) + -> output
5.

(-> ... ->) という構文が橋であり、出力をそのまま次のノードの入力に変換しています。

次のようなプログラムとして解釈されます。

> :{
> 1 -> copy (-> * 2 -> @a) (-> + 2 -> @b)
> (@a ->) (@b ->) + -> output
> :}
5.

参照を使って複数行で書く必要があったプログラムを、一行で簡潔に書くことができます。

以下は 1copy で分流し、分流した回数分足し合わせる例です。恒等関数 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 は引数を複数受け取ることができません。