CLでSRFI-22 — #:g1

Posted 2012-02-28 20:02:00 GMT

CLでSRFI、今回は、SRFI-22の「Running Scheme Scripts on Unix」です。
シェルスクリプトとして使われた場合の取り決め的なSRFIです。
とり決めの内容としては、#!の扱い、スクリプト内でmain関数を定義を書くと、それが実行されること、引数は文字列のリストで渡ってくること、位です。

動作

#!/usr/bin/env sbcl-srfi-22

(defun display-file (filename) (with-open-file (in filename) (loop :for line := (read-line in nil nil) :while line :do (write-line line))))

(defun main (arguments) (dolist (f (cdr arguments)) (display-file f)) 0)

のようなものを書いて、シェルから実行します。

移植について

どういう風にするか迷いましたが、バイナリであることも前提のようなので、とりあえずSBCL限定で、srfi-22の仕組みが組込まれた実行可能ファイルを作るライブラリということにしました。
$ sbcl --load srfi-22.lisp
とすると、ディレクトリに、sbcl-srfi-22という実行ファイルができるので、これをパスの通った場所に設置します。
実行時のパッケージは、srfi-22。cl、cl-userがuse-packageされています。
また、#!の処理をするために、#!のリーダーマクロを定義しているので、#!がリーダーマクロとして定義されたスクリプトは上手く動かないことになります。しかし、まあ、OKではないかなということで。 ■

comments powered by Disqus