আপনি @ গ্রেগাসিয়ার পরামর্শ অনুসারে কমন লিস্প এক্সটেনশনগুলি ব্যবহার না করে youচ্ছিক যুক্তি সুনির্দিষ্ট করা হয়েছে কিনা তা আপনার খতিয়ে দেখার দরকার। মনে রাখবেন যে এখানে আপনার সত্যিই ব্যবহারের দরকার 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)))
অবশ্যই, যদি onceচ্ছিক প্যারামিটারটি কেবল একবার প্রয়োজন হয় আপনার কেবল এটি করা উচিত:
(defun my-command (a &optional b)
(command-body a (or b default)))
setq"খাঁটি" বুলিয়ান ফর্মের মতো পার্শ্ব-প্রতিক্রিয়াযুক্ত এক্সপ্রেশনটি ব্যবহার করা ভাল স্টাইলor। আমার মতেwhenএখানে অবশ্যই আরও উপযুক্ত, তবে সাধারণতletস্থানীয় বাইন্ডিংগুলি স্থাপন বা পরিবর্তন করতে পছন্দমত প্রকাশ। IOW, মূল কোডটি আমার কাছে অনেক সুন্দর দেখাচ্ছে much