==asTreeとは== asTree(アズツリー) は、カッコ [ ] で囲む前置記法を採用した自作プログラミング言語です。 入力されたコードを内部で抽象構文木(AST)に変換し、スタックを駆使して評価・実行します! ==構文ルール== 基本の構文は [ <演算子/命令> <引数1> <引数2> ] です。すべての構文は二分木ノードとして解析され、最終的な「値」を返します。 ==命令・演算子一覧== 1. 変数・入出力 [ set <変数名> <値> ] 変数に値を代入します。 値に、カンマ区切りで値を入れると 配列として保存されます。 name(i)という名前の変数として保存されます。 [ get <変数名> <デフォルト値> ] 変数の値を読み出します。 変数が未定義の場合は <デフォルト値> を返します。 [ print <値> <改行フラグ> ] 画面(output リスト)に値を出力します。 ・改行フラグ = 1: 改行して出力 ・改行フラグ = 0: 改行せずに前の文字に結合 [ lambda <配列名> <処理> ] 配列全ての要素に対して処理を実行して、 その結果を保存します。 例: [ lambda x [ * [ get x 0 ] 2 ] ] => すべての要素が2倍される 2. 関数 [ fn <関数名> <処理> ]関数を定義します。 (すでに同名の関数が存在する場合は 上書きせず無視します) [ call <関数名> <デフォルト値> ] 関数を呼び出します。 関数が存在しない場合は <デフォルト値> を返します。 3. 四則演算・比較演算演算子 + - * / %[ + 10 5 ] 四則演算および余り(%)を行います。 int[ int 3.14 0 ] 小数点以下を切り下げて整数にします。 = < >[ < x 10 ] 条件を満たせば 1 (true) 満たさなければ 0 (false) を返します。 4. 制御構造(条件分岐・繰り返し) [ if <条件式> <値> ] 条件式が true (0以外) なら <値> を返し、 false (0) なら 0 を返します。 [ while <条件式> <処理> ] 条件式が 0 以外である間、 <処理> を繰り返し実行します。 [ loop <回数> <処理> ] 指定した <回数> の分だけ <処理> を繰り返し実行します。 [ next <処理1> <処理2> ] <処理1> を実行したあとに <処理2> を順番に実行します。 (複数行の連続実行用) 中を見てプログラムを組んで リミックスしてね
サンプルコード 九九表 [ set dan 1 ] [ loop 9 [ next [ set kakeru 1 ] [ next [ loop 9 [ next [ print [ * [ get dan 0 ] [ get kakeru 0 ] ] 0 ] [ set kakeru [ + [ get kakeru 0 ] 1 ] ] ] ] [ next [ print "" 1 ] [ set dan [ + [ get dan 0 ] 1 ] ] ] ] ] ] [ set dan 1 ] [ loop 9 [ next [ set kakeru 1 ] [ next [ loop 9 [ next [ print [ * [ get dan 0 ] [ get kakeru 0 ] ] 0 ] [ set kakeru [ + [ get kakeru 0 ] 1 ] ] ] ] [ next [ print "" 1 ] [ set dan [ + [ get dan 0 ] 1 ] ] ] ] ] ] フィボナッチ数列 [ set a 0 ] [ set b 1 ] [ print [ get b 0 ] 1 ] [ loop 9 [ next [ set temp [ + [ get a 0 ] [ get b 0 ] ] ] [ set a [ get b 0 ] ] [ set b [ get temp 0 ] ] [ print [ get b 0 ] 1 ] ] ] [ set a 0 ] [ set b 1 ] [ print [ get b 0 ] 1 ] [ loop 9 [ next [ set temp [ + [ get a 0 ] [ get b 0 ] ] ] [ next [ set a [ get b 0 ] ] [ next [ set b [ get temp 0 ] ] [ print [ get b 0 ] 1 ] ] ] ] ]