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の場合、コマンドとして起動した場合のパラメータの渡し方は仕様として定義されていないようで、各処理系のマニュアルを読まないといけない。え・・・決まってないの?みたいなのが結構多い。一つの処理系をターゲットにしたら、結構移行が大変かも。仕様で定義されていない処理を使用する場合は、マクロでソースコードの抽象化をしっかりやっておかないと依存度の高いアプリケーションになってしまうな。