हालांकि define
और set!
दोनों एक ही दायरे में एक मान को फिर से परिभाषित करेंगे, जब दायरा अलग होता है तो वे दो अलग-अलग चीजें करते हैं। यहाँ एक उदाहरण है:
(define x 3)
(define (foo)
(define x 4)
x)
(define (bar)
(set! x 4)
x)
(foo) ; returns 4
x ; still 3
(bar) ; returns 4
x ; is now 4
के रूप में आप किसी भी नाम हैं जो दायरे के भीतर परिभाषित ऐसे नाम हैं जो enclosing दायरे में दिखाई मुखौटा (जैसे जब हम define
एक समारोह के रूप में), देख सकते हैं जब हम एक नए शाब्दिक गुंजाइश पैदा करते हैं। इसका मतलब यह है कि जब हम define
डी x
foo
में, हमने वास्तव में x
के लिए एक नया मान बनाया जो पुराने मूल्य को छायांकित करता था। bar
में, foo
उस दायरे में मौजूद नहीं है, set!
x
के मान को खोजने और बदलने के लिए संलग्न क्षेत्र को देखता है।
इसके अलावा, जैसा कि अन्य लोगों ने कहा है, आपको केवल define
एक बार एक नाम में एक नाम माना जाता है। कुछ कार्यान्वयन आपको कई define
एस से दूर जाने देंगे, और कुछ नहीं करेंगे। इसके अलावा, आपको केवल set!
का उपयोग उस चर पर किया जाना चाहिए जो पहले से ही define
डी है। फिर, इस नियम को लागू करने के लिए कितनी सख्ती से लागू किया गया है।
स्रोत
2009-02-08 20:50:13
आप योजना में लूप काउंटर कैसे डिजाइन करेंगे? –