Humanity

Edit the world by your favorite way

RubyishなS式


深夜のテンション注意。
このエントリは様々な意味で危険なエントリなのですぐ削除されるかもしれません。



Rubyのすごい所は、その構文の可読性にあります。
世界中の半分以上の人間は文章を読む時左から右へ流れていくように読みます。
英語なんかは動詞の次に目的語が来ますが、ネイティブなんかは左から右に一直線に読んでいく。(たぶん
なので代入を除けばほぼ左から右へと読み進められるRubyの構文はとても素晴らしいと思うのです。

で、この世でRuby以外に美しい構文を持つ言語といえば、あのLISPを先祖に持つSchemeという言語が有名ですね。
なのでこれらの構文を合わせたらとても素晴らしい言語ができるんじゃないかというとても単純で美しい発想が浮かびました。


じゃあやってみよう、とは思うもののまだ僕は言語を作れるほどのスキルを持っていません。
そこでRubyishな構文からSchemeの構文へ変換するコンパイラ(用語的にあってるか微妙)を作ればいいじゃない。
とこれまた太古からのプログラミングにおけるコンパイラという手法に基づくとても素晴らしく強力な発想が浮かび上がり、じゃあこれを実装しない手はないじゃないか、ということで書いてみるのです。というか書きました。こちらです。

ええ、あなたの言いたいことは分かります。
「なんでPerlなの?」
もしくは
「このシェルスクリプトはどのシェルで動きますか?」
ですね。


Perlといえばsedawkごったにした構文にありえないほどの演算子または組み込み関数(メソッドではない)を備えた、いわばシェルスクリプト+αのことですよね?
と。あなたはそう言いたいんでしょう。


でも待ってください。
誰もが「世の中そう綺麗事ばかりじゃない」などと言う大人を見たことがあるはずです。
あるいはあなたは今汚い汚れた汚らわしい大人なわけですから私の言ってることが理解できると思います。

この世は汚い。
だからPerlは汚い。

Larry Wall


この世は汚い世界です。
しかし同時に素晴らしくもあります。
だったら汚らしい世界を汚らしい言語で 素晴らしい世界に書き換えられると思いませんか?
ならそうしてみましょう。
そうするしかあり得ませんね。
汚い汚れた汚らわしい大人の皆さん。
ぜひその際には汚らしくも素晴らしい、このPerlという言語と共に。




解説

まずこのコードについてちょっと解説する前に弁明を添える必要があります。
僕はPerlが大好きです。
初めてのPerlにはPerlはラクダのように、時々あなたにツバを吹きかけるかもしれませんが、確かにちゃんとやりたいことをやってくれるなんて事が書いてあったかと思います(うろ覚え)けど、ほんとに全くその通りだと思います。
時々「Rubyみたいにgrepやmapをメソッドチェイン風に書きたいよおぉぉっっ」とか思わないでもないですが、例えば弾さん作のClass::Builtinなどのモジュールなどを使わないことには出来ないし、悲しいことにそのままでも結構読めてしまう。本当に素晴らしい言語だと思います。


これを書かないと偉い人(といってもこんな所見ないですが)にとてもdisられてしまう厳しい、(僕に、じゃなくPerlに対して)愛のこもった指摘をされてしまう訳ですね。非常に恐ろしいというかスリリングというか。えー、なんだろ、世界は素晴らしいだが同時に汚いなーとか色々考えてしまいます。


(色々自主規制)



・・・というわけで朝の5時頃に書かれた文章をお送りしました。
このエントリは黒歴史になる予定です。


あとsubをばんばん使っているのはクラスを作るのがめんどくさかったからです。
可読性なんか知ったこっちゃないです。


さて

上の文章は本物の解説ではありません。
実は本文中にあるプログラムはここまで書いて書き始めました。
こんなノリの文章が書きたかっただけです。
それはともかくS式は美しいですね。
Rubyも美しい。
だけど好きなのはPerl
そんな今日この頃。


あと、Perl演算子予約語がいっぱいあるからいいんじゃないか、とか言ってやりたい。
ていうか自分で言ったんだけど。


追記

とりあえず一番上のは標準出力の結果で、2番目はRubyishなS式のソースコード
3番めはもちろんそのコンパイラ(?)のコード。
compileで異常な時間がかかるのは仕様です。
エントリが痛いのも仕様です。
うわー。