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