AutoLISPってなに?という方はまずこちらの記事をご覧ください。
AutoCADユーザーがAutoLISPを覚えるべきメリット3選
今回の記事では関数「nth」「last」「assoc」について解説していきます。
AutoLISPではあらゆるデータをリストと呼ばれる変数に格納することができます。リストを最大限活用するためには要素(リストの中身)を取得することが必須となります。
要素を取得するには専用の関数を使用しますが、それぞれ取得できる要素が異なるので用途に応じた使い分けが必要です。
使用例とあわせて解説してきますのでぜひご覧ください。
【AutoLISP】リストの要素を取得する関数「nth」「last」「assoc」
n番目の要素を取得 nth
nthの動作
リストの要素を取得する関数にはcarとcdrがあります。さらにcarとcdrの組み合わせをシンプルに表現したcadrやcadddrなどもありますが、5番目以降の要素には対応していないという欠点があります。
carやcadrについて知りたい方はこちらの記事をご覧ください。
>>【AutoLISP】car部とcdr部を取得する関数「car」「cdr」
nthはn番目の要素を取得できるため、5番目以降の要素も取得することが可能です。
次のリストから5番目の要素(数値の5)を取得する例を説明します。
(setq lst (list 1 2 3 4 5 6))
nthの引数は取得したい要素の番号と対象のリストです。プログラムの記述は次のようになります。
(nth 4 lst)
このとき、要素番号に注意してください。先頭の要素番号は0なので、5番目の要素を取得する場合は引数に4を指定します。
また、最大の要素番号より大きい数値を指定した場合はnilが返ります。
nthの書式
nthの構文と引数および返り値は次のとおりです。
(nth 要素番号 リスト)
引数 | 内容 |
---|---|
要素番号 | リストから取得する要素の番号。整数で指定する。先頭の要素番号は0。 |
リスト | 要素を取得するリスト。 |
返り値 | 内容 |
---|---|
n番目の要素 | 引数で指定したリストの要素が返る。 |
nil | 指定した要素番号がリストの最大要素番号より大きい場合とリストが空の場合はnilを返す。 |
最後の要素を取得 last
lastの動作
lastはその名前のとおり、リストの最後の要素を取得できる関数です。
前述したnthでリストの最後の要素を取得したい場合、リストの要素数を調べる必要があります。
しかし、lastの引数はリストだけなのでnthのように要素数を調べる必要がありません。
次のリストで最後の要素(数値の5)取得する例を説明します。
(setq lst (list 1 2 3 4 5))
プログラムの記述は次のとおりです。
(last lst)
lastの方がシンプルに表現できます。
lastの書式
lastの構文と引数および返り値は次のようになります。
(last リスト)
引数 | 内容 |
---|---|
リスト | 最後の要素を取得するリスト。 |
返り値 | 内容 |
---|---|
最後の要素 | 引数に指定したリストの最後の要素が返る。 |
nil | リストが空の場合はnilを返す。 |
要素の検索 assoc
assocの動作
assocはリスト内をキーワードで検索し、そのキーワードを先頭要素に持つコンスセルを返す関数です。主に図形定義データなどの連想リストから要素を取得するときに使用します。
コンスセルと連想リストってなに?という方はこちらの記事で解説しています。
>>【AutoLISP】car部とcdr部を取得する関数「car」「cdr」
次の連想リストから1を先頭要素に持つ要素(真ん中の要素)を取得する例を説明します。
(setq lst (list (cons 0 "a") (cons 1 "b") (cons 2 "c"))
引数はキーワードと対象のリストなので、プログラムの記述は次のとおりです。
(assoc 1 lst)
この場合の返り値は(1 . "b")となります。
assocの特徴としてキーワードを先頭に持つ要素が複数あった場合は最初に見つけた要素を返すので注意してください。
次のリストでキーワードを1としてassocを実行した場合、返り値は先頭に近い2番目の要素になります。
(setq lst (list (cons 0 "a") (cons 1 "b") (cons 1 "bb"))
assocの書式
assocの構文と引数および返り値は次のとおりです。
(assoc 要素 リスト)
引数 | 内容 |
---|---|
要素 | 検索するリストの先頭要素。 |
リスト | 検索対象の連想リストまたは通常のリスト。 |
返り値 | 内容 |
---|---|
リストの要素 | 指定したリスト内で引数の要素を先頭に持つコンスセルを返す。 |
nil | 指定した要素が見つからなければnilが返る。 |
まとめ
- nthはn番目の要素を取得できる。先頭の要素番号は0なので注意。
- lastは最後の要素を取得する。
- assocはキーワードを検索でき、最初に見つけた要素を返す。