Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2008-02-09

その時代のパラダイム的なものとLISP

| 01:50 | その時代のパラダイム的なものとLISP - わだばLisperになる を含むブックマーク はてなブックマーク - その時代のパラダイム的なものとLISP - わだばLisperになる

プログラミングの初心者がこんなこと考えていて、またブログに書いてもしょうがないとは思うのですが、ふと、現在大多数の人が考えているLISP像というは、謂わば、Schemeのことなんじゃないかなと、思えてきました。

なんというか、今となっては、Unixといえば、Linuxのこと、みたいな、そんな感じで。勿論私は、Unixといえば、Linuxとは思ってないですが(笑)

レキシカルスコープじゃないLISPとか、GO TOがあったりとか、ガンガン代入文を使ったスタイルとか、それと、ちょっと違うかもしれないけれど、見た目がS式じゃなかったりとか。

そういうのは大多数の人にとってLISP的じゃないんじゃないかなと。

  • レキシカルスコープ

レキシカルスコープに関しては、Schemeが持ち込んで、その後のCommon Lispにも採用されました。

その前(1980年代初頭)は、ダイナミックスコープの処理系が主流で、MACLISP、Zetalisp、Franz Lisp(勿論Allegro CLじゃないです)等、ダイナミックスコープです。ただ、コンパイルした関数は、レキシカルスコープだったりしますが…。

  • GO TO

GO TOについては、これも70年代後半位から、GO TOの機能を提供していたPROGの使用が減少し、CLの登場で決定的になりました。ちなみにGO TOは後から取り入れられたものではなく、最初から存在します。

これについては、構造化プログラミングスタイルの啓蒙ってことも大きいとは思うのですが、その他には、PROGの果して来た機能が徐々に分解されて提供されるようになったということもあると思います、具体的には、progn、do、let、tagbody、block、等に分解されて行ったように見えます。これ以前のスタイルでは、lambdaとprogの組み合わせが主なものだったようです。主義というよりも、なんとなくPROGで書くより便利なので、そっちに乗り換えられていったという気がします。

構造化プログラミングスタイル云々より以前からLISPはあった訳なので、この辺はなんとなく独特な気がします。

また、GOTOとはいえ、関数内に限られているので、そんなに飛べる範囲は広くないので、そんなに恐しいことにはならないというのもあるでしょう。とはいえ、1つの定義で500行の壮観なGO TO多用型の関数もあったりしますが(笑)

  • ガンガン代入文を使ったスタイル

ガンガン代入文を使ったスタイルについては、割とCommon Lispでも見られると思いますが、Schemeじゃ好かれないですよね(笑)

  • プログラムの書式がS式じゃない

比較的ユーザに近い層で、S式にマッピングされたり、根底の考えがS式なのであれば、やっぱりLISPっぽくなる気がします。Dylanとか、やっぱりLISPな気がしますし、M式とか、CGOLとかユーザが直接S式を書かない方式もありました。

そういう意味で、Matz Lispは、LISPっぽいのかどうか、興味があります。自分はろくにRubyは読み書きできないのでなんとも言えないのですが、S式を感じられるなら、LISPなんじゃないでしょうか。今の私のレベルでは、あんまり感じないんですけども…。

それで何が言いたかったかということなのですが、書きたいように書けるのがLISPの良いところなんじゃないかなあ、と。

BASICみたいなスタイルで書いても良いし、SmallTalkみたいに書いても良いし、Schemeみたいに書いても良いし、Perlみたいに書いても良いし、個人のスタイルを変更しないで書くことが楽だと思います。

極論すれば、LISPには文法がないですが、限定されたスタイルもない、みたいな。

という、なんともまとまりのないエントリですいません。

もちろん、私は趣味プログラマだから、この考えは成り立つんだと思います。