紹介サイト http://flower-lang.github.io/
デモサイト http://flower-lang.github.io/demo.html
メニューバー
上部にあるのがメニューバーで、左から順番に、実行、ジョブ追加、ダウンロード、アップロードとなっています。
ジョブ追加
FLOWerではすべての処理が箱の形になっており、この箱を追加することができます。
ダウンロード
アップロードに使うjsonと、ジョブの状態を示すsvg画像をzipに固めたものがダウンロードされます。
アップロード
jsonをアップロードすると、ダウンロードした時点での状態を復元することができます。
編集
- outputをクリックしてからinputをクリックすることで、ポートを結ぶことができます。
- outputを選択せずにinputをクリックすることで、ポートに直接値を入れることができます。
- ポート同士を結んだ線を一度クリックしてから×を押すことで、その線を削除することができます。
- ジョブ自体を削除するには、右上のゴミ箱にドラッグアンドドロップします。
- Entryはゴミ箱に入れないようにしましょう。
基本
実行すると、Entryジョブのoutputから0が送信され、プログラム上を流れていきます。
例えばこの状態だと1が出力されます。
プログラミング自体の入門は他所に譲ります。
重要なこと
-
はじめにの動画でも触れられていますが、各ジョブは、全てのinputがそろうまで処理を開始しません。最初の例だと、core.Addはinput1に0が入るまで待機しているということになります。
- なお、inputに直接値を入れる場合、ジョブ実行後もinputから値は消えないようです。
-
ブログ記事の図で分かる通り、1つのoutputから複数のinputに値を送信することが可能です。例えばこの状態だと0,0が出力されます。
最後に
- これらを組み合わせると、片方のポートだけに値を入れて待機させることで変数に相当する処理が可能となります。
- 詳細は書きませんが、この処理を記述できればCodeIQの問題は解答できるはずです。頑張ってください。
[140417追記]
CodeIQの問題を解く中で気づいたのですが、実はフィボナッチ数列を出力するだけなら変数に相当する処理は不要です。
そのためには、「重要なこと」に書いてある2点を使う必要があります。
- Entryからcore.Addのinput1に 2回 およびnumber.C1に結線する。
- number.C1からcore.Addのinput2に結線する。
- core.Addからsystem.Printに結線する。
- system.Printからcore.Addのinput1とinput2に結線する。
以上により、core.Addのinput1は 1つ古い値 が使われることになり、題意を満たすことができます。
以下、私の解答です(Web版および拙作Ruby版 http://qiita.com/cielavenir/items/3fb388042b9a4fd1a47b で動作確認済み)。
{"diagram":{"jobs":[{"id":"undefined1395185589743","meta":"retro.model.EntryJob","pos":{"x":42,"y":310},"inputports":[],"outputports":[{"name":"output","connections":["undefined1395706835477.trigger","undefined1395185808886.input1","undefined1395185808886.input1"]}]},{"id":"undefined1395185808886","ref":"core.Add","meta":"retro.model.SymbolicLink","pos":{"x":1038,"y":144},"inputports":[{"name":"input1"},{"name":"input2"}],"outputports":[{"name":"output","connections":["undefined1395185956103.input"]}]},{"id":"undefined1395185956103","ref":"system.Print","meta":"retro.model.SymbolicLink","pos":{"x":597,"y":561},"inputports":[{"name":"input"}],"outputports":[{"name":"output","connections":["undefined1395185808886.input2","undefined1395185808886.input1"]}]},{"id":"undefined1395706835477","ref":"number.C1","meta":"retro.model.SymbolicLink","pos":{"x":45,"y":416},"inputports":[{"name":"trigger"}],"outputports":[{"name":"1","connections":["undefined1395185808886.input2"]}]}]}}