AutoLISP入門 関数紹介

【AutoLISP】リストの要素を取得する関数「nth」「last」「assoc」

リスト1

今回の記事では関数「nth」「last」「assoc」について解説していきます。

AutoLISPではあらゆるデータをリストと呼ばれる変数に格納することができます。リストを最大限活用するためには要素(リストの中身)を取得することが必須となります。

要素を取得するには専用の関数を使用しますが、それぞれ取得できる要素が異なるので用途に応じた使い分けが必要です。

使用例とあわせて解説してきますのでぜひご覧ください。

【AutoLISP】リストの要素を取得する関数「nth」「last」「assoc」

pickup

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」

図形定義データについてはこちらの記事をどうぞ。
図形編集を自動化しよう!AutoLISPの図形名関数を解説

次の連想リストから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はキーワードを検索でき、最初に見つけた要素を返す。

-AutoLISP入門, 関数紹介

独学おすすめ書籍はコチラ
独学おすすめ書籍はコチラ