लिस्प -2 का मतलब है कि आपके पास दो नामस्थान हैं: एक कार्य के लिए, एक अन्य सामान के लिए।
इसका मतलब है कि आप एक मैक्रो में अनजाने में फ़ंक्शन मान (या var मान) को पुनर्निर्मित करने की संभावना कम हैं।
लिस्प -1 में, चूंकि एक नामस्थान है, तो आप मौजूदा परिभाषा को मारने की संभावना के अनुसार दो बार (सांख्यिकीय रूप से, लेकिन व्यावहारिक रूप से नहीं) हैं।
हकीकत में, लिस्प -1 में gensym
जैसी योजनाओं और syntax-structure
की योजना के भ्रमित रूप से विस्तृत सरणी है जो चीजों को स्वच्छ रखने वाले मैक्रोज़ की तरह है।
सबसे अच्छा मैं बता सकता हूं कि यह मुद्दा ज्यादातर भूसे-आदमी तर्क है: यह केवल गरीब या पुराने कार्यान्वयन में एक मुद्दा है।
Clojure के माध्यम से स्वच्छ मैक्रो प्रदान करता है gensym
या पाठक मैक्रो myvar#
(#
अनिवार्य रूप से gensym
है)।
और आप अपने मैक्रो में अपने कार्य rebinding स्थानीय क्षेत्र के बारे में चिंता करने की ज़रूरत नहीं है, या तो: यहां
user=> (defmacro rev [xs] `(reverse ~xs))
#'user/rev
user=> (rev [1 2 3])
(3 2 1)
user=> (let [reverse sort] (rev [1 2 5 3 6]))
(6 3 5 2 1)
और कुछ चर स्वच्छता है:: Clojure सब साफ है
user=> (defmacro k [] (let [x# "n"] x#))
#'user/k
user=> (k)
"n"
user=> (let [x "l"] (k))
"n"
user=> (let [x "l"] (str (k) x))
"nl"
सूचना हमारी सेक्सी gensym
'डी x#
।
क्योंकि आपको यहां तीन घंटे से कोई भी वास्तविक (वास्तविक) उत्तर नहीं मिल रहा है: आप इसे "लैम्ब्डा द अल्टीमेट" पर पूछने का प्रयास कर सकते हैं। आप शायद बाहर निकल सकते हैं क्योंकि सूची वास्तव में प्रोग्रामिंग भाषाओं पर शोध के बारे में है, लेकिन वहां लोग निश्चित रूप से आपके प्रश्न का उत्तर दे सकते हैं। http://lambda-the-ultimate.org/ – Eike