組み込みノード
n 項演算子 (1 以上の n に対応)
n 項演算子として、 +
*
++
&&
||
が用意されています。
++
は配列や文字列を連結する演算子です。
すべての入力に値が流れて初めて出力をします。
中置演算子として書くこともできます。この場合は 2 項演算子となります。
2 項演算子
-
/
%
==
!=
>=
<=
>
<
が用意されています。
すべての入力に値が流れて初めて出力をします。
中置演算子として利用できます。
その他のノード
not
入力を否定したブール値を出力します。
入力: arg0
: ブール値。出力: result
: ブール値。
output
受け取ったデータを画面に出力します。出力後、ユーザーが何も入力せず Enter
キーを押すまでプログラムは中断します。何か入力して Enter
キーが押されるとプログラムは終了します。
入力: arg0
: 画面に出力するデータ。出力: なし。
trace
output
と似ていますが、ユーザーによるプログラムの再開後、下流ノードにデータを流します(つまり、副作用ありの恒等関数の役割)。
入力: arg0
: 画面に出力するデータ。出力: result
: arg0
で受け取ったデータ。
input
入力に値が流れてきたとき、ユーザーからの入力を待ちます。受け取ったユーザーからの入力を下流へ文字列として流します。
入力: request
: ユーザーから入力を受け取ることを示すフラグとしてデータを用いる。出力 result
: ユーザーから受け取った入力(文字列)。
例: 入力を数値として受け取りたい場合は、 input
を使った後 int
を用います。
以下の例は、ユーザーから受け取った数値に 1 を足して画面に出力します。出力後再びユーザーからの入力を受け取るので、 @a
で input
の上流に戻しています。
flow ver 0.2.0
> @a'1 -> input -> int -> + 1 -> trace -> @a
Input: 1
2
Input: 2
3
Input: 4
5.
terminated
merge
上流のデータを 1 つ下流に流します。飢餓(Starvation)の上流ノードは生じないことが保証されます。
入力: arg0
arg1
... arg(n-1)
。出力: result
。
copy
上流のデータを下流すべてに流します。(コピーを実施するためには、すべての出力が ready である必要があります。)
入力: arg0
。出力: copy0
copy1
... copy(n-1)
。
if
分岐を行います。condition
が True
なら出力 then
に、それ以外なら出力 else
にデータを流します。
流すデータは、入力 value
が使用されている場合は value
から流れてきた値が、使用されていない場合は cond
から流れてきた値が流れます。
なお、入力 value
が使用されている場合は、入力 condition
value
の両方がそろうまで下流にデータを流すのを待機します。
入力: condition
, value
(optional)。出力: then
, else
(optional)。
id
1 変数の恒等関数です。
入力: arg0
。出力: result
。
exit
データが流れてきた場合、プログラムを終了します。
入力: arg0
。出力: なし。
map
配列を受け取り、要素を 1 つずつ下流に流します。
(最後の要素の後、配列の最後を表す EOF
のようなものを下流に流します。)
入力: arg0
: 配列。出力: result
: 要素。
unmap
要素を受け取っていき、 map
由来の EOF
のようなものを受け取ったタイミングで配列化して出力します。
入力: arg0
: 要素と EOF
のようなもの。出力: result
: 配列。
pair
2 つの入力を受け取り、ペアを形成します。
2 つの入力がそろうまで待機します。
入力: fst
snd
。出力: result
: ペア。
unpair
ペアを受け取り、1 つ目の要素と 2 つ目の要素を出力します。
入力: arg0
: ペア。出力: fst
snd
。
int
上流を数値に変換します。
文字列はパースします。真偽値は True が 1、False が 0 です。その他の値はエラーとなります。
入力: arg0
: 数値に変換したい値。出力: result
: 変換された数値
str
上流を文字列に変換します。
入力: arg0
: 文字列に変換したい値。出力: result
: 変換された文字列
bool
上流を真偽値に変換します。
空文字列、 0
、 False
、 []
のみが False
となり、それ以外は True
となります。
入力: arg0
: 真偽値に変換したい値。出力: result
: 変換された真偽値