構文
カスタムノードの定義 (Experimental)

カスタムノードの定義 (Experimental)

flow では、試験的にカスタムノードを定義する機能が備わっています。

階乗など単純な再帰を flow で表現する方法は紹介しました。複雑な再帰にはこの機能を使うことができます。

> fib (@x ->) (-> @y) = @x -> if (@x == 0 || @x == 1) (then:-> 1 ->) (else:-> next ->) merge -> @y
> next (@x ->) (-> @y) = fib (@x - 1) + fib (@x - 2) -> @y
> :{
> @x'0 -> fib -> output
> @x'0 + 1 -> @x
> :}
1
1
2
3
5
8
13.

カスタムノードを定義すると、環境に追加され、セッション中ずっと呼び出すことができるようになります。そのため、 :{ :} は必要ありません。

現状ではパフォーマンスが悪く、実行がかなり遅くなっているのが分かると思います。

なお、現段階では、「関数的な」カスタムノードのみがサポートされています。これは、すべての入力に値が流れてきた時に初めて、その入力を取り入れてカスタムノード内にデータが流れ始め、出力もカスタムノード内ですべて出そろった時に初めてまとめて出力されます。

より柔軟なカスタムノードの定義方法は検討されています。