2007-08-09
■ はじめますよ 
しばらく前からOn Lispの影響でCommon Lispを勉強中ですが、ライブラリに関する日本語資料はあまりないようで(一応CLtL2の和訳本を購入)、GaucheクックブックにならってCommon Lispクックブックを気まぐれに訳してみようとサブアカウントを使うことにしました。メインアカウントはid:carverです。
■[OSインターフェース] コマンドライン引数へのアクセス 
http://cl-cookbook.sourceforge.net/os.html#accessing-command-line
コマンドライン引数の扱いは処理系依存ですが、ほとんどの処理系にコマンドライン引数にアクセスする手段が用意されています。
SBCL
SBCLでは特別な変数 *posix-argv* にコマンドライン引数が代入されます。
$ sbcl my-command-line-arg
確認:
* *posix-argv* ("sbcl" "my-command-line-arg")
SBCL向けのスタンドアローンなスクリプトを書くにはSBCLのマニュアルを参照してください。
LispWorks
LispWorksでは *line-arguments-list* を使います。
CL-USER> system:*line-arguments-list* ("/Users/cbrown/Projects/lisptty/tty-lispworks" "-init" "/Users/cbrown/Desktop/lisp/lispworks-init.lisp")
CMUCL
CMUCLではコマンドライン引数を含めたUNIXインターフェースをうまく工夫しています。
CLISP
CLISPでは *args* を使います。
(defun main () (print *args*))
Allegro CL
Allegro CLには次の関数でコマンドライン引数を取得します。
sys:command-line-argument-countsys:command-line-arguments
% mlisp -qq -- init 5 safe
(sys:command-line-argument-count :application t) RETURNS 4 (sys:command-line-argument-count) ;; :application defaults to T RETURNS 4 (sys:command-line-arguments) RETURNS ("mlisp" "init" "5" "safe")
複数の処理系に対応する関数例
(defun my-command-line () (or #+SBCL *posix-argv* #+LISPWORKS system:*line-arguments-list* #+CMU extensions:*command-line-words* #+CLISP *args* #+Allegro (sys:command-line-arguments) nil))
コメントを書く