AutoLISP入門 関数紹介

【if】動作の流れを操る者!AutoLISPの条件分岐を解説

今回の記事ではAutoLISPにおける条件分岐の関数について解説していきます。

通常、プログラムは単一の処理しかできないですが、条件分岐を追加することで処理に柔軟性を持たせることができます。

使い勝手のいいAutoLISPコマンドを作成するために役立ちますので、AutoCADを効率化したい方はぜひご覧ください。

【if】動作の流れを操る者!AutoLISPの条件分岐を解説

arrow

条件分岐とは?

「もし○○ならば□□する」といった、ある条件を満たすか満たさないかで処理を分岐させることを条件分岐といいます。

条件の設定には数値の大小関係を調べる関数や、論理演算を行う関数などを使用します。

こちらの記事ではAutoLISPでの比較演算と論理演算について解説しているので、よろしければご覧ください。
関連記事:数値の大小関係を判定!AutoLISPの比較演算を解説
関連記事:条件分岐の相棒!AutoLISPの論理演算を解説

今回ご紹介する条件分岐の関数は次の3つです。

  • 1つの条件分岐 if
  • 複数式のグループ化 progn
  • 複数の条件分岐 cond

1つの条件分岐 if

ifは条件分岐が1つのときに使う関数です。

条件を満たすとThen文が実行されて、満たさない場合はElse文が実行されます。

この関数では条件式の後ろをThen文、Else文と自動で判断するため、Then文とElse文はそれぞれ1式しか記述できないことに注意してください。

複数記述する場合は後述するprognを用いて1つにまとめると実行可能です。

ifの書式

(if 条件式 Then文 [Else文]) ※[]内は省略可能

引数内容
条件式分岐の判定を行う条件。nilまたはnil以外を判定する。
Then文条件式がnil以外を返す場合に実行される処理。
Else文条件式がnilを返す場合に実行される処理。
返り値内容
Then文の実行結果条件式がnil以外を返すの場合は、Then文の実行結果が返る。
Else文の実行結果条件式がnilを返す場合は、Else文の実行結果が返る。

ifの使用例

;入力した数値が3未満か判定する
(setq a (getint "整数を入力してください"))
(if (< a 3)
  (print "3より小さいです。")
  (print "3以上です。")
)

getintはユーザーに整数の入力を求める関数です。

こちらの記事で解説していますので、よろしければご覧ください。
関連記事:【AutoLISP】ユーザー入力関数の使い方【getpoint / getstring / getkwordなど】

複数式のグループ化 progn

prognは引数とした式を順番に評価していき、最後の式の結果を返す関数です。

ifではThen文とElse文それぞれ1式した対応していませんが、prognを使うことで複数の式を実行できるようになります。

prognの書式

(progn 式 ...)

引数内容
progn内で順番に実行される式。複数機銃することができる。
返り値内容
最終式の実行結果progn内に記述された最終式の実行結果が返る。

prognの使用例

;入力した数値が3ならば倍の数値を表示し、違うなら"3ではありません。"と表示
(setq a (getint "整数を入力してください"))
(if (= a 3)
 (progn
    (setq a (* a 2))
  (print a)
 )
 (print "3ではありません。")
)

複数の条件分岐 cond

条件分岐が複数ある場合、ifの中にifを記述する方法もあります。

しかし、表記が複雑になり記述ミスが起きやすく修正などが大変になってしまいます。

condは複数の条件分岐を分かりやすく表記できる関数です。

条件と処理がセットになっていて、上から順番に条件の判定をしていきます。

条件を満たすものがあれば対応する処理を実行し、未判定の条件はスルーして終了します。

condの書式

(cond (条件式 処理) ...)

引数内容
条件式分岐の判定をする条件。nilまたはnil以外を判定する。
処理条件式がnil以外を返すと実行される処理。
返り値内容
処理の実行結果条件を満たした処理の実行結果が返る。

condの使用例

;入力した数値が3または4の時、その数だけ☆を表示
(setq a (getint "整数を入力してください"))
(cond ((= a 3)
       (print "☆☆☆"))
   ((= a 4)
       (print "☆☆☆☆"))
      (T
       (print "3または4ではありません。")
      )
)

最後の条件式をTにしておくと、条件の漏れがなくなります。

まとめ

  • AutoLISPの条件分岐はif、condを使用する
  • ifで実行される処理は1式のみ。複数式を実行する場合はprognで1つにまとめる。
  • condは複数の条件分岐を記述できる

-AutoLISP入門, 関数紹介

AutoLISPのおすすめ書籍はコチラ
AutoLISPのおすすめ書籍はコチラ