Let

提供:GizmoLabs - だいたい CAD LISP なサイト
2022年8月16日 (火) 08:03時点におけるGizmon (トーク | 投稿記録)による版 (ページの作成:「AutoLISP には Common Lisp にある局所変数 let や let* はない。 そのため、局所変数を使いたいケースでは、サブルーチン的な関数作…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

AutoLISP には Common Lisp にある局所変数 let や let* はない。

そのため、局所変数を使いたいケースでは、サブルーチン的な関数作ってそっちでローカル変数使って処理するか、lambda を使って let を代用する方法が考えられる。 コスト的には lambda 使ったほうが効率いいと思うけど、バランスで使い分けかな。

; let の代用で lambda を使う例
; (* x y) を (let ((x 2)) (* x y)) で処理したいような時
(setq x 1  y 2) ; 普通の変数をセット
(* x y) ; 1x2=2

; 変数 x を let 的に処理して (* x y) の結果を返す
(apply 
  (lambda (x) ; 局所変数
    (setq x 2) ; lambda 内の x をセット
    (* x y))
  '(x)
) ; 2x2=4 

(* x y) ; 1x2=2 普通の変数は変わってないのでlambda前と同じ結果

関連記事