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