+CADLabo.comCAD / LISP / AUTOMATION
AutoLISP初心者講座

setqとset|変数へ値を代入する方法の違い

AutoLISPの基本・図形操作のTips一覧
要点

通常の代入にはsetqを使います。setは、評価した結果のシンボルへ代入します。2つの短い例を比較して、変数名と値の関係を確認します。

始める前に

先に確認すると読み進めやすい記事:

確認の手順

  1. setqで変数aへ10を代入します。
  2. !aと入力し、保存されている値を確認します。
  3. 掲載例のようにシンボルを別の変数へ入れ、setで代入します。
  4. 変わった変数と、その値を照合します。

SETQってなに?

まずは王道の SETQ から。これは「Set Quoted」の略で、変数に値を代入するための基本関数です。

掲載コード
(setq a 10)

このコードは、「aという変数に10を入れてね」っていう命令。
左側の a は評価されず、文字通り「a」という名前の変数に代入されます。

通常の代入はsetqで書くと、代入先をコードから読み取りやすくなります。

SETってなに?

さて、ちょっとクセ者なのが SET。これは左辺を評価して、その結果のシンボルに値を代入する関数です。

掲載コード
(setq var 'a)
(set var 20)

この場合、var には 'a(シンボルa)が入ってるので、SETは「aに20を代入する」って動きになります。

つまり、SETは「変数名を変数で指定する」ことができるんです。
代入先のシンボルを別の変数で保持する場合に使います。

実例:動的に変数名を作って代入する

SETの真骨頂はここ!
たとえば、ユーザーから複数のポイントを取得して、それぞれを point_1, point_2, point_3…って名前で保存したいとき。

掲載コード
(setq j 1)
(while (set (read (strcat "point_" (itoa j))) (getpoint "\nPoint : ")) 
  (setq j (1+ j))
)


SETを使うことで、文字列から変数名を生成して代入できちゃうんです。

応用:ポイントをY座標でソートして線を描く

以下では、取得したポイントをY座標でソートして、順番に線を描くルーチンも紹介されてました。

掲載コード
(command "_line")
(mapcar 'command lpt)

まとめ:SETQとSETの使い分け

関数左辺の評価使いどころ
SETQ評価しない普通の代入。基本はこっち!
SET評価する動的な変数名を使いたいとき

SETQは「素直でまじめな子」。SETは「ちょっとひねりの効いた自由人」。
どちらもAutoLISPの世界では欠かせない存在です。

結果の確認

setqは書いた変数名を使い、setは第1引数を評価して代入先を決める点を区別します。動的な変数名が不要な処理は、setqとリストで整理できます。

参照資料

対象環境・動作確認

AutoLISP対応環境(関数・OSごとの対応は要確認)。内容更新:2026年10月5日。掲載コードのCAD実機検証は未実施です。図形を変更する例は、コピーした図面で結果を確認してください。