AutoLISP入門 関数紹介

【AutoLISP】リスト同士を結合する関数「append」

append-1
はこ
はこ

こんにちは!はこです。

AutoLISPを独学し、5年以上業務で使用しています。

AutoLISPってなに?という方はまずこちらの記事をご覧ください。
AutoCADユーザーがAutoLISPを覚えるべきメリット3選

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

AutoLISPはリストで様々な処理を行いますが、いくつかのリストを1つのリストにまとめた方が処理しやすい場合が出てきます。

そんなときはリスト同士を結合して1つのリストにできる関数appendを使用しましょう。

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

【AutoLISP】リスト同士を結合する関数「append」

append-2

appendの動作

2つのリストを結合する

以下の2つのリストを結合する場合を考えます。今回は説明のため結合するリストを2つにしていますが、3つ以上でも問題ありません。

(1 2 3)
(4 5 6)

まず、それぞれのリスト作成して変数lst1と変数lst2に格納します。

(setq lst1 (list 1 2 3))
(setq lst2 (list 4 5 6))

listはリストを作成することができる関数です。詳細はこちらの記事をご覧ください。
【AutoLISP】リストを作成する関数「list」「cons」

次にappend内に結合したいリスト(lst1、lst2)を記述します。ちなみに記述した順番でリストが結合されるので順番には注意してください。

(append lst1 lst2)

上記の返り値は次のようになります。

(1 2 3 4 5 6)

結合前のリストはそれぞれ要素数が3でしたが、結合後のリストは要素数が6になりました。

リストを要素に含むリストを結合する

リストを要素に含むリストを結合する場合についても考えます。変数lst3と変数lst4に次のリストを格納して、appendで結合します。

(1 (2 3))
((4 5) 6)
(setq lst3 (list 1 (list 2 3)))
(setq lst4 (list (list 4 5) 6))
(append lst3 lst4)

返り値は次のようになります。

(1 (2 3) (4 5) 6)

ここでまた1つ注意していただきたいのが結合のされ方です。イメージとしては結合前リストの一番外側にある左右の括弧を取り除き、リスト全体の一番外側に新しく括弧を作成します。

このため、appendの引数はリストにする必要があり、リストでないとエラーとなります。

リストでないデータを結合する

リストでないデータを結合したい場合は結合したいデータをlistで無理やりリスト化します。例えば、(1 2 3)というリストの最後に数値の4を追加したい場合は次のように記述することで追加が可能です。

(append (list 1 2 3) (list 4))

返り値は次のようになり、リストの最後に数値の4を追加できます

(1 2 3 4)

appendの書式

appendの構文と引数および返り値は次のとおりです。

構文
(append [lst …])
引数
lst
結合するリスト。省略可能。
返り値
リスト / nil
すべての引数を記述した順番で結合した、1つのリストを返す。引数が省略されている場合はnilが返る。

まとめ

今回のまとめ

  • appendは複数のリストを結合して1つのリストにできる
  • 引数に記述した順番で結合される
  • 引数はすべてリストでないとエラーになる

-AutoLISP入門, 関数紹介

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