जब तक आप @legoscia द्वारा सुझाए गए सामान्य लिस्प एक्सटेंशन का उपयोग करते हैं, तब तक आपको यह जांचने की आवश्यकता है कि क्या वैकल्पिक तर्क निर्दिष्ट किया गया था। ध्यान दें कि आपको वास्तव में letयहां उपयोग करने की आवश्यकता नहीं है। यह मेरे लिए अधिक मुहावरेदार लगता है:
(defun command (a &optional b)
(or b (setq b default))
(command-body a b))
जैसा कि टिप्पणियों में सुझाया गया है, का उपयोग unlessकरना बेहतर हो सकता है or:
(defun command (a &optional b)
(unless b (setq b default))
(command-body a b))
टिप्पणियों से भी: letमूल सवाल के रूप में अधिक शुद्ध कार्यात्मक शैली का उपयोग करना होगा , लेकिन आपको अलग-अलग चर नामों की आवश्यकता नहीं है:
(defun my-command (a &optional b)
(let ((b (or b default)))
(command-body a b)))
बेशक, अगर वैकल्पिक पैरामीटर केवल एक बार आप इसे करना चाहिए एक बार जरूरत है:
(defun my-command (a &optional b)
(command-body a (or b default)))
setq"प्योर" बूलियन फॉर्म में इस्तेमाल करना अच्छा स्टाइल हैor। मेरी रायwhenमें निश्चित रूप से यहां अधिक उपयुक्त है, लेकिन आम तौर परletस्थानीय बाइंडिंग को स्थापित करने या बदलने के लिए पसंद की अभिव्यक्ति है। IOW, मूल कोड मुझे बहुत अच्छा लगता है।