@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. letBurada 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, unlesskullanımı tercih edilebilir or:
(defun command (a &optional b)
(unless b (setq b default))
(command-body a b))
Yorumlardan ayrıca: letası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. Bencewhenburada kesinlikle daha uygun olmakla birlikte, genellikleletyerel bağları kurma veya değiştirme tercihinin bir ifadesidir. ŞİMDİ, orijinal kod bana çok daha hoş görünüyor.