関数に渡す引数の値がリストになっている時、car や nthを使って要素を取り出さなくても、applyを使うとリストのまま使えます。
予備知識
リストについて。
AutoLISP 関数 apply
apply は、リスト内の値を引数として、引用関数に渡します。
apply に渡す引数は、引用関数とその関数の引数になる値をまとめたリストです。
関数 quate 関数や記号を引用するときに使います。(quate 関数名) で、引き用関数になります。
quateはアポストロフィで省略ができるので、(quate 関数名)を ‘関数名 と書くことができます。
例)リストの文字列をすべてつなげる
apply を使って、リストの文字列をつなげます。
文字列をつなげる関数は、strcat です。
( strcat “a” “b” “c”) で、文字列がつながって “abc” が戻ります。starcatに渡す引数は文字列でなければいけません。
もし、つなぎたい文字列がリスト(“a” “b” “c”)にだったら、(strcat (car リスト) (cadr リスト) (caddr リスト)) のように一つ一つ文字列を取り出して渡さなければいけません。
しかし、関数applyを使えば、引数をリストのままで渡すことができます。
それでは、 strcat を引用関数(quote strcat)にして、 strcat に渡したい文字列 “a” “b” “c”をリスト (list “a” “b” “c”) にして、3つの文字列をつなげてみましょう。
コマンドラインに入力して、試してみて下さい。
(apply (quote strcat) (list "a" "b" "c"))
リストの文字列が一つになって
"abc"
が戻り値としてコマンドラインに表示されます。
複数の異なるタイプの引数を渡すとき
異なるタイプの複数の引数が必要な関数でもOKです。
例えば、rtos は実数を文字列にする関数です。
変換したい数値、変換モード、精度、の3つの異なった種類の引数が必要です。
以下は、12.25を、十進表記(変換モード2)で、小数点一桁にして、文字列に変換するコードです。
(apply (quote rtos) (list 12.25 2 1))
これで文字列 “12.3”が戻ります。
まとめ
- applyを使うと引数をリストで渡すことができる。
- quote list はアポストロフィで省略できる。
Comments