なんか、恥ずかしいぜい。
通りすがりの人に、普通のASTと何が違う言われて、んんん?
普通のASTってどんなものなのかいまいちわかってないので何ともいえません。
Template HaskellとかDylanを見直して理解しないと差がわからない。
抽象構文木じゃなくて、只の構文木であるところが違うのではないかなぁと思います。
車輪の再発明なのか?劣化コピーか?ううむ。。。
英語だし、なんのことが書いてあるかいまいち理解できなかったけど、
理解しててみるとよく分かるみたいな。あああ、英語使えないと、どんだけ損なんだよ。。。
Dylanのマクロと根本的に考え方が同じっぽい。orz...
D-expressionとかって書いてあったりするのがあるし。うわぁ。なんだよこりゃ。
というか、今まで変なところに拘っててダメだっただけっぽい。
ってことで、何が違うのかというと、、、多分C言語風の構文だってこと。
でもはNemerleあたりで実現されてる気がしなくもない。
ってなると、、、むぅううう。こんだけ苦労してもしょせん俺言語の領域でしかないのか???
うーむ。うーむ。何かいい点ってあるのかしらん。
Cleanだとこの空白は@演算子として扱われるらしい。同じようなことを考えてるのかなぁ。
細かいところの違いがあるのかどうかは、結局英語が分からんのでわからんという情けなさ。
たとえば、
render x = HsLit $ HsChar $ 'a'
このようなhaskellのプログラムの構文木は余計なところ情報を消しても、こうなるらしいです。
(funD render [(clause [x] (infixE HsLit $ (infixE HsChar $ 'a')) [])])
ここで、funDとか、clauseとかに普通なるのではないかと。
XOY( XOX(render, " ", x), "=", XOX(HsLit,"$", XOX(HsChar,"$",'a') ) )
自分が考えたものだと、関数ですとか、クロージャですと変換されません。
ってところが違うと思うのだけども。只の構文木だからなぁ。
違いがないわけではないかもしれないけど、わからない。
javascriptで実装してあるから、web上で動くのは違いといえば違いか。
実装言語が違ってただけじゃんねぇ。