SBCLに日本語関連のライブラリやGUIライブラリを導入してみた

最近Common Lispをちゃんと勉強しよう!という事でちょいちょいsbclで遊んでいます。
それで、asdfを利用して色々ライブラリを導入してみたので、そのメモです。
HTTPリクエストなら、drakma、html→S式の解析なら、cl-html-parse、とライブラリがかなり充実しているな、というのが現在の印象です。


日本語関連のライブラリの導入

使い方はいまいち理解してませんが、文字エンコーディングの判定処理や日本語を扱うためのライブラリを導入してみます。
http://lispuser.net/commonlisp/japanese.htmlから以下の3ファイルを落としてきました。
mecabなんぞ使うんかという疑問も湧きましたが、まあ、とりあえず導入してみます。

  • guess.tar.gz
  • jp.tar.gz
  • mecab.tar.gz

Common Lisp的な作法がよく分からない(知らない)ので、とりあえず~/lib/lisp以下に導入する事とします。

$ pwd
/home/khiker/lib/lisp
$ ls
site systems tarball
$ ls tarball
guess.tar.gz  jp.tar.gz  mecab.tar.gz
$ ls site
$ cd ./systems
$ ln -sn ../site/guess_0.1.0/guess.asd .
$ ln -sn ../site/jp_0.2.0/jp.asd .
$ ln -sn ../site/mecab_0.0.1/mecab.asd .

とりあえずtar.gzファイルをtarballディレクトリに置き、そのtarballを展開したものをsiteディレクトリに置きます。
そして、systemsディレクトリに移動し、tarballを展開したディレクトリ内にある*.asdへのシンボリックリンクをカレントディレクトリ(systemsディレクトリ)に貼ります。


次に、処理系は、SBCLを使っているので、~/.sbclrcを編集します。
以下の行を加えます。

(require 'asdf)
(require 'asdf-install)

(push #p"/home/khiker/lib/lisp/systems/" asdf:*central-registry*)

最初の2行は必要かどうか分からないです。また、追加する方法としてこれが正しいのかもよく分かっていません。
これで、sbclが(asdfで導入したものでない)ライブラリの場所を知る事ができます。


guessとjpについてはこれで完了です。sbclを起動し、(require 'guess)や(require 'jp)等と入力すると初回はコンパイルがはじまり、使えるようになると思います。
mecabについては、他にライブラリを導入しなければならないようです。
自分の場合は、以下の2つを入れる必要がありました。

  • ppcre
  • cffi

導入はasdfを使用して行いました。

* (asdf-install:install 'cl-ppcre)
* (asdf-install:install 'cffi)

タイプするとダウンロードがはじまってインストールされるので非常に楽です。
# ただ、証明書かなんかよくわからないのを毎回聞かれるのが面倒ですが…。
自分の場合は、これだけでは駄目で、mecabの共有ライブラリが無いと言われてしまいます。
mecab.lisp内では、libmecab.soが使われるように書かれているのですが、自分の環境ではlibmecab.soは無く、libmecab.so.1という名前で存在するためです。
ライブラリ側に手を加えずに修正する方法が良く分からないし、面倒なので、mecab.lisp内の該当箇所を修正します(libmecab.soをlibmecab.so.1にするだけ)。
以上で、自分の環境では、mecab.lispが使えるようになりました。

GUIライブラリの導入

ltk

下記サイトを参考に導入しました。

基本的には、以下で終わりです。

* (asdf-install:install 'ltk)

以下のサンプルを動かしてみました。

ロードにほんの少し時間はかかりますが、まあ気にならない程度です。


cl-gtk2

tkだけじゃなんなので、gtk無いかなあと思い、ググってみたらあったので導入してみました。
かなりすごそうです。ただ、まだ開発中みたいですが…。

上記ページのInstallationから、cl-gtk2-HEAD.tar.gzを落としてきます。
また、このライブラリを使うには、以下のライブラリが必要なようなので、asdfでインストールしてしまいます。

  • cffi
  • trivial-garbage
  • iterate
  • bordeaux-threads
  • closer-mop

cffiは既にインストールしているので他の4つのみをインストールします。

* (asdf-install:install 'trivial-garbage)
* (asdf-install:install 'iterate)
* (asdf-install:install 'bordeaux-threads)
* (asdf-install:install 'closer-mop)

cl-gtk2は、~/lib/lisp/以下に導入します。

$ pwd
/home/khiker/lib/lisp
$ ls
site/  systems/  tarball/
$ cd tarball
$ tar xvzf cl-gtk2-HEAD.tar.gz
$ mv cl-gtk2 ..
$ cd ../systems
$ ln -s ../cl-gtk2/glib/cl-gtk2-glib.asd .
$ ln -s ../cl-gtk2/gdk/cl-gtk2-gdk.asd .
$ ln -s ../cl-gtk2/gtk/cl-gtk2-gtk.asd .

あとは、sbclを起動して、(require 'cl-gtk2-gdk)とでも入力すれば、初回はコンパイルがはじまり、ロードされるはずです。
# もしかしたら、(require 'cl-gtk2-gtk)とか(require 'cl-gtk2-glib)とかもする必要あるのかも?ここらへんよくわかんない。
こいつは、解凍したディレクトリのdocディレクトリ内にtutorial.htmlというのがあるので、そこに載っているサンプルを動かしてみます。

* (gtk-demo:demo-text-editor)

こいつでなんとテキストエディタが起動します。かなりびっくりしました。



そんなこんなで、Common Lispを勉強してて色々驚いています。
# (< 3 4 5 6)と書けるとか。Schemeでも書けるっぽいけど。
それでは、ここらへんで。

更新時刻

  • 2009/08/12/00:15