Common LispでHttpでHello World

まず第一に、私はLispについて、とても乏しい知識しか持っておりません。Common Lispを使って、Http経由のアクセスに対してHello Worldと応答します。

lisp

環境を構築する

gcl(GNU Common Lisp)とsbcl(Steel Bank Common Lisp)はどちらもCommon Lispの実装です。好きな方を使います。quicklispはCommon Lispのライブラリマネージャです。これを使用して各種ライブラリをインストールします。まずはこれらをapt-getを使用してインストールします。

$ sudo apt-get install gcl sbcl cl-quicklisp

先ほどインストールした処理系を起動して、quicklispの準備をします。gclはgclコマンドで、sbclはsbclコマンドでREPLを起動できます。apt-getでインストールしたquicklispは"/usr/share/cl-quicklisp/quicklisp.lisp"にあるので、これをロードします。

(load "/usr/share/cl-quicklisp/quicklisp.lisp")
(quicklisp-quickstart:install :path ".quicklisp/")

上ではquicklisp-quickstart:installに".quicklisp/"を与えています。もしこれをこのように与えずに呼び出すと、ホームディレクトリにquicklispというディレクトリができます。

(quicklisp-quickstart:install)

これを実行することで、自動的に読み込まれるファイル(~/.sbclrc)にquicklispについて書き込まれるため、次回から自動的にquicklispが使えるようになります。

(ql:add-to-init-file)

Wooのインストール

WooはCommon LispのためのWebサーバです。まずはこれが依存しているlibevをインストールします。

$ sudo apt-get install libev-dev

先ほどのREPLからwooをインストールします。

(ql:quickload :woo)

Hello Worldプログラムの作成

hello_world.lispという名前でファイルを作成し、以下の内容にします。これはWooのREADMEに書かれているものと同じです。

(ql:quickload :woo)

(woo:run
  (lambda (env)
    (declare (ignore env))
    '(200 (:content-type "text/plain") ("Hello, World"))))

シェルから実行します。

$ sbcl --load hello_world.lisp

ブラウザで http://localhost:5000 にアクセスすると、"Hello World"と表示されます。

コメント

2015 - 2017 (c) 成瀬基樹