付録1 Allegro Express のインストール

付1.1 ANSI Common Lisp with IDE のダウンロードとインストール

米国Franz社より，Allegro Common Lisp 10 という新しいバージョンが発売になり，無料の Free Express もAllegro Common Lisp 10 free Express にバージョンアップされました．これを機会に，執筆中の「Common Lisp と人工知能プログラミング」用に，これのダウンロードとインストール方法を書きました．以下はその内容です．Peatixでチケット販売しているイベント「人工知能プログラミングのためのCommon Lisp 入門」の参加者はこのブログ記事を参考に，各自のパソコン環境にインストールをお願いします．Linux環境でのSBCLインストールについてはこの次のブログ記事にて公開します．注意：テキストとしてコード部分をコピペしても，コマンド実行できないかもしれません．その理由はEPUBリーダとして Kinoppy に合わせて，空白文字を にしているためです．申し訳ありませんが，空白文字はコピペではなく，手打ちするようにお願いします．

米国Franz社は商用Lisp処理系のベンダーとして唯一日本で販売代理店を持つ会社である．ほかに個人で利用するには LispWorks 社のものがあるが，メールのやり取りが英語で必要になるなど，企業や研究所などの法人が利用するには難しいところがあり，特に理由がない限り，日本では法人用にはFranz社のものが唯一の選択となる．Lisp の勉強用に Franz は Free Express という名で商用とほとんど変わらない性能の処理系を利用可能にしている．それで提供されるのは 32 bit 版のみだが，メモリー空間に限界があるにせよ，本書籍の勉強用には十分な性能だ．付属のライブラリなどを除いて Common Lisp として実商用版との性能上の違いは他には何もない．この付録１では Allegro Common Lisp free Express のダウンロードとインストール方法を説明する．





Franz 社のダウンロードサイト http://www.franz.com/downloads/clp/survey に行って，次のような画面で Emailアドレスにインストラクションを受け取れるアドレスを書きこみ，"I agree to ... " のチェックボックスにチェックを入れて，「Submit」ボタンを押す．"Please add me ... " のチェックボックスにチェックを入れても入れなくてもかまわない．また，下記の画面には表示されていないが，その下にも詳細情報の記入欄があって，これも記入してもしなくてもかまわない．











すると，下のようなダウンロード画面が現れるので，望みの処理系を選択してクリックする．以下ではWindows版を選択した場合について説明する．











ウェブ経由でのファイルダウンロードになるが，いつものようにファイルを開くか「保存」するかを聞かれるので，「保存」を選んでダウンロードする．ダウンロード後はそれを実行すると，インストールが開始される．

インストールが始まると，最初に以下のような画面が表示される．で「I Agree」ボタンを押す．











次に137.9MB必要という画面では，特に理由がなければ規定セットのままで「Next>」を押す．









既定のインストール場所は C: 直下であるが，最初のインストールで特に理由がなければ，このままで「Install」を押す．二回目以降のインストールではたとえプログラムのアンインストールしたあとでも，残っているフォルダを削除しないと同じ場所には再インストールができないので注意しておく．









以下のようなインストール進行中の画面が出たあと









以下のように完了画面が出ればインストール終了だ．









「Close」ボタンを押してインストールが終了する．





さて，いよいよ ACL の起動だが，最初にパッチ当てをする必要がある．スタートメニューからACL10 Free Express を立ち上げると，まず最初に聞かれるのはパッチを当てろという以下のような画面だ．キャンセルすることもできるが，ここではパッチ「List New Pathes Now」を押してパッチを当てる．





以下のような画面が出たら，最初は「List All Patches」を押してパッチを表示させ，"Download all new ... "ラジオボタンを選択しておいて，「Download」を押そう．二回目以降の起動でもパッチを調べて当てたい場合には，ACL10 IDEのメニュー選択で「Install」->「Updates」とすれば同じ画面を表示できる．



以下のような画面が出ればパッチのダウンロード完了だ．









しかし，この状態ではパッチはまだ当たっていないし，このまま再度ACLを立ち上げようとすると，パッチが当たっていないと叱られる．ACL10を終了した状態で，通常のWindowsプログラムを起動する方法でスタートメニューから update.exe を起動すると，実際にパッチが当てられて，再びACLが使えるようになる．ACLを再起動してこんな画面が表示されれば，インストールとパッチ当てが終了となる．







付1.2 Modern Common Lisp の作成

上記で得られる Lisp 環境は ANSI Common Lisp であり，シンボルで大文字小文字を区別しない．小文字で入力しても自動的に大文字とされて，返される値も大文字のシンボルだ．

CG-USER(1): t

T

CG-USER(2): nil

NIL

CG-USER(3): 'foo

FOO

CG-USER(4):

ここでは，プロンプトが大文字の CG-USER であること，入力されたシンボルは大文字で返されることを確認されたい．





Lisp はFORTRANと同じぐらい古い歴史の計算機言語であり，その当時は計算機に小文字を入力する手段がなかった．それを今も引きずっているわけだが，今日ではどの計算機言語もあたりまえのように大文字小文字を区別する．すべての計算機の文字コードにUNICODEがインストールされた今日では，これはあまりにも古すぎると言わざるを得ない．実は入力文字に関しては，Lisp リーダには大文字小文字をそのまま保つモードがある．ところが，大文字小文字を区別する preserve モードにおいても，Common Lisp に既存の関数やマクロのようなシンボルはやっぱり大文字のままなのだ．だから，せっかく preserve モードに変えても，コードを書くときには既存の Common Lisp 関数やマクロを大文字で書かざるをえず，とても使いにくい．ありがたいことに，Franz 社は既存の Common Lisp のすべてのシンボルを小文字に変えて preserve モードにした処理系をバンドルしている．それが Modern Lisp と呼ばれるものだ．





商用版を購入すれば，ANSI Lisp (alisp)，Modern Lisp (mlisp)，それらの non-international 版，および with IDE 版と合計６種類の Lisp 処理系が配布される．上記でインストールした Free Express は ANSI Lisp with IDE だが，これを Modern Lisp with IDE に変換することができる．以下ではその方法を説明する．





まずは自分がインストールした Free Express フォルダ（標準では C:\acl100express）の中身をみて，allegro-express.dxl の存在を確認されたい．これがインストールした Free Express の Lisp イメージであり，これをもとに modern lisp を作成する．ダウンロードしたものが Linux/Unix だとひょっとしたら allegro-express.dxl ではなくて，alisp.dxl とかかもしれない．いずれにしても dxl のタイプがついた最新のものに注目されたい．





ACL free Express を起動した状態で（すなわち，allegro-express.dxl や alisp.dxl の利用状態で），次のようにタイプ入力する．

CG-USER(4): (progn

(build-lisp-image "sys:allegro.dxl" :case-mode :case-sensitive-lower)

(when (probe-file "sys:allegro.exe") (delete-file "sys:allegro.exe"))

(sys:copy-file "sys:allegro-express.exe" "sys:allegro.exe"))

done.

T

しばらくして，このように done. で終了したら，あらためて，Free Express フォルダの中身を見てみよう．新しく，allego.exe と allegro.dxl があるはずだ．そしたら，Express を終了して今度は allegro.exe を起動する．スタートメニューには現れていないので，直接フォルダを開いて，「開く」で実行する．こんな風になれば成功だ．

cg-user(1): t

t

cg-user(2): nil

nil

cg-user(3): 'foo

foo

cg-user(4): most-positive-fixnum

536870911

cg-user(5): (cons 'a '(b c))

(a b c)

ここでは，プロンプトが小文字に変わったこと，入力したシンボルが小文字のままに保たれていて，組み込みのシンボルの値が得られること．小文字で関数も実行できることを確認されたい．





ユーザの中には IDE を嫌って，alisp や mlisp を好みのエディタと連携して使いたいという人がいるかもしれない．そういう人たちのために，ついでにそういう IDE なしの mlisp や alisp の作り方も説明しよう．





Free Express を起動後，その中で次のようにすれば，大文字小文字を区別するが IDE のない mlisp を作成できる．

CG-USER(1): (progn

(build-lisp-image "sys:mlisp.dxl" :case-mode :case-sensitive-lower

:include-ide nil :restart-app-function nil

:restart-init-function nil)

(when (probe-file "sys:mlisp.exe") (delete-file "sys:mlisp.exe"))

(sys:copy-file "sys:allegro-express.exe" "sys:mlisp.exe"))

done.

T

同様に，Free Express を起動後，その中で次のようにすれば，旧来のように大文字小文字を区別しないし IDE もない alisp を作成できる．

CG-USER(1): (progn

(build-lisp-image "sys:alisp.dxl" :case-mode :case-insensitive-upper

:include-ide nil :restart-app-function nil

:restart-init-function nil)

(when (probe-file "sys:alisp.exe") (delete-file "sys:alisp.exe"))

(sys:copy-file "sys:allegro-express.exe" "sys:alisp.exe"))done.T

いずれにしても，このままではいちいちフォルダを開けないと Lisp を起動できないので，好みの処理系を起動したら，タスクバーにピン止めしておくのが便利である．

付1.3 ACL with IDE の使い方

ベテランの Lisper はエディタとして emacs を便利に自分用に仕立てて使うが，ここでは初心者向きに ACL の GUI の使い方について説明する．IDE を使うと REPL でのプリティプリントとコピーペイストが可能になること，プロジェクトやフォルダを指定してファイル中のシンボルの検索ができること，などが非常に便利である．

ACL プロジェクト

ACL with IDE では Eclipse や Visual Studio などと同様に，プロジェクトとして開発システムをまとめることができる．









IDE のメニュー選択で，File --> New Project とすると，以下のような画面が現れる．







このまま OK を押すと，ACL プロジェクトがまとまって保存される場所が C: の直下の allegro-projects という名称のフォルダになる．これを嫌うのなら適当なフォルダ（たとえばDocumentsフォルダ）を選択して，自分の好きな名前のフォルダ名（たとえばmy-projects）にすればよい．いずれにしても以後そのフォルダがプロジェクトフォルダとなって使われるようになる．





OK を押すとこのような画面になるので，ここで新しく作るプロジェクト名を入力する．









たとえばここで cl-aip という名前のプロジェクト名にして，OK を押せば，以下のような画面が得られる．



画面左にはREPLペイン，左上には Project Manager ペイン，右側にはエディタペインがある．

エディタと自動インデント

エディタ画面でもREPL画面でも，閉じ括弧をタイプした時に対応する開き括弧が画面表示される．









また，エディタ画面でもREPL画面でも，リターンキーで改行するとシステムが自動的に見やすくインデンテーションを付けてくれる．









だから一部の人たちが言う，括弧のお化けみたいな言い方は全く恐れるに足らず，こういうエディタさえあれば括弧の多さで心配するなどということは杞憂であることが了解できる．





本書籍ではエディタの使い方については本文中では何も触れずに，REPL ですべて入力しているように記述しているが，それはエディタになると各処理系固有の記述が必要になるからである．ACL with IDE ではエディタで編集中に書式を評価したり，エディタから離れることなく関数定義を実行したりすることができる．





試しにエディタ画面上に (+ 3 4) とタイプ入力して，リターンを押さずにその書式が選択されている状態で ctrl-E（Ctrlキーが押された状態でEを押す）を押してみよう．すると REPL 画面上にその評価結果が表示されるはずである．残念ながらシンボルの値については，そのシンボルをマウスで指してクリックすることにより選択してから ctrl-E を押す必要がある．







だから実のところ，本書籍のコードをまとめたファイルをダウンロードして，それをエディタで開いておけば，すべてのコードをタイプ入力することなく読み進むことができてしまうわけだ．しかし，これは初心者にはお勧めしない．タイプミスをしたり，関数名を思い出しながらタイプ入力することでしか，初心者の域を脱することはできないと考えるからである．





さて，今度はREPLあるいはエディタ画面上でゆっくりとタイプ入力しながら，全画面一番下にあるコラムに注目してほしい．すると評価結果が表示されるのに加えて，関数名を入力した直後にはその引数が表示されることが確認できる．これは非常に便利である．あやふやな関数名を入力してもそれが表示されなければ間違いだと分かるし，さらに引数の順序を逆にするなど間違った呼び出しをしていないかもこの欄で再確認できる．









さらに，関数や変数について詳細情報が欲しければ，そのシンボルを選択しておいてF1キーを押すと関連するドキュメントを閲覧することができる．この文書は本書籍の本文中でも多くの場所で外部リンクをつけている Hyperspec の内容と同一であるが，直接 Hyerspec を見に行くよりもはるかに便利かつ印刷も綺麗である．







Common Lisp にはシンボルを検索するのに，その印字名に一部でもマッチすればそれをリストする apropos という便利な関数がある．ACL ではそれをメニューからの選択で Apropos ウィンドウで表示できる．ACL のメニュー選択で，Search --> Apropos ... と選択すれば，以下のような画面が表示される．そこで任意の文字列を入力して「Search」ボタンを押せばよい．







リストされたシンボルはそれがさらにメニューになっている．選択してマウス右クリックすれば，さらにそれについてF1することもできる．



さらに便利なのはプロジェクト単位やディレクトリ単位で，ファイルにあるシンボルをサーチする機能である．ACL に既存のシンボルの探索には apropos が使えるが，自分で開発中のプログラムについてはこの Find In Files を使う．ACL IDE メニューにおいて Search --> Find in Files ... と選択すると次のような画面が現れる．そこで任意の探したい文字列を入力すると，それを含むファイル名が上部に，その周りの情報が下部に表示されるので，これだと思われる部分をクリックすれば，自動的にエディタが開かれる．











付1.4 ブレーク時の対処方法

ACL with IDE におけるブレーク時の対処方法は，コマンドラインではなく，開いたブレークウィンドウのメニュー選択で対処できるので簡単である．もっとも簡単な方法では，「Cancel」を押せばもとのトップレベルに戻ることができる．







mlisp や alisp の場合には，REPL 環境中でのタイプ入力による対処となる．最も簡単には，メニューからトップレベルに戻るためのメニュー番号を選択して，以下に示すように :continue《番号》 とタイプ入力する．











付1.5 システムの終わり方

一般に Lisp システムを終わらせるには， (exit) とか (quit) と入力する．中には (bye) といういうシステムもある．ACL は Unix/Linux ライクなコマンドを受け付けることができて， :cd とか :pwd などが使えるが，同様に :exit というコマンドでも終了できる．

プロジェクトを開いていて，untitled ファイルにコードを記述した場合には，それを閉じようとするとそれを保存するかどうか問われる．「Save」ボタンを押すと現在のプロジェクトに保存するかどうかを問われるので，「Yes」を押して，ファイル名として適当な名前をつけてプロジェクトに保存する．



