Shammer's Philosophy

My private adversaria

Lisp(ClozureCL)でコマンド引数を受け取るには

方法がわかったのでメモ。サンプルとか書いておいてくれればわかりやすいのに・・・
Clozure CL Documentationの一番下に書かれているオプションに格納されるようだ。使い方はこんな感じです。

$ ccl64 -l sample.lisp -- aaa bbb ccc
("aaa" "bbb" "ccc")
$

上記のsample.lispには、以下のような関数を書いておけばいい。

(defun print-parameter ()
  (print *unprocessed-command-line-arguments*))
(print-parameter)

実際には、何番目の引数が何を意味していて・・・というような処理を書いてやる必要がある。まあ、それは他の言語でも一緒か。Javaのpublic static void main(String[]args)のargsに該当するのが、*unprocessed-command-line-arguments*だ。長ったらしいけれど仕方ないか・・・Lispの場合、コマンドとして起動した場合のパラメータの渡し方は仕様として定義されていないようで、各処理系のマニュアルを読まないといけない。え・・・決まってないの?みたいなのが結構多い。一つの処理系をターゲットにしたら、結構移行が大変かも。仕様で定義されていない処理を使用する場合は、マクロでソースコードの抽象化をしっかりやっておかないと依存度の高いアプリケーションになってしまうな。