हास्केल में मुझे छोटे उपकरण लिखने का कुछ अनुभव है और मुझे यह उपयोग करने में बहुत सहज लगता है, विशेष रूप से फ़िल्टर (उपयोग interact) लिखने के लिए जो उनके मानक इनपुट को संसाधित करते हैं और इसे मानक आउटपुट में पाइप करते हैं।
हाल ही में मैंने एक फ़ाइल पर एक ऐसे फ़िल्टर का उपयोग करने की कोशिश की जो सामान्य से लगभग 10 गुना बड़ा था और मुझे एक Stack space overflowत्रुटि मिली ।
कुछ पढ़ने के बाद (जैसे यहाँ और यहाँ ) मैंने स्टैक स्पेस (अनुभवी हास्केलर्स को बचाने के लिए दो दिशानिर्देशों की पहचान की है, कृपया मुझे सही करें अगर मैं कुछ लिखूं जो सही नहीं है):
- पुनरावर्ती फ़ंक्शन कॉल से बचें जो पूंछ-पुनरावर्ती नहीं हैं (यह सभी कार्यात्मक भाषाओं के लिए मान्य है जो पूंछ-कॉल अनुकूलन का समर्थन करते हैं)।
seqउप-अभिव्यक्तियों के प्रारंभिक मूल्यांकन को मजबूर करने के लिए परिचय दें ताकि वे कम होने से पहले अभिव्यक्ति बहुत बड़े न हों (यह हास्केल के लिए विशिष्ट है, या कम से कम भाषाओं में आलसी मूल्यांकन का उपयोग करके)।
seqमेरे कोड में पांच या छह कॉल शुरू करने के बाद मेरा टूल फिर से आसानी से चलता है (बड़े डेटा पर भी)। हालाँकि, मुझे लगता है कि मूल कोड थोड़ा अधिक पठनीय था।
चूंकि मैं एक अनुभवी हास्केल प्रोग्रामर नहीं हूं, इसलिए मैं पूछना चाहता था कि क्या seqइस तरह से पेश करना एक सामान्य अभ्यास है, और कितनी बार सामान्य रूप seqसे हास्केल उत्पादन कोड में देखा जाएगा । या क्या कोई तकनीक है जो seqबहुत बार उपयोग करने से बचने की अनुमति देती है और अभी भी थोड़ा स्टैक स्पेस का उपयोग करती है?