キーワード引数を使って大域変数を束縛する - lisp-cookbook-ja/common-lisp GitHub Wiki
キーワード引数で受けとった値を大域変数に束縛することがあります
(defun print-bar (obj &key (base 10))
(let ((*print-base* base))
(print obj)))
(print-bar 33)
;->
; 33
;=> 33
(print-bar 33 :base 16)
;->
; 21
;=> 33
このような場合は、
(defun print-foo (obj &key ((:base *print-base*) 10))
(print obj))
(print-foo 33)
;->
; 33
;=> 33
(print-foo 33 :base 16)
;->
; 21
;=> 33
と書くことが可能です。
上記の場合、関数定義フォームのボディ全体が(let ((print-base base)...)で囲まれたと考えることもできるでしょう。(baseという変数は参照できませんが)