S式の拡張ないし、S式の変形
cexじゃないC言語風の言語のアイディアを考えてみた。とりあえず、S式にHaskellやMLやらの、
[a b c] = a::[b c] = a::b::c::[]
という性質を取り込むとC言語っぽくなるんじゃねぇかなと。
(a b c) = a:(b c) = a:b:c:()
同じリストを上記のようにかけるようにすると。
ついでに、
(a b c (d)) = a:(b c){d}
と書くとかとすると
void:main:((a b)){printf:("hello world\n")}
とかかけていいんじゃねぇのかなぁと。
(void main (a b) ((printf "hello world\n")))
であるよっていうことであって、そのアレ。
ああ、そう、それでこの記述をきっちり保存したいとかあるとかないとかな場合もあると思うので
そのへん適当にリスト表現してくれてもいいなみたいなかんじ。
void:main:((a b)){printf:("hello world\n")}
とにかく、C言語っぽいのをリスト表現したいのだけど、データ構造が複雑になりすぎると
メモリ食うし嫌だろうから、やっぱり、ただのリストからの発展系で
いかにこう、表現力を増すかってところからの発想でした。
とにかく、何個かのカッコでうまいこと見やすいようにして適当にマッチとかUnifyとか
簡単なアルゴリズムでビューティフルにマクロを実現したいのですよん。
最初の仕事は、リスト展開だったりすると。
後は、マクロの展開と、マクロで演算子定義するもよし、演算子の定義くらいは言語機能として持つもよしと。
その後λ計算をすると。λ計算のことは良く知らないからどうでもいいんだけど。
if elseあたりが難しくて
void:main:((a b)){if:(a){b}{c}} void:main:((a b)){if:(a){b}{if:(c){d}{e}}}
とかかないといけなくて、美しくないなと言う感じ。
うーん。こういった研究ってどっかにないのかなぁ。
俺は一人で何を考えてるんだろうなぁと思います。
これよりも、
(a,b,c) = a(b, c) = a b c ()
とするとかねぇ。
int main((a,b)){printf("hello world\n"),return(0)}
とか書くと
(int, main, (a,b), ((printf,"hello world\n"),(return, 0)))
になるとかねぇ。なんか、この方がc言語っぽいかなぁ。
しかしまぁ、きっちり型を宣言したいとかなるとボロが出てくるので何個かの記号を
うまく組み合わせて初めて思い通りに書けるようになる気がする。
で、それの見た目とc言語の見た目は残念ながら違うものになるだろう。
それはしかたないことなのだと思ったほうが良いと思う。
でも、出来るだけ似てるほうが良いだろう。
マッチングを使ったマクロの展開結果が複数のマクロを徐々に展開していくのではなくて
複数のマクロのうーと、合成結果マクロを1回でこう、実行するための合成とか出来ると
うれしいんだがなぁとか思っただけ。
その辺が、副作用がない言語だとうまく展開されて最適化されるんだろうけど
よくわからないからいいや。
a()() = (a)() = ((a))
なのか、いいのか?カッコには意味がないといけないぞとかなって、分からんな。
この辺形式的に書けば数学っぽくなるのかなぁ。