Sun Oct 19 17:26:45 JST 2014

Land of Lisp を読んではいたけど実際にコードを写経することはしてなかったので、 始めた。 https://github.com/cympfh/land-of-lisp

Common Lispはやっぱり好きくない。

$ rlwrap -a -pred clisp

Gaucheのinfo関数に相当するような説明が、 組み込みの関数に対して無いけど、 形だけ見ることはできる。

[1]> (describe #'mapcar)

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

コンパイルされてるらしく、もっと知りたかったらdisassembleしてね、と言われる。 してみようとしたけどなんかエラーでる。

自分でその場で作った関数は中身が見えるし、 定義の時に、引数リストのすぐ次に文字列として、 ヒアドキュメントも書ける。

describeはこれらを表示する。

[2]> (defun mine (x) "This is a awesome function" x)
MINE
[3]> (describe #'mine)

#<FUNCTION MINE (X) "This is a awesome function" (DECLARE (SYSTEM::IN-DEFUN MINE)) (BLOCK MINE X)> is an interpreted function.
Argument list: (X)
Documentation: This is a awesome function

rlwrap

cat .inputrc
set editing-mode vi
"\C-p": history-search-backward
"\C-n": history-search-forward
"\C-j": vi-movement-mode
"\C-l": clear-screen

どこでもvimっぽくカーソルを動かしたいのと、 プロンプトに色をつけたいので、rlwrapを使ったんだけど、 これは良くなかったかも。

素のclispのreadlineがすでに優秀で、 組み込みの関数と、ユーザーが定義したもろもろ識別子がTab補完入力できるようになってる。 これをreadlineで再現するのどうするんだっけ。