Let

提供:GizmoLabs - だいたい CAD LISP なサイト

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前と同じ結果

関連記事