ZuLanguage
アスキーアートで図を描くとそれがそのまま実行される、フローチャート指向言語です。
性格判断を行う程度のプログラムが書けます。
サンプルプログラム
sample.zu
*-----------------------* |ask "do you like ruby?"| *--------------------------------* | +------------> ask "then, do you like python?"| *------------------+----* | | | *-----+------------------------+-* | | | | | | | *----------v----------------------* | *-----------------v-----------*|say "maybe you don't like LL..." | | |say "maybe you like Haskell."|*---------------------------------* | *-----------------------------* | *------------------------------v---* | | |say "maybe you like OCaml." | *----------------------------------*
実行結果:
yhara@meteor:~/src/zu/zu-0.1.0 % ./zu sample.zu do you like ruby? [y/n] > n then, do you like python? [y/n] > y maybe you like OCaml.
(内容に特に意味はありません。)
ダウンロード
./zu sample.zu
もしくは
ruby zu sample.zu
として起動してください。
仕様
- 全ての命令は四角いセルに囲まれていなければならない。セルは「*」と「-」と「|」で描画する。
- セルどうしを「+--->」など矢印で繋ぐことで分岐を表現する。
- セルにはパーサが見つけた順に番号が振られる。セル左上の「*」が上にあるほど(同じ行なら左にあるほど)若い番号が振られる。
- 許される命令は(今のところ)以下の2種類。
- ask 文字列 : yesかnoかの質問をする。セルから2本の矢印が伸びていなければならない。noのなら番号の小さいセルに、yesのなら番号の大きいセルに進む。
- say 文字列 : 文字列を画面に出力する。
余談
合宿
プログラミング言語「ず」は第1回言語開発合宿にて開発されました。
パーザ
グラフのパーザ部分はTextGraphとして公開しています (用途があるかはともかく)。
命名の由来
「C言語」「D言語」などアルファベット一字の言語名が許されるならば、 仮名一文字の言語があっても良いのではないか、という発想からこの命名に至った。
単に表を埋めたかったという理由がなくもない。
「ず」を選んだのはもちろん、「図」から来ている。
今後の予定
フィボナッチぐらいは計算したいよね。
イメージ:
fib.zu *----* *--------* |i=0 <--+ n=getn | *--+-* *--------* | *---v-* *-----* *----------------------* +->i==0 f-->i==1 f--> a=pop; b=pop; push a | | *----t* *-t---* *---+------------------* | | | | | | | *--v---* *-----------* | *----v-**-v----* | i==n t--> print a+b | | |push 1||push 1| *--f---* *-----------* | *-+----**-+----* | | | | *------v---* | v | | push a+b | +------------+ *------+---* ^ | +------------------+
実装しないといけないもの:
- 曲がった矢印のパース
- 左上以外からも開始できるようにする(入る矢印がないセルが開始地点)
- 「t」「f」によるルート分岐
- 「pop」「push」によるスタック操作
- 数値の入力関数(getn)
- 数値の出力関数(print)
- 矢印から矢印への合流
モジュール機能とか
fib *---------------------------------------------* | *--------* *-------*| | |input(x)+--> --> output|| | *--------* *-------*| | | *--------^-------------+----------------------* | | main | | *----------|-------------|----* | *--------+---* | | | |a,b = getn | | | | *------------* | | | | | | *----------* | | | |say result<-----------+ | | *----------* | *-----------------------------*
関連する話題
2006年のICFPCにて「2D」という言語が発表されたようです。
「2D」と「CIRCS」で検索すると良いです。
View on github | Report issue