ABCLをちょっと触る

Scalaから何らかのLisp方言に乗り換える場合にはJVMのライブラリ関連があるからClojureを使うのが普通の流れな気がするが、Common LispにもJVMで動くABCLという処理系があるので試してみた。

Armed Bear Common Lisp (ABCL) - Common Lisp on the JVM

Docker使うととりあえず動く。

docker run -it easye/abcl

REPLが立ち上がるのでQuicklispを入れる。

(load "http://beta.quicklisp.org/quicklisp.lisp")
(quicklisp-quickstart:install)

GitHub - fukamachi/clack: Web server abstraction layer for Common Lisp

とりあえずhunchentootとclackを入れて、Usageにあるサンプルを動かしてみる。

(ql:quickload '(:hunchentoot :clack))
(defvar *handler*
    (clack:clackup
      (lambda (env)
        (declare (ignore env))
        '(200 (:content-type "text/plain") ("Hello, ABCL!")))))

UsageにはWebブラウザhttp://localhost:5000/ にアクセスしろ、とあるがdocker内で動作しているからdexadorで試す。

(ql:quickload :dexador)
(dex:get "http://localhost:5000/")

動いた。

"Hello, ABCL!"
200
#<EQUAL HASH-TABLE 4 entries, 11 buckets {33B1D2E7}>
#<QURI.URI.HTTP:URI-HTTP http://localhost:5000/>
#<TWO-WAY-STREAM {1A6F263C}>