構文木をマッチングしてみる。

sumi言語で、quote()で囲まれた部分は構文木を返すようにしてみました。
そして、sumi言語で作ったmatch関数を使って構文木をマッチングできるように
なりました。

print(match(
  quote($f($arg){$body}),
  quote(a.b(a,b,c){a+b*d}),{}
)+"\n")

上の例では、

$f:XOX("a",".","b")
$arg:XOX(XOX("a",",","b"),",","c")
$body:XOX("a","+",XOX("b","*","d"))

が返ります。
マッチ構文を用意すれば、例えば、

print(match($f($arg){$body}){a.b(a,b,c){a+b*d})+"\n")

のように出来るけど、まだ、やってません。
というか、構造化されたマクロで何とかしようと思っています。

http://sakurai.s59.xrea.com/compact/compact0.0.3/sumi.html


quasiquotation in lisp あたり読みたいけど英語が辛い。。。


おそらく、Compact式を使えばLISPで出来ることはだいたい、出来るはずなので、
なにせ、データ=プログラムなので、もう凄いですよ。ウハウハです。
でも、誰も理解してくれない(泣)