たとえば
(defun wrk (x y) (* x y))
という関数があって「y」をoptionalにして(wrk 123)のときは(* x x)を返却するように変更しようとしたとする。
(defun wrk (x &optional y) (let ((w (if y y x))) (* x w)))
としたところでふと気づいた。
(defun wrk (x &optional (y x)) (* x y))
これでいいんじゃね?
CL-USER> (wrk 2) 4 CL-USER>
なんともあっさり。
んー?
としたらこうもできるのか。
(defun wrk (x &optional (x1 (nth 0 x))(x2 (nth 1 x))(x3 (nth 2 x))) (+ x1 x2 x3)) CL-USER> (wrk '(1 2 3)) 6 CL-USER> (wrk '(4 5 6)) 15 CL-USER>
……わけがわからん。