मैं निम्नलिखित अनुक्रम को बदलना चाहूंगा:
(def boollist [true false false गलत सच्ची गलत]] निम्नलिखित में:
[सच] [गलत झूठे सच] [गलत]] मेरा कोड एक स्टैक ओवरफ्लो की ओर जाता है:
(defn sep [boollst] (पाश [lst boollst अलग [[]] [बाएं दाएं] (2 लीस्ट ले)] (अगर (शून्य शेष) अलग () (फिर से (अगले लिस्ट)) (फिर से (अगले लिस्ट)))) () () () () () / Code> क्या इस को बदलने का एक शानदार तरीका है?
एक छोटा , "चतुर" समाधान होगा:
(defn sep [lst] (चलो [x (विभाजन द्वारा पहचान lst)] (अंतिम फ़िल्टर (मैप concat (cons [] x) x) ))) "स्टैक अतिप्रवाह" मुद्दा क्लोज़र के पुनरावर्तन के संबंध में है और यदि आसानी से संपर्क किया जाता है तो आसानी से बचा जा सकता है। आपको हमेशा इन प्रकार के फ़ंक्शंस को आलसी तरीके से कार्यान्वित करना चाहिए: अगर आपको पुस्तकालय कार्यों का उपयोग करते हुए समस्या को सुलझाने की कोई चाल नहीं मिल रही है, जैसा कि मैंने ऊपर किया था, आपको सामान्य समाधान के लिए "आलसी- seq" का प्रयोग करना चाहिए (जैसे कि पीएमजोर्डन किया था) जैसा कि यहां समझाया गया है:
* कार्य सूची जो एक सूची खाती है और परिणाम के रूप में एक सूची वापस करती है (यदि सूची के अलावा कोई अन्य वस्तु वापस आ जाती है, तो idiomatic समाधान "रिकूर" और एक संचायक का उपयोग करना है, जैसा कि डीफ़ान के उदाहरण के अनुसार दिखाया गया है, जिसे मैं इस मामले में मुहावरों को नहीं मानता।)
Comments
Post a Comment