@Legoscia tarafından önerilen Common Lisp uzantılarını kullanmadığınız sürece, isteğe bağlı bağımsız değişkenin belirtilip belirtilmediğini kontrol etmeniz gerekir. let
Burada gerçekten kullanmanız gerekmediğini unutmayın . Bu bana daha aptalca geliyor:
(defun command (a &optional b)
(or b (setq b default))
(command-body a b))
Yorumlarda önerildiği gibi, unless
kullanımı tercih edilebilir or
:
(defun command (a &optional b)
(unless b (setq b default))
(command-body a b))
Yorumlardan ayrıca: let
asıl soruda olduğu gibi daha saf fonksiyonel stil kullanmak olacaktır , ancak ayrı değişken isimlerine ihtiyaç duymazsınız:
(defun my-command (a &optional b)
(let ((b (or b default)))
(command-body a b)))
Tabii ki, isteğe bağlı parametre sadece bir kez gerekliyse, sadece şunu yapmanız gerekir:
(defun my-command (a &optional b)
(command-body a (or b default)))
setq
"saf" bir boolean biçimde olduğu gibi yan etkileyici bir ifade kullanmanın iyi bir tarz olduğunu sanmıyorumor
. Bencewhen
burada kesinlikle daha uygun olmakla birlikte, genelliklelet
yerel bağları kurma veya değiştirme tercihinin bir ifadesidir. ŞİMDİ, orijinal kod bana çok daha hoş görünüyor.