Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
2007-08-09 - Common Lisp クックブック
[go: Go Back, main page]

Hatena::ブログ(Diary)

Common Lisp クックブック

Common Lisp クックブックをベースにしてます。

2007-08-09

はじめますよ

しばらく前からOn Lispの影響でCommon Lispを勉強中ですが、ライブラリに関する日本語資料はあまりないようで(一応CLtL2の和訳本を購入)、GaucheクックブックにならってCommon Lispクックブックを気まぐれに訳してみようとサブアカウントを使うことにしました。メインアカウントid:carverです。

[] コマンドライン引数へのアクセス

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-count
  • sys: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))