とりあえず, 242日目
今年ももう終わり.
昨日は, 最近22時に寝てたのに, 0時まで起きてた. ちょっとキツかった.
今日もそれくらいまで起きてるだろうから, ちょっと遅めに起きた.
さて, 来年は色々とモノが作れるといいな.
目標は, どうしよう.
- 何かネット上に公開できるモノを作る.
- 色々なプログラミング言語に挑戦する.
大きくはこの2つかな.
何度も挑戦して, 挫折しているC++をできるようになりたいな.
あとは, Lispも楽しくなってきてるし.
簡単なOSも作ってみたいなあ.
やりたいことはいっぱい. でも中々手をつけない. だめだなあ.
あ, あと, もちろんブログは, 来年も毎日更新でいけたらいいな.
でもさすがにキビしいだろうな.
SBCL, Steel Bank Common Lispを家のLinuxに入れてみた
まずは, 本家からダウンロードしてきて, 展開.
$ tar xvjf sbcl-1.0-x86-linux-binary.tar.bz2
これで, 展開したディレクトリに, sbcl-1.0-x86-linuxというディレクトリが出来上がる.
次に, /usr/localディクトリにインストールをする.
$ sudo sh install.sh
次に, /usr/local/binを自分の環境変数PATHへ加える.
自分の場合, こんなのが書いてある.
path=($JAVA_HOME/bin /opt/bin /usr/local/bin $path)
あとは, 端末エミュレータを再起動するなり, 設定をsourceコマンド使って読み込ませるなりすればOK.
これで終わり, かな?
起動してみる.
$ sbcl This is SBCL 1.0, an implementation of ANSI Common Lisp. More information about SBCL is available at <http://www.sbcl.org/>. SBCL is free software, provided as is, with absolutely no warranty. It is mostly in the public domain; some portions are provided under BSD-style licenses. See the CREDITS and COPYING files in the distribution for more information. * (quit)
こんな感じ.
終了は, (quit). (bye)じゃダメ.
ちなみに, C-hが効かなかったりと, デフォではちょっと使いづらい.
ということで, rlwrapをインストールしてみたら快適になった.
こいつの導入は, ./configre, make, sudo make installで, /usr/local/に入って, すぐ終了する.
ついでにmanページが/usr/local/share/man/man1へ追加されてるのでそれも追加する.
自分は基本的に, manはEmacs上でしか読まないので, womanへ追加(.emacsへね).
こんな感じ.
(setq woman-manpath '("/usr/share/man" "/usr/share/man/ja" "/usr/local/share/man"))
manコマンドへの追加は, 環境変数MANPATHへ追記してやればいいのかな???
それとも, /etc/man.configへ追記???
おっ, ちょっと調べてみたら, コマンドmanpathで現在参照しているディレクトリが見える.
使い方がまだ全然分かんないや.
sbcl --load Lispファイルでsbcl立ち上げと同時に実行できんのかな.
拡張子faslが, コンパイルされたファイルでいいのか?
情報少くて大変.
簡単な使ってみました的な情報が全然無え. 一般的にどう使ってんのかとかが分からない.
EmacsにSLIMEを導入
まずは, ファイルのダウンロード. 当然, 本家からとってくる.
自分は, tgzのを取ってきた(なんか最近, tgzばっかだなあ. 昔は, zipばっかだったのに).
んで解凍.
$ tar xvzf slime-2.0.tgz
慣れたもんだ.
次に, こいつをEmacsのロードパスの通ったところに置く.
自分の場合, ~/site-lisp/slimeとした.
.emacsへの追記はこんな感じ.
(setq load-path (cons (expand-file-name "~/site-lisp/slime") load-path))
そして, 最低限これだけ書いてやる.
;; Lisp用にSLIMEの設定 ;; lisp-mode ;(setq inferior-lisp-program "clisp") ; clisp用 (setq inferior-lisp-program "sbcl") ; sbcl用 (require 'slime) (slime-setup)
あとは, Emacsを再起動して, M-x slimeとする.
すると, .lispファイルのコンパイルっぽいのが始まる(もしかしたら単純にロードしてるだけかも).
それが終了すると, ちょっとかっこいいアニメーションっぽいが出た後, こんなのが起動して使えるようになる.
; SLIME 2006-04-20 CL-USER> (+ 3 7) 10
関数のタブ補完が効いて, すごく使い易い.
REPLってやつらしい.
主なキーバインドは, TABで補完,
C-cC-cでSIGINTを使って, Lispプロセスに割込む(らしい. よく分からない. デバッガ?),
C-cC-oで直前のLisp式の結果をクリア, C-cC-tでバッファをクリアなど.
ここでも参考に〜.
あ, あと終了は, M-x slime-repl-quitみたい.
HyperSpecを引けるようにしたり.
HyperSpecって知らなかったんだけど, どうもCommon Lispの仕様書だかマニュアルだかみたい.
ここから取ってきた. 当然英語. 日本語ないのかなあ・・・.
とりあえず, doc/hyperspecディレクトリに解凍.
$ tar xvzf HyperSpec-7.0.tgz
これで, ~/doc/hyperspecディレクトリに, ディレクトリHyperSpec, ファイルHyperSpec-Legalese.text, HyperSpec-README.textができる.
あとは, こいつを読むように設定を書けばいいのかな. ここを参考に記述.
;; HyperSpecを読み込む. (setq common-lisp-hyperspec-root (concat "file://" (expand-file-name "~/doc/hyperspec/HyperSpec/")) common-lisp-hyperspec-symbol-table (expand-file-name "~/doc/hyperspec/HyperSpec/Data/Map_Sym.txt"))
あとは, M-x hyperspec-lookupで関数とか変数の検索が可能.
このマニュアルは, ブラウザで閲覧することになる.
これを見るのにFirefoxはさすがに使いづらいから, emacs-w3mを使うように設定する.
まずは, 自分のMomongaには, w3mだけで他のものが全然入ってなかったのでそれを片っぱしから入れる.
$ sudo yum install w3mmee-img.i686 w3mmee.i686 w3m-cgi.i686 w3mmee-cgi.i686 w3m-img.i686 w3m-emacs.noarch
入れてるこいつらの詳細がよく分かってなかったりする(^^;)
とりあえず, ここを参考に.emacsを記述.
昔設定したはずだけど起動しなくてちょっと焦った.
;; w3mの設定 (require 'w3m-load)
こいつを書き忘れてたみたい. 前は書かなくても使えたんだけどね. なんでだろう?
そしてやっと本題のHyperSpecをw3mで見る, へ.
簡単に検索したら, .emacsへこれを足しゃいいみたい.
;; HyperSpecをw3mで見る (defadvice common-lisp-hyperspec (around hyperspec-lookup-w3m () activate) (let* ((window-configuration (current-window-configuration)) (browse-url-browser-function `(lambda (url new-window) (w3m-browse-url url nil) (let ((hs-map (copy-keymap w3m-mode-map))) (define-key hs-map (kbd "q") (lambda () (interactive) (kill-buffer nil) (set-window-configuration ,window-configuration))) (use-local-map hs-map))))) ad-do-it))
日本語の利用. これも先程のサイトの設定をそのまま適用.
;; 日本語利用のための設定(Lisp 環境側の対応も必要) (setq slime-net-coding-system 'utf-8-unix)
これで'(a b "日本語")とか書いても大丈夫.
slime-autodoc-modeを設定.
;; カーソル付近にある単語の情報を表示 (slime-autodoc-mode)
REPLなんかで, printとかsetqとか関数の近くにカーソルがあるとき, その関数の取る引数をミニバッファに表示してくれる.