CompactというかC式と言ってるものの何が凄いのか

S式はATOMをCONSセルで結合しています。基本は。


C式はこれを拡張して、XOX,XO,OY,XOY,XPXP,PXPという6つ種類の演算子で結合しています。
sumi言語はC式で記述されています。


LISPは構造化データ=プログラムです。
JavaScriptは文字列データ=プログラムです。
sumiは構造化データ=プログラムです。


sumiという言語では、quasiquoteを略したqq{}をつかうと、構文木を得ることが出来るようにしました。
昨日今日の話しだけど。

qq{a+b}

これで、結果として
XOX(a,+,b)が返ってきます。
ほんとはXOX(a,"+",b)と表示したいところなのだけど、いろいろと手抜き実装なんで。。。
こうなってるんだけど。。。


これは、2項演算子で左がaで演算子が+で右がbっていう意味です。
さて、これで取り出した構文木はいじれます。

data:qq{a+b}
data.op = "-"

とすると、
XOX(a,-,b)となります。
さてここで、aを1にbを2に定義します。

data:qq{a+b}
data.op = "-"
a:1
b:2

そして、evalでdataを実行すると、、、。

data:qq{a+b}
data.op = "-"
a:1
b:2
eval(data)

結果として、、、。

-1

が返ります。どーだ凄いだろうってな具合です。