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
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で再現するのどうするんだっけ。