महत्वपूर्ण बातों में से एक है, हालांकि नोट करने के लिए मूल्यांकन मॉडल है। or
शॉर्ट सर्किट, इसलिए: (or true :some random expression that never gets evaluated:)
कभी अंतिम का मूल्यांकन नहीं करता है। or
पारंपरिक रूप से एक नियंत्रण संरचना के रूप में 'तार्किक या' के रूप में उपयोग किया जाता है।
(f x y z)
, x, y, और z के पारंपरिक मॉडल में मूल्यांकन किया जाता है, और एफ उन्हें लागू किया जाता है।
(apply f vec)
के उपयोग में वेक्टर की सामग्री मूल्यांकन नहीं है, वे इस प्रकार के रूप में लिया जाता है। यह प्रतीकों के वेक्टर के साथ सबसे स्पष्ट रूप से दिखाई देता है, वे इस संदर्भ में उनके बाइंडिंग में मूल्यांकन नहीं करते हैं। हालांकि, यह इस तथ्य से गुमराह है कि वेक्टर सृजन के लिए क्लोजर का मॉडल कुछ अलग-अलग है, तो अन्य लिस्प्स, [a b c d]
एक वेक्टर उत्पन्न करता है जिसमें प्रतीकों का मूल्यांकन a
, b
, c
, और d
है। अधिकांश लिस्पस की तुलना में, जिसमें #(a b c d)
प्रतीकों का मूल्यांकन नहीं करता है, और (vector 'a 'b 'c 'd)
(या वास्तव में (apply vector '(a b c d))
) का मूल्यांकन करने के समान है।
तो यदि विशेष वाक्य रचनात्मक रूपों को लागू करना संभव था, तो इसके परिणामस्वरूप एक अपारदर्शी अर्थशास्त्र होगा। or
सबसे पहले अपने पहले तर्क का मूल्यांकन करता है, यदि सही है, तो यह बंद हो जाता है और उसे वापस लौटाता है, अन्यथा यह दूसरे पर जाता है और आखिरी तक दोहराता है। आवेदन के मामले में, तर्क पहले से ही सभी मूल्यांकन किए गए हैं, क्या इसे फिर किसी दूसरी बार मूल्यांकन करना चाहिए? सबसे अधिक संभावना रास्ते में एक रनटाइम त्रुटि के परिणामस्वरूप?
कार्यान्वयन परिप्रेक्ष्य से, यह बहुत ही प्रदर्शनशील होगा यदि वाक्यविन्यास 'ऑब्जेक्ट' भी था और उसे अधिक जटिल मूल्यांकन मॉडल की आवश्यकता होगी। इसलिए वे रनटाइम पर हल नहीं होते हैं, बल्कि संकलन समय पर कंपाइलर प्राइमेटिव्स को फिर से लिखते हैं।
लेकिन, इसी कारण से, जब or
तार्किक एक नियंत्रण संरचना के रूप में के बजाय प्रयोग किया जाता है के लिए, मैं अपने आप को यह काम कार्यों or/f
, and/f
, if/f
, वगैरह उपलब्ध जो सच प्रक्रियाएं हैं और उनके सभी तर्क का मूल्यांकन करने लगता है और इस प्रकार लागू किया जा सकता है।
आह। धन्यवाद! क्या आप किसी भी विकल्प के बारे में सोच सकते हैं? – TriArc
'(# (या% 1% 2) को कम करें [सच झूठा ...])' –
मैंने सोचा था कि 'कुछ' 'comp (comp पहले फ़िल्टर) था जब तक चूसर ने मुझे और अधिक जटिल वास्तविकता दिखाई नहीं दी। कोशिश करें '(कुछ: एक [{: एक झूठी} {: एक nil} {: एक सत्य}])', फिर 'कुछ 'को' (comp पहले फ़िल्टर) 'से बदलें। –