Sunday 15 September 2013

lisp - Why (apply and '(1 2 3)) doesn't work while (and 1 2 3) works in R5RS? -


इस सवाल का पहले से ही एक उत्तर है: < / P>

  • 9 जवाब

    मैंने इसे रैकेट में करने की कोशिश की यह

      & gt; (लागू करें और '(1 2 3))। और: में बुरा वाक्यविन्यास: और & gt; (और 1 2 3) 3   

    क्या किसी को इसके बारे में कोई विचार है?

    क्रिस जेस्टर-यंग का सही है, लेकिन एक अन्य बिंदु मुझे हाइलाइट करना है। मानक और ऑपरेटर एक मैक्रो है जो अपने तर्कों के मूल्यांकन को देरी करता है, (मूलतः अगर नहीं) (और एबीसी) को में बदलकर (यदि कोई ( अगर बीसी # एफ) # एफ) । इसका अर्थ है कि यदि a गलत है, b और c का मूल्यांकन नहीं किया जाता है।

    हमारे पास भी विकल्प है एक , b , और को और फ़ंक्शन का मूल्यांकन करता है और को परिभाषित करता है। C , और जब सत्य सभी सत्य हैं, तो सत्य वापस आ जाता है इसका अर्थ है कि एक , b , और c के सभी मूल्यांकन किए जाते हैं। और-फ़ंक्शन की अच्छी संपत्ति है जिसे आप इसे फ़ंक्शन के रूप में पास कर सकते हैं क्योंकि यह फ़ंक्शन है

    अभी भी एक विकल्प है जो गायब है: एक और-function-delaying-evaluation देता है और अगर केवल तभी a , बी , और c सभी सत्य सत्य हैं, लेकिन ये मूल्यांकन नहीं करता है, उदाहरण के लिए, b और c अगर एक झूठी पैदा करता है यह वास्तव में फ़ंक्शन और-funcalling-function के साथ किया जा सकता है, इसके लिए उसके तर्कों को कार्य की एक सूची के रूप में रखना आवश्यक है उदाहरण के लिए:

      (परिभाषित करें (और फ़ंक्शन-फ़ंक्शन फ़ंक्शन) (या (रिक्त फ़ंक्शन) (और ((कार फ़ंक्शंस)) (और -फंक्लालिंग-फ़ंक्शन (सीडीआर फंक्शन)))) (और -फेंकलिंग-फ़ंक्शन (सूची (लैम्ब्डा () (यहां तक ​​कि? 2)) (लैम्ब्डा () (अजीब? 3)))); = & Gt; #t (और-मज़ाकेलिंग-फ़ंक्शन (सूची (लैम्ब्डा () (अजीब? 2)) (लैम्ब्डा () (यहां तक ​​कि? 3)))); (यहां तक ​​कि? 3) का मूल्यांकन नहीं किया जाता है; = & Gt; मैक्रो और इस मुहावरे का प्रयोग करके, हम वास्तव में मानक  और  शब्दों के साथ कुछ भी कार्यान्वित कर सकते हैं:  
      (परिभाषित-वाक्यविन्यास मानक-और (वाक्यविन्यास-नियमों () ((मानक-और रूप ...) (और -फैरकलिंग-फ़ंक्शन (सूची (लैम्ब्डा () फ़ॉर्म) ...)) ))) (मैक्रोएक्सपैण्ड '(मानक-और (अजीब? 2) (यहां तक ​​कि? 3))); = & Gt; ; (और-मज़ाकेलिंग-फ़ंक्शन; (सूची (लैम्ब्डा () (अजीब? 2)); (लैम्ब्डा () (यहां तक ​​कि? 3))))   

    इस से दूर करने के लिए सबक , बेशक, यह है कि आपके पास एक और समान फ़ंक्शन है जो आप पास हो सकते हैं और अभी भी देरी से मूल्यांकन कर सकते हैं; आपको फ़ंक्शन में चीजों को लपेटकर और और -like फ़ंक्शन कॉल उन फ़ंक्शन को मूल्यों का उत्पादन करने के लिए मूल्यांकन को देरी करना होगा। (योजना में, यह वादे का उपयोग करने का अवसर हो सकता है।)

No comments:

Post a Comment