Land Of Lisp 第2章 (その2)
ローカル定義に関してのメモ
let:ローカル変数を定義
例.(let ((a 5) (b 6)) (setf a 4) (+ a b)) 10
(a 5)、(b 6)が変数とその初期値、さらにこの宣言部を()で括る
(setf a 4)、(+ a b)が変数を使った処理
flet:ローカル関数の定義
例.(flet ((f (n) (+ n 10))) (f 5)) 15
fが関数名、nが引数、(+ n 10)が関数本体
ローカル変数と同様、これらの宣言部を()で括る
次の(f 5)が宣言した関数を使った処理
ここまでの内容でどのように使うのか、自分で考えてみました。
(defun gfunc (x) (let ((a 5)) (flet ((lfunc (n) (+ n a 10))) (lfunc x)))) gfunc (gfunc 10) 25こんな使い方が正しいのか、これから本を読み進めるうちにわかると思います。
(違っていることがわかったら急いで修正予定)
ローカル関数定義をもう一つ
labels:ローカル関数の定義
ローカル関数内のスコープで定義したローカル関数を使用できる例.
(labels ((a (n) (+ n 5)) (b (n) (+ (a n) 6))) (b 10)) 21
この例ではローカル関数aがローカル関数b内で使用されています。
後々、再帰のコードで使われることでしょう。