Clisp事始め

というわけでCommon Lispを始めてみたりする。ものはubuntuにaptで入れた2.44.1。
とりあえず、以下の本を手元に置いて防壁を構築。ハッキングを開始する。

Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)
プログラミングGauche

  i i i i i i i       ooooo    o        ooooooo   ooooo   ooooo
  I I I I I I I      8     8   8           8     8     o  8    8
  I  \ `+' /  I      8         8           8     8        8    8
   \  `-+-'  /       8         8           8      ooooo   8oooo
    `-__|__-'        8         8           8           8  8
        |            8     o   8           8     o     8  8
  ------+------       ooooo    8oooooo  ooo8ooo   ooooo   8

Welcome to GNU CLISP 2.44.1 (2008-02-23) <http://clisp.cons.org/>

Copyright (c) Bruno Haible, Michael Stoll 1992, 1993
Copyright (c) Bruno Haible, Marcus Daniels 1994-1997
Copyright (c) Bruno Haible, Pierpaolo Bernardi, Sam Steingold 1998
Copyright (c) Bruno Haible, Sam Steingold 1999-2000
Copyright (c) Sam Steingold, Bruno Haible 2001-2008

Type :h and hit Enter for context help.

まあ、とわいえ、、、基本的には同じなんだろうなー.
まずは基本。普通のことは普通にできる。僕はelispからMIT記法(schemeのdefine)と進んだタイプなので、むしろdefunにそんなに抵抗はない(そもそもlambdaとdefine-funcで違っているのは考えてみれば変なのかも)。
名前空間は関数と変数で分かれてるのか。

[12]> (defun hoge (x) (* x x))
HOGE
[13]> (setq hoge 99)
99
[14]> (hoge hoge)
9801

んー。Emacsの幻影が見える。ひょっとして、、、

[22]> (symbol-value 'hoge)
99
[23]> (symbol-function 'hoge)
#<FUNCTION HOGE (X) (DECLARE (SYSTEM::IN-DEFUN HOGE)) (BLOCK HOGE (* X X))>

あ、やっぱり。
ふーん、なんかdeclareとかあるのは pragmaみたいなもんなのかな。そういえばLOLの中にも declare optimizeとかあったなあ。で、BLOCKなのね、lambda。
んで、基礎の基礎。終わり方。(quit)か(exit)で終了。どう違うんだろう?
どんどん潜行してみよ。
TABを押したら補完。んで、すごい、二回押したらヘルプが出た!

[11]> (app
appease-cerrors  append           apply            applyhook        
[11]> (append 

APPEND is the symbol APPEND, lies in #<PACKAGE COMMON-LISP>, is accessible in 16 packages ASDF, BDB, CLOS,
COMMON-LISP, COMMON-LISP-CONTROLLER, COMMON-LISP-USER, EXPORTING, EXT, FFI, POSIX, READLINE, REGEXP, SCREEN,
SYSTEM, XLIB, XPM, names a function, has 1 property CLOS::%METHOD-COMBINATION.
For more information, evaluate (SYMBOL-PLIST 'APPEND).

 #<PACKAGE COMMON-LISP> is the package named COMMON-LISP. It has 2 nicknames LISP, CL.
 It imports the external symbols of 1 package CLOS and exports 978 symbols to 15 packages ASDF,
 COMMON-LISP-CONTROLLER, BDB, XLIB, XPM, READLINE, REGEXP, POSIX, EXPORTING, FFI, SCREEN, CLOS,
 COMMON-LISP-USER, EXT, SYSTEM.

 #<SYSTEM-FUNCTION APPEND> is a built-in system function.
 Argument list: (&REST SYSTEM::OTHER-ARGS)
 For more information, evaluate (DISASSEMBLE #'APPEND).

うわー なんというアドレナリンブースト。
エラーが出る度に状態遷移してしまうのはちょっとうっとーしー。エラーを帳消しにできるのはおいしいけれども。

[4]> (disassemble #'princ )
0x00007fcd608a0a8e in waitpid () from /lib/libc.so.6
0x000000000050831e <C_princ+0>:	sub    $0x8,%rsp
0x0000000000508322 <C_princ+4>:	mov    0x3b53a7(%rip),%rdi        # 0x8bd6d0 <STACK>
0x0000000000508329 <C_princ+11>:	sub    $0x8,%rdi
0x000000000050832d <C_princ+15>:	callq  0x506f02
0x0000000000508332 <C_princ+20>:	callq  0x4f8bc0
0x0000000000508337 <C_princ+25>:	mov    0x3b5392(%rip),%rax        # 0x8bd6d0 <STACK>
0x000000000050833e <C_princ+32>:	sub    $0x10,%rax
0x0000000000508342 <C_princ+36>:	mov    %rax,0x3b5387(%rip)        # 0x8bd6d0 <STACK>
0x0000000000508349 <C_princ+43>:	mov    (%rax),%rax
0x000000000050834c <C_princ+46>:	mov    %rax,0x3b544d(%rip)        # 0x8bd7a0 <mv_space>
0x0000000000508353 <C_princ+53>:	movl   $0x1,0x3b5423(%rip)        # 0x8bd780 <mv_count>
0x000000000050835d <C_princ+63>:	add    $0x8,%rsp
0x0000000000508361 <C_princ+67>:	retq   
NIL

わーわーわー

[10]> (disassemble #'hoge)

Disassembly of function HOGE
1 required argument
0 optional arguments
No rest parameter
No keyword parameters
4 byte-code instructions:
0     (LOAD&PUSH 1)
1     (LOAD&PUSH 2)
2     (CALLSR 2 55)                       ; *
5     (SKIP&RET 2)
NIL

わうわううううわわわーーー。

もうダメ。この環境気持ちよすぎる。

KOF2009行ってきた


Cocoa勉強会 関西のお手伝いというか、それにかこつけて KOF2009に行ってきた。
相変わらず会場で圧倒的存在感を発揮していたのは、、、このロボットたち!

・・・・いやいやいや。そうじゃあなくてruby関西の皆様。というか Kansai RubyKaigiが同時開催されていたので当たり前なんだけど、スゴいパワーで毎回驚かされまくり。僕のレベルでは確実に無理だよー、ってな感じ。今回はtermtterのjugyoさんとか,角谷さんとか,現在Vancouverに根を張りつつあるujihisaさんとか、スゲー人々が集まっていて、しかも会場はJUNKU堂さんの協力による本屋さんと化していて、途中で数人あいてた広場で突然Hackason始めるし、ストヤンさんの発表は相変わらず面白いし、サイロスさんは本出すし、、、、でもうスゲー目立つの何のって(なんか途中から個人的感想に・・・)。
とりあえずCocoa関西的にはほとんどやっぱりなiPhone関連ばかり・・・と思っていたら、結構Cocoaプログラミングに興味を示すご年配の紳士が多かったのに驚いた。なにせほとんどコーディングフリーでIBでちゃちゃと結構なアプリが作れてしまうので、見せるとかなりのインパクトだったようだ。ちょっとうれしかった。
来年はruby勢に負けない何かが出来るといいなあとか思った。もっと精進しよう。いや、精進しても無理な気もする。でも精進しよう。駄目ナリに底辺で遊んでいても結構面白いからのなーなのがこの世界なのだ。

帰りに見た南港の景色が最高だった。

今度は家族で遊びに来るかな。

おおわらひ本

KOFの会場で「ほら〜かえ〜」という無言のすごいオーラを僕に向かって吐き続けていたこの本。散々悩んだ挙句、ついついポチッた、、、じゃなくて買ってしまった。

#別にトップ1%にはなりたくないです。
「他の劣った言語」「Common Lispこそが使うべきLisp言語だ、と読者に納得させるものであってほしい」「(OnLispは)礼賛するか恐怖するかのいずれかなのである」と序章から飛ばしまくるこのLisper臭。。なんというか怖い。Yuyaさんの忠告にもっと耳を貸すべきだった(わらひ。本のタイトルからして「おおわらひ」なネタなのだと信じたいくらいに宗教。これは攻性防壁を255層くらい張ってからじゃないと、コンタミの危険有りでダイブ出来ないかも。
とか思ってたんだけれど、読み進めるにしたがって、だんだん臭くなくなってきた。尊大で吉外地味ているのは序章だけで、他は実に驚くほど謙虚で誠実。間違った概念は自分の気に入っていることでも平気で切り捨てるし、他の分野を見ずに批判するような愚は(見つかる限りは)犯していいない。なんか0章だけが怖くって、あとは結構まとも。態々自分たちから防波堤を置いているような本だ(意図的?)。
と感じるようになったのが既に精神汚染されている兆候じゃないことを祈ろう。おーこわ。