इसका मतलब है कि आप नए चर के बजाय बनाना चाहिए मान बदलने: एक ही समारोह do
मैक्रो (जो, वैसे, भी rebinding, संशोधित नहीं, कम से कम इस योजना में उपयोग करता है) का उपयोग करते हुए लिखा जा सकता है पुराने लोगों का एक एक नया बाध्यकारी बनाना चाहिए
(defun foo (x)
(when (minusp x)
(setq x (- x)))
do something with x)
इसके बजाय, और प्रयोग के बजाय कि एक: उदाहरण के लिए, निम्न कोड डालें
(defun foo (x)
(let ((xabs (if (minusp x)
(- x)
x)))
do something with xabs)
इस का कारण यह है कि आप हमेशा पता चल जाएगा है क्या एक चर इसमें शामिल है, क्योंकि यह कभी नहीं बदलेगा। यदि आप नया मान चाहते हैं, तो उस वैरिएबल का उपयोग करें जो उस नए मान को रखता है।
अब आप पूछ सकते हैं कि यह इतना महत्वपूर्ण क्यों है? खैर, कुछ लोगों के लिए दूसरों के मुकाबले इसकी मजबूत प्राथमिकता है। खासकर जो लोग लिस्प के कार्यात्मक पहलू पर जोर देना पसंद करते हैं, वे इस शैली की वकालत करेंगे। हालांकि, वरीयता के बावजूद, यह हमेशा इस तथ्य पर भरोसा करने में सक्षम होना बहुत उपयोगी हो सकता है कि चर बदलता नहीं है। एक उदाहरण है जहाँ इस महत्वपूर्ण हो सकता है:
(defun foo (x)
(let ((function #'(lambda() (format t "the value of x is ~a~%" x))))
(when (minusp x)
(setq x (- x)))
(other-function x)
function))
फिर, FOO
की वापसी मान एक समारोह जब x
का मूल्य प्रिंट के साथ कहा जाता है। लेकिन, मूल्य x
के बाद समारोह में, पूर्ण मूल्य होगा। यह कार्य बहुत बड़ा हो सकता है अगर फ़ंक्शन बड़ा और जटिल हो।
स्रोत
2013-06-18 11:18:44
रीबंडिंग, सबसे अधिक संभावना है, जैसा कि पिछले नाम को नए नाम के साथ मास्किंग करना है, उदाहरण के लिए, '(चलो ((ए 1)) (चलो ((ए 2)) ...)) –
यह एक गूंगा दिशानिर्देश है । एक सिर जाओ और आप चाहते हैं कि स्थानीय चर को संशोधित करें। ध्यान दें कि 'लूप' स्थानीय चर को संशोधित करता है। '(10 से नीचे के लिए लूप ...) ',' i' का पुनर्वितरण नहीं होता है; 'i' का एक उदाहरण चरणबद्ध है, इसलिए" स्थानीय चर को संशोधित करने से बचें "" लूप' से बचें "के बराबर है। और इस प्रकार, "reductio विज्ञापन धर्म" अनुमान के नियम से, हम इस दिशानिर्देश को गलत साबित करते हैं। – Kaz
जैसा कि आप शायद जानते हैं, सामान्य लिस्प मानक यह निर्दिष्ट नहीं करता है कि 'LOOP' एक नया चर बांधता है या मौजूदा को बदलता है या नहीं। और मैं इसे एक सख्त नियम के बजाय एक सामान्य दिशानिर्देश के रूप में समझता हूं जिसे तोड़ा नहीं जाना चाहिए। –