2013/04/22

Common Lisp (SBCL) を Windows で遊ぶ

サイボウズLiveで友人とちょっとやり取りがありました。
Lispの話題がのぼった(というか私が発言した)ので
ちょっとプログラマな彼に触ってみてもらいたい、
という思いで記事を書き起こしてみます。

といっても私自身 Land of Lisp を買って初めてLispに触ったクチで、
要は完全に初学者なので、四苦八苦しながらも遊べる環境をWindowsで用意しました。
「彼」の環境がWindowsだったはずなのでこれで触ってもらえるはず!
そしてVimを以前使っていたのでSlimvで幸せになれるはず!
たぶん。

Land of Lisp 面白いよ Land of Lisp

さて、Land of Lisp で扱っているのはCLISPでしたが
CLISPの環境では後述の、swank-server(後述)を自動で起動できなかったので
ここではSBCLで設定を進めていきます(Windows+CLISPがダメなのかも)。
なお本来、Common Lispの方言ClojureでもClozure CLでもSBCLでも動くとのこと。
加えて、Schemeとかも動くらしいですよ(ただしこれはLinux系に限る)。

では早速インストーラーを用意しましょうか。
必要なのは下記リスト。




ごらんの通り、意地でもCygwinは使いません。
理由はAll-in-Oneでいける反面、個人的に不便さを感じたためです。
また注意点として、Python3.x系ではこれから導入するvim-pluginが動作しません
なお、ただCommon Lispに触れて遊ぶだけであれば
いわゆるREPL( Read-eval-print loop )でOKなのですが、それじゃ面白くないでしょう?



インストール


先のリンクからひと通りインストーラーおよび
アーカイブをダウンロードしてインストールまで行いますが、
Windowsのデフォルトインストール先となる "C:\Program Files\" ではなく
C:\toybox\ などにこの環境をまとめてインストールします(UACとかうるさかったりするので)。

ひと通りインストールが完了したら環境変数を設定します。
例えばインストール先がC:\toyboxであれば、

C:\toybox\clisp-2.49\;
C:\toybox\vim73\;
C:\toybox\msysgit\cmd\;

という形で設定します。
Mercurialについてはインストーラを用いれば自動で設定されるので省略
Python2.7については後の設定で直接呼び出すだけなので設定を行いません


さて、インストール手順まで明記していくと冗長ですので
例としてあげた C:\toybox\ 以下あたりに

  • Steel Bank Common Lisp
  • Python27
  • vim73
  • msysgit

という感じでフォルダがならんでいればいいのでないでしょうか。


SBCL自体はここで「ファイル名を指定して実行」( Windowsキー + r )に
cmd か powershell と入力すればプロンプトが表示されるので

> sbcl

とか入力するとすでに遊べる状態にあります。
これがREPL(Read-eval-print loop)と呼ばれている画面です。

終了させるには

* (exit)

と入力すればプロンプトに戻ります。

GVimの設定


続いてVimからSlimvを利用する為の設定を行います。
SlimvというのはVimプラグインのひとつなので
プラグインを管理する環境を用意しておくとあとあと楽です。

というわけでここで選択するのはneobundle
まずインストール先を用意してあげましょう。

WindowsのVimは%HOMEPATH%以下の"vimfiles"フォルダ内を自動的に読み込みます。
よってこのフォルダ内にプラグインや各種設定ファイルを置いておくと管理が楽です。
たとえばプラグインであれば下記のようにフォルダを構成します。

C:\Users\[ユーザ名]\vimfiles\bundle

続いて次のようにプロンプトからコマンドを実行します。

cd C:\Users\[ユーザ名]\vimfiles\bundle\
git clone https://github.com/Shougo/neobundle.vim.git

これでneobundle.vimという名前のフォルダ内にGithubからcloneされたファイルが配置されます。
続いてVimの設定ファイルを%HOMEPATH%以下に_vimrcという名前で作成します。
下記は一例。

set nocompatible
filetype off

if has("vim_starting")
   set runtimepath+=$HOME\vimfiles\bundle\neobundle.vim\

   call neobundle#rc(expand('$HOME\vimfiles\bundle\'))
endif

NeoBundle 'https://github.com/Shougo/neobundle.vim.git'
NeoBundle 'https://bitbucket.org/kovisoft/slimv'

filetype plugin on
filetype indent on

let g:slimv_python = 'C:/myTools/Python27/python.exe'
let g:slimv_swank_cmd = '!start "C:/myToolbox/Steel Bank Common Lisp/1.1.4/sbcl.exe" --load "C:/Users/[ユーザ名]/vimfiles/bundle/slimv/slime/start-swank.lisp"'

これでneobundleを利用する準備が整いました。
続いてSlimvのインストール。
SlimvとはEmacsの対話型開発環境であるSlimeのVim版と考えてください。

GVimを起動して下記コマンドを入力するとインストールされます。

: NeoBundleInstall

しばらく待つと利用可能な状態になります。
さて、これで一通りの環境が整いました。

あとは拡張子が".lisp"のファイルを開くなり新規作成するなりで
GVimを起動するとSlimvは自動的にロードされる形です。
使い方は",c"とタイプするとswank-serverの起動、
",d"でその行をSBCLに渡して評価させることができます。

swank-serverはCommon LispとSlimv間で
データのやり取りを行うサーバで、コレがあることにより
複数の方言で動作可能となっています。

さて、実施にやってみるとこんな画面になります。


画面左上の画面に書いた式を",d"で評価すると画面右側に評価内容が表示されています。
これでもう遊ぶ環境は問題ありませんね。

ちなみにこの環境では左下にCLISPが起動しています。
これはプラグインにVimShellを用いているためです。
VimShellはVimのウィンドウ内にシェルを呼び出すという面白いプラグインなので
先ほどと同様の手順で導入してみると面白いかもしれません。
ただし、Windowsの場合はVimProcライブラリをコンパイルしなければならないので
MsysGit付属のmake(C:\toybox\msysgit\mingw\bin\make.exe)を
用いてコンパイルしましょう。
VimShellの導入方法はググってみてください。

Common Lispの得意とする数学分野をより楽しみたいのであれば
下記のような本に手を出すともっと楽しめます。


数学アレルギーを克服するくらい本当に面白い本だと思います。

(exit)

0 件のコメント:

コメントを投稿