Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

uLispの"let"と"let*"の違い

uLispの"let"と"let*"の違い

実際のところ

letはローカル変数を定義する関数です。
ただ、uLispにおいては関数定義の外に結果を出す場合にもエラーを吐かれます。

(defun tst ()
  (let ((a 7)
        (b a))
    (print a) (print b)))

実行すると

uLisp 2.7 
1213> (defun tst ()   (let ((a 7)         (b a))     (print a) (print b)))
tst

1187> (tst)
Error: 'a' undefined

こういう場合は"let*"を使い、事前に定義済みの変数を参照できるようにします。

(defun tst (a)
  (let *((a 7)
        (b a))
    (print a) (print b)))
1186> (defun tst ()   (let* ((a 7)         (b a))     (print a) (print b)))
tst

1187> (tst)

7 
7 
7