AutoLISP では、多くの関数に値を渡す必要があります。このような値を引数と呼びます。
また、引数を指定できない関数や、省略可能な引数を指定できる関数もあります。ユーザ定義関数に省略可能な引数を指定することはできません。引数を指定したユーザ定義関数を呼び出すときは、すべての引数に対して値を渡さなくてはなりません。
引数として使用するシンボルは、ローカル変数の前の引数リストで定義します。引数は特殊なローカル変数として扱われ、引数の変数はその関数以外では使用できません。同じ名前の複数の引数を持つ関数を定義することはできません。
複数の引数に同じ名前を使用すると、次のエラーメッセージが AutoCAD のコマンド プロンプトに表示されます。
引数名が重複しています:
次のコードは、2 つの引数を指定する関数を定義します。このコードは、両方とも文字列データ タイプとなる引数を想定しています。引数は、結合され、結合結果の文字列として返されます。
(defun ARGTEST ( arg1 arg2 / ccc ) (setq ccc "Constant string") (strcat ccc ", " arg1 ", " arg2) ) ARGTEST
AutoLISP は常に最後の式を評価した結果を返すため、ARGTEST 関数は希望の値を返します。ARGTEST の最後の行では、strcat を使用して文字列を結合し、その結果の値が返されます。これは、プログラムから戻り値を出力させないための princ 関数を使用しない場合の 1 つの例です。
この関数は、アプリケーション内で繰り返し使用して、1 つの定数文字列と 2 つの変数文字列を特定の順序で結合することができます。この関数は値を返すので、返された値を変数に格納し、後でアプリケーションで使用することができます。
(setq newstr (ARGTEST "String 1" "String 2")) "Constant string, String 1, String 2"
変数 newstr には 3 つの文字列を結合した値が代入されます。
変数 ccc が ARGTEST 関数の中でローカル変数として定義されていたことに注意してください。関数の実行が完了すると、AutoLISP は変数に割り当てられたメモリを取り戻します。次のコードを使用して、ccc に割り当てられた値を確認することができます。
!ccc nil
文字列の値が ARGTEST 関数に渡されていない場合、strcat 関数は、次のエラーを返します。
; エラー: 引数のタイプが間違っています: stringp 1
type 関数を使用して、引数のデータ タイプを確認し、適切に対応することができます。vl-catch-apply-all 関数も、strcat 関数によって返されるエラーの捕捉に役立つ場合があります。次のコード例では、結合して結果の文字列を返す前に、ARGTEST 関数が 2 つの文字列値を渡したことを確認するために、type 関数を使用しています。
(defun ARGTEST (arg1 arg2 / ccc retVal) (setq ccc "Constant string") (if (= (type arg1) 'STR) (if (= (type arg2) 'STR) (setq retVal (strcat ccc ", " arg1 ", " arg2)) (prompt "bad argument: arg2 not a string\n") ) (prompt "bad argument: arg1 not a string\n") ) (if retVal retVal (princ) ) )