LISPUSER

LISPMEMOLisp isn't a language, it's a building material. -- Alan Kay

(top)  (memo)  (rss)

典型的な Greenblat のコード

ふと思い出したので, comp.lang.lisp の new to lisp というスレッドで 紹介されていたネタを.

最初は Lisp 初心者の質問に答えるという通常の流れなのですが,最初は定番の ネタ (SICP の紹介とか) なんですが,途中からおもしろくなってきます.

やー,それらは良いプログラムかもしれないね.でも私は Lisp を初める初心 者にとって本当に良いアドバイスなのかいまだに確信がもてません.私が書い て,実行できた最初のプログラムは次のようなものでした

10 PRINT "HELLO" 
20 GOTO 10 

それは次のようになるでしょう

(TAGBODY 
 10 (PRINT 'HELLO) 
    (GO 10)) 

:-)

という記事から BASIC ライクな手続きの話に.そこで,Joe Marshall 氏の衝 撃の発言が.

Greenblatt は *いまだに* このやり方で Lisp を書いてるよ.

これには私も大ショックを受けましたねー.Greenblatt といえば,Lisp Machine の発明者 (Symbolics が有名ですが,Greenblatt は LMI の方です ね),Bill Gosper らと同世代の元祖ハッカーですね.スティーブン・レビー の「ハッカーズ」に出てきます.

反応としては

ほんとに動くの??

と返ってきます.まぁ,現代的な感覚では信じられないでしょうが, Greenblatt 氏が活躍したのはもう 50 年近く前ですからね.Lisp 発明当時か ら使ってたわけで.で,さらに Joe Marshall 氏の投稿は続きます.

もちろん動作しますよ.典型的なGreenblatt のコードは次のようなものです

    (DEFUN RDSYL (L DF) 
      (PROG (LL BRAKP ANS CH) 
            (SETQ DF (MERGEF DF '((* *) * *))) 
         AA (SETQ LL (SETQ BRAKP () )) 
          A (SETQ CH (OR (CAR L) #/_)) 
            (COND ((OR (= CH #/) (= CH #//))     ;"/", "" 
                   (POP L) 
                   (SETQ CH (CAR L))) 
                  ((AND (= CH #/[) (NOT #%(ITSP)))    ;"[" 
                   (SETQ BRAKP 'T)) 
                  ((AND (= CH #/]) (NOT #%(ITSP))) (SETQ BRAKP () )) ;"]" 
                  ((OR (= CH #/( ) (= CH #/) )) (RETURN () ))  ;Cant have parens here 
                  ((= CH #/,)     ;Comma 
                   (COND ((NOT BRAKP) 
                          (POP L) 
                          (GO RET)))) 
                  ((= CH #/_) (GO RET))) 
           (PUSH CH LL) 
           (POP L) 
           (GO A) 
      RET  (SETQ DF (MERGEF (NAMELIST (MAKNAM (NREVERSE LL))) DF)) 
           (SETQ ANS (NCONC ANS (LIST DF))) 
           (AND (= CH #/,) (GO AA)) 
           (RETURN ANS) )) 

さらに Kent M Pitman 氏の証言も.

go タグを使いすぎた場合のLisp マシンのコンパイラのエラー表示はまだ "That's too many go tags, RG!!" [1] のままなのかな? 実際,完全に正 確なメッセージ文か自信はありませんが,そして隣りの部屋にって Lisp マシンでテストしていませんが,彼の名前がでてきた事を思い出します. RG = Richard Greenblatt

このような,古代 Lisp (Common Lisp や R5RS Scheme 以前の古い Lisp コー ド) はあまり資料が残っていませんからねぇ.Peter Norvig の Paradigms of Artificial Intelligence Programming にも Lisp の進化について触れた節で 古い Lisp のコードが紹介されていますね.昔の Lisp 関数と,同等の Common Lisp のコードを比較するという,歴史のある言語ならではのネタでした.

番外編

あの CL-PPCRE の作者,高名な Lisp Hacker である Edi Weitz 氏が Richard Greenblatt を知らなかったり.

Richard Greenblatt って誰? Edi.

もちろん,解説がはいります.

レビーの「ハッカーズ」に良く出てきますよ.四章の最初を引用すると, " グリーンブラットは,自然とそうなるのを待っていたハッカーだった" もちろん Lisp Hacker ;-) 傑出したハッカーで, Lisp マシンの父とされています. ハッカーズはお勧めですよ.

そういや,私も Lisp にハマったのは「ハッカーズ」に寄るところも大きいのかなー. 学生時代に日本語版を読みましたね.で,Edi Weitz 氏の返答は

ありがとう.数年前にこの本を入手しようとしたんですが,絶版のようでした. 今 Amazon をチェックしたら再版されたようなので,注文しました.

買っちゃったー.ひょっとして,Lisp マニアは結構ハッカーズを読んでいるのだろうか….

posted: 2006/06/25 10:20 | permanent link to this entry | Tags: LISP

(top)  (memo)  (rss)