अल्गोल-आधारित भाषाओं का एक कारण ब्रेसिज़ को अपनी लाइन पर प्रोत्साहित करना है, ब्रेसिज़ को स्थानांतरित किए बिना परिसीमित ब्रेसिज़ के बीच और अधिक लाइनें जोड़ने के लिए प्रोत्साहित करना है। यही है, अगर एक के साथ शुरू होता है
if (pred)
{
printf("yes");
}
ब्रेसिज़ के भीतर एक और बयान जोड़ना आसान है :
if (pred)
{
printf("yes");
++yes_votes;
}
का मूल रूप था
if (pred)
{ printf("yes"); }
तब हमें दो ब्रेसिज़ को "स्थानांतरित" करना होगा , लेकिन मेरा उदाहरण बाद के साथ अधिक चिंतित है। यहां, ब्रेसिज़ परिसीमन कर रहे हैं जो कि बयानों का एक क्रम होने का इरादा है , ज्यादातर साइड इफेक्ट के लिए आह्वान किया गया है।
इसके विपरीत, लिस्प में बयानों का अभाव है; प्रत्येक रूप अभिव्यक्ति है , कुछ मूल्य की उपज - भले ही कुछ दुर्लभ मामलों में (कॉमन लिस्प की सोच), उस मूल्य को जानबूझकर एक खाली (values)
फॉर्म के माध्यम से "कोई मूल्य नहीं" चुना जाता है । नेस्टेड एक्सप्रेशन के विपरीत, अभिव्यक्तियों के अनुक्रम को ढूंढना कम आम है । "समापन सीमांकक तक चरणों का एक क्रम खोलने" की इच्छा अक्सर नहीं उठती है, क्योंकि जैसे-जैसे बयान दूर होते हैं और वापसी मूल्य अधिक सामान्य मुद्रा बन जाते हैं, अभिव्यक्ति की वापसी मूल्य को अनदेखा करना अधिक दुर्लभ है, और इसलिए अधिक अकेले साइड इफेक्ट के लिए भावों के अनुक्रम का मूल्यांकन करने के लिए दुर्लभ।
आम लिस्प में, progn
फॉर्म एक अपवाद है (जैसा कि उसके भाई बहन हैं):
(progn
(exp-ignored-return-1)
(exp-ignored-return-2)
(exp-taken-return))
यहाँ, progn
क्रम में तीन अभिव्यक्तियों का मूल्यांकन करता है, लेकिन पहले दो के रिटर्न मानों को छोड़ देता है। आप अपनी स्वयं की पंक्ति है कि पिछले समापन कोष्ठक लेखन कल्पना कर सकता है, लेकिन टिप्पणी फिर से उस के बाद से पिछले प्रपत्र यहाँ (नहीं होने का कॉमन लिस्प अर्थ में खास है विशेष , हालांकि), अलग उपचार के साथ, यह अधिक संभावना है कि एक नया जोड़ना होगा अनुक्रम के मध्य में अभिव्यक्तियाँ, बल्कि "अंत में एक दूसरे को जोड़ने" के बजाय, कॉलर्स के रूप में तब किसी भी नए दुष्प्रभाव से नहीं, बल्कि बदले मूल्य में एक संभावित बदलाव से प्रभावित होगी।
सकल सरलीकरण करते हुए, एक लिस्प कार्यक्रम के अधिकांश हिस्सों में कोष्ठक कार्य के लिए पारित किए गए तर्कों को सी- लाइक भाषाओं की तरह ही परिसीमन कर रहे हैं - न कि स्टेटमेंट ब्लॉक का परिसीमन। उन्हीं कारणों के लिए हम तर्क के आसपास सी में एक फ़ंक्शन कॉल को सीमित करने वाले कोष्ठकों को रखने के लिए करते हैं, इसलिए हम लिस्प में भी ऐसा ही करते हैं, उस करीबी समूह से विचलन करने के लिए कम प्रेरणा के साथ।
जहाँ वे खोलते हैं, उस इंडेंटेशन की तुलना में कोष्ठकों का समापन बहुत कम होता है। समय में, कोई भी कोष्ठकों की उपेक्षा करना सीखता है और आकार से लिखता और पढ़ता है - जैसा कि पायथन प्रोग्रामर करते हैं। हालाँकि, यह मत करो कि सादृश्य आपको यह सोचने के लिए प्रेरित करेगा कि कोष्ठक को पूरी तरह से हटा देना सार्थक होगा। नहीं, यह एक बहस के लिए सबसे अच्छा बचा है comp.lang.lisp
।