setqとset|変数へ値を代入する方法の違い
通常の代入にはsetqを使います。setは、評価した結果のシンボルへ代入します。2つの短い例を比較して、変数名と値の関係を確認します。
始める前に
先に確認すると読み進めやすい記事:
確認の手順
- setqで変数aへ10を代入します。
- !aと入力し、保存されている値を確認します。
- 掲載例のようにシンボルを別の変数へ入れ、setで代入します。
- 変わった変数と、その値を照合します。
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実機検証は未実施です。図形を変更する例は、コピーした図面で結果を確認してください。