let関数
Lispでは、ローカル変数の定義にlet関数を使用する。
以下のように、ある関数の実行前に変数 x が定義されていたとする。
(setf x 10)
しかし、
- ある関数の中でも x という変数を使用したい
- もと(定義済み)の変数 x はそのまま保持したい
という場合などは、let関数を利用する。
> (defun sample-func (x y z) (+ x y z) ) SAMPLE-FUNC > (setf x 10) 10 > (let ((x 20) (y 15)) (sample-func x y 1)) 36 > x 10
例としては不適切かも。こんな設計にはしないだろうし。
入力値を検証し、条件を満たしていない場合にもう一度入力を求める、という関数で、
入力値を一時的に保持するためにletを使う、という場合などを考える。
>(defun check-number () (format t "Please type a number.") (let ((val (read))) (if (numberp val) val (check-number)))) CHECK-NUMBER >(check-number) Please type a number.f Please type a number.f Please type a number.9 9 >