CL入門 No.1 - 環境導入

入門編でもまとめてみます

三段で説明します。

  1. 自分は、まだCommon Lispを始めて日が浅い(経験時間が短い)
  2. だから、応用課題を提示できるほどの例がない
  3. とりあえず、Common Lispを知らない人向けに入門方法をまとめてみる

1. 環境導入 - 言語処理系 (SBCL)

まずは、Common Lispを理解してくれる言語処理系が必要です。
CL実装は星の数ほど世の中にありますが、"Steel Bank Common Lisp" (SBCL) を紹介します。

理由は3つです。

  • 不安定だけどWindows版が存在する
  • ネイティブコンパイルなので基本的に早い*1
  • 名が知れているので動作保証しているライブラリが多い

導入法

もちろん公式ページからダウンロードしてくるだけです。
http://www.sbcl.org/
導入法は主に2通りです。

  1. ソースからコンパイルする(別のCommon Lisp実装が必要 *2 )
  2. バイナリインストールする

1.は本末転倒な気がするのでやめておきます。
(もちろんCLISPのようなさらに入手しやすい実装を経由するのはアリ)

Linuxならパッケージ管理システムに問い合わせれば見つかると思います。
Windowsならインストーラを実行するだけです。

実行してみる

端末に sbcl と入力すると、Common Lispの対話型環境*3が立ち上がります。
立ち上がった対話型環境で次のように入力してみましょう。

(+ 1 2 3)

すると、6と出力されると思います。
加算記号の位置*4に違和感を覚えるかもしれません。

SBCLの場合、終了するには Ctrl+D です。
または、次の関数を呼び出します。*5

(sb-ext::quit)

2. 環境導入 - ライブラリ管理システム (Quicklisp)

ライブラリ管理システムとはライブラリ管理*6を行う便利ツールです。
主に、次のようなことが簡単にできるようになります。

  • 依存するライブラリを芋づる式にロードする
  • ローカルにないライブラリを自動的にリポジトリ*7から確保する
  • ワーキングディレクトリにあるプロジェクトを簡単にロードする
  • ロード済みライブラリの更新を簡単化する

特にCL初心者はLoad, Eval, Compileなどの違いが分からない状態だと思うので、
こういったツールから使い始めることで慣れ親しんでみて下さい。

導入法

まずは、公式ページからインストーラ*8をダウンロードします。
http://beta.quicklisp.org/quicklisp.lisp

インストール手法は公式ページ*9に載っていますが、英語が読めない人向けに日本語で解説していきます。

まずはquicklisp.lispがあるディレクトリで、sbclを立ち上げて下さい。
立ち上げた対話型環境で、次のプログラムを実行しましょう。*10

; インストールプログラムの読み込み
(load "quicklisp.lisp")

; インストーラの実行
(quicklisp-quickstart:install)

; [ OPTION ]
; 処理系の初期読み込みファイルにQuicklispを追加
(ql:add-to-init-file)

add-to-init-fileを実行しておくと、処理系の立ち上げ時に自動的にQuicklispを読み込んでくれる*11ので楽できます。

他にも必要なライブラリはありますが、主要なものはQuicklisp経由で大抵手に入るので、とりあえずここまでやっておけば次に繋がります。

3. まとめ

SBCLは軽快に動作しますし、ライブラリ管理システムの導入はインストーラ化されていますので、導入はいたって楽ですよね。

次は、quicklispの使い方に慣れながら便利ツール導入を紹介する予定です。
プログラミングの仕方*12はその後です。

*1:手続きが機械語に翻訳されるという意味です。

*2:SBCLは99%ぐらいがCommon Lispで書かれています。

*3:他のインタプリタ言語を知っているなら、ちょっとだけ似て非なる使い方をするかもしれないと気に止めておいて下さい。

*4:Lispでは前置記法といって、基本的に操作名は先頭に書きます。

*5:多くの場合では sb-ext:: を省略して (quit) だけでもいいのですが、Common Lispではpackageという特有の問題が発生することがあります。

*6:ライブラリとは再利用性の高いプログラムのパッケージですが、Common Lispではツールや自身のプロジェクトもライブラリ管理システムまかせにすることが多いです。

*7:例えばQuicklispではネット上に公式のリポジトリがあり、毎月更新されています。

*8:lispのインストーラはlispで書かれていることが多いです。

*9:http://www.quicklisp.org/beta/

*10:;(セミコロン)から行末まではコメントです。

*11:シェルやインタプリタ環境に慣れている人は、 .sbclrc に追記すると言ったらすぐに納得してくれると思います。

*12:変数とか関数は難しいですよね。