जब आपके if
, 'वन-आर्म्ड' है के रूप में वे इसे कहते हैं (अर्थात, यह कोई else
शाखा शामिल हैं), यह आमतौर पर आसान और अधिक when
और unless
उपयोग करने के लिए मुहावरेदार है आप (when pred x y ... z)
पर कॉल करते हैं, तो pred
सत्य होने पर यह क्रमशः x y z
का मूल्यांकन करेगा। unless
इसी प्रकार व्यवहार करता है जब pred
शून्य है। x y z
एक ऊपर से किसी भी बयान का प्रतिनिधित्व कर सकते हैं। इस प्रकार:
(when pred (thunk))
सिर्फ एक ही रूप में
(if pred (thunk))
कुछ लोगों का कहना when
और unless
हमेशा के लिए स्पष्टता की वजह से 'एक-आर्म्ड-आईएफएस' का उपयोग किया जाना चाहिए।
संपादित करें: आपके धागे ने मुझे एक विचार दिया। इस मैक्रो:
(defmacro if/seq (cond then else)
`(if ,cond (progn ,@then) (progn ,@else)))
इसे सक्षम करना चाहिए:
(if/seq (find input num) //if this
((setq num NEWNUM) (FUNCT2)) //then execute both of these
((list 'not found)))))
तो सामान्य प्रारूप है:
(if/seq *condition* (x y ... z) (a b ... c))
हालत के आधार पर यह पहली या दूसरी में subforms के सभी का मूल्यांकन करता है , लेकिन केवल अंतिम लौटाता है।
थोड़ा ऑफटॉप: ऐसा लगता है कि 'num' चर एक विशेष/गतिशील (यानी, वैश्विक) चर है। शायद आपको एक की आवश्यकता नहीं है। –
कौन सा लिस्प बोलीभाषा इस कोड में लिखा गया है? –