Common Lisp処理系「XCL」についてのメモなど
一つ前の記事でビルド方法を書いた、Common Lisp処理系「XCL」のメモなどを書いておきます。
関数をコンパイルして高速に動作させる
とりあえず、
(defun tak (x y z) (if (<= x y) y (tak (tak (- x 1) y z) (tak (- y 1) z x) (tak (- z 1) x y))))
この関数をコンパイルしてみます。
これはLispなどの速度測定に使われることが多い「たらい回し関数」というものらしいです。
まず、コンパイルせずに実行します。
CL-USER(2): (time (tak 12 6 0)) Execution took: 46.6169395 seconds of real time 45.6588554 seconds of user run time 0.0440020002 seconds of system run time 806,713,296 bytes allocated 0 cons cells 12
処理にかかった時間は46秒ぐらいです。
次に、
(compile 'tak)
としてコンパイルしてみます。
CL-USER(4): (time (tak 12 6 0)) Execution took: 2.2319181 seconds of real time 2.23213911 seconds of user run time 0.0 seconds of system run time 0 bytes allocated 0 cons cells 12
今度は2秒ぐらいで処理が終わっています。
rlwrapを使って操作しやすくする
XCLは、「矢印キーを使って、入力履歴から文字列を入力する」のような機能が搭載されていません。
矢印キーを押すと、「^[[A」のような文字列が入力されてしまいます。
しかし、「rlwrap」というソフトを使えば、履歴などの機能を使えるようにすることができます。
rlwrapのインストール方法は、Ubuntuの場合、
sudo aptitude install rlwrap
というコマンドです。
rlwrapをインストールしたら、
rlwrap XCL-build/xcl/xcl
のようにして、rlwrapを通してXCLを起動します。
「XCL-build/xcl/xcl」の部分は、XCLの実行ファイルの場所にしてください。
こうすれば、矢印キーの上下で履歴から文字列を入力したりすることができます。