Scheme言語の意義 (2)

昨日の日記のコメントで、大物Schemerの方だと思われる方に貴重なご意見をいただいた。さらに思うことを書いてみる。

それらの組合せは柔軟性に富んでいて表現の幅はとても広いのです。新たな概念が出てこないのではなく、新たな概念はあなたが作るべきものであるというのがschemeの思想なのです。

Schemeは、低レベルな言語というイメージがある。何でも自分で組み合わせて作成しないといけないイメージがある。しかし実際は、高レベルなものはライブラリレベルで、ほとんどのものが既に用意されていると思う。しかも、恐らくマクロを使えば構文自体も変更できるので、ある意味ライブラリ以上の事が可能となっているのだと思う。


しかも、ライブラリは低レベルなものを組み合わせてできていると思うので、深い事も可能になっていると思う。例えば、Pythonでは文字列型(str)は、ImmutableなのでMutableなものが実現できず、ユーザ定義クラスで実現できてもスクリプトだから遅くて使えない。推測だが、そういったものもSchemeなら実用レベルで使用できるものを作成できる、もしくは既に存在するのではないだろうか?なければ作れば良い。作っても実用性ある。そういう意味に理解した。


ある意味C++的?そうすると、C++より良いところはどこだろう?また疑問増えたorz

Pythonのような構文の構文木をうけとって処理するとなるとマクロはとても繁雑なものになってしまうでしょう。scheme(Lisp)のマクロが非常に強力なのはS式表現とセットだからです。

なるほど。SchemeはS式がコードであり構文木でもあるので、マクロがシンプルになりパワフルなのだと理解した。そういう意味ではマクロも、ないものは作るとか、やろうと思えば何でもできるという発想を重視している気がした。

新しい機能(概念)を作ろうとしたときにそれを阻害しない

これは、新しい概念を自分で作ることに「意義があるよ」と捉えられる。

scheme(というかLisp全般)では関数にしろマクロにしろ「名前がついている」ということで扱いが楽になっていると考えます。

これは、なるほどと思った。高階関数やオーバーライドをするときに、いちいちマニュアルを調べなくて済むという意味で確かに楽。意味を調べるときに名前が付いていれば調べ易いというのも納得。


ある意味覚え易さは、既存の言語からの変更が少ないとか、記号を使用して直感的(範囲演算子?など)であるとか、冗長性が少ないとかだと思うが、そういう飛躍があるのが敷居を上げているのかと思った。


結論的には、深い言語なのだなと思った。EmacsSchemeは慣れれば最強?私みたいな素人は慣れる前に挫折。


素人が「慣れる前に挫折しない」、「下手に難しいコードを書けない」のは重要。Pythonはそういう意味では、すばらしい。Schemeももちろん別の意味ですばらしいのだと思う。