आपने एक स्थानीय पुस्तकालय में नौकरी कर ली है, जहाँ आप पुरानी किताबों के संग्रह को व्यवस्थित करने में मदद करते हैं। छात्र पाठक अक्सर अपने टर्म पेपर में उद्धृत करने के लिए आधे-अधूरे याद रह गए उद्धरण ढूँढते रहते हैं। हर किताब को शुरू से अंत तक खुद पढ़ने के बजाय, आप एक छोटा टूल बनाने का फैसला करते हैं, जो उन किताबों को स्कैन करके इन अधूरे उद्धरणों को खोज निकाले।
फाइलों में ऐसी लाइनें खोजिए जो सर्च स्ट्रिंग से मेल खाती हों, और मेल खाने वाली सभी लाइनें लौटाइए।
Unix का grep कमांड फाइलों में ऐसी लाइनें खोजता है जो किसी रेगुलर एक्सप्रेशन से मेल खाती हों। आपको एक सरल grep कमांड बनाना है, जो तय स्ट्रिंग खोज सके।
grep कमांड तीन आर्गुमेंट लेता है:
इसके बाद यह दी गई फाइलों को उसी क्रम में पढ़ता है जिस क्रम में उनके नाम दिए गए हैं। फिर उन लाइनों को ढूँढ़ता है जिनमें सर्च स्ट्रिंग मौजूद हो, और अंत में उन लाइनों को उसी क्रम में लौटाता है जिस क्रम में वे मिली थीं। जब एक से अधिक फाइलों में खोजा जाता है, तो हर मेल खाने वाली लाइन के आगे उस फाइल का नाम और एक कोलन (':') लगा दिया जाता है।
grep कमांड निम्नलिखित फ्लैग का समर्थन करता है:
-n आउटपुट की हर लाइन के आगे उसकी संख्या और एक कोलन (':') जोड़िए, और संख्या को फाइल के नाम के बाद रखिए (अगर नाम मौजूद हो)।-l केवल उन फाइलों के नाम प्रदर्शित कीजिए जिनमें कम से कम एक मेल खाने वाली लाइन हो।-i छोटे-बड़े अक्षरों में अंतर किए बिना मिलान कीजिए।-v प्रोग्राम का व्यवहार उलट दीजिए, यानी उन सभी लाइनों को इकट्ठा कीजिए जो मेल नहीं खातीं।-x केवल उन्हीं लाइनों को खोजिए जिनमें सर्च स्ट्रिंग पूरी लाइन से मेल खाती हो।दूसरे अभ्यासों के विपरीत, grep में "बाहरी दुनिया" से बातचीत करनी पड़ती है: फाइलें पढ़ना, सिस्टम एरर संभालना और stdout पर छापना।
Lean में सिस्टम से बातचीत आम तौर पर IO मोनैड में की जाती है। यह मोनैड साइड इफेक्ट को एक सीमित वातावरण में होने देता है, जिससे बाकी अधिकांश फंक्शनों की प्योर स्थिति पर कोई असर नहीं पड़ता।
Lean में किसी फाइल को स्क्रिप्ट की तरह चलाया जा सकता है, या तो सीधे lean --run से एक स्वतंत्र स्क्रिप्ट के रूप में, या lake के इस्तेमाल से।
हर Lean प्रोजेक्ट में प्रवेश का एक ही बिंदु होता है: main नाम का फंक्शन, जो उसे पास किए गए सभी आर्गुमेंट एक List String के रूप में लेता है।
Grep.lean को एक्ज़ीक्यूटेबल की तरह चलाने का अनुकरण करने के लिए इस अभ्यास में भी आर्गुमेंट उसी तरह पास किए जाते हैं।
Lean में IO.FS मोनैड की फाइलों पर काम करने के लिए फंक्शन मौजूद हैं। उदाहरण के लिए, किसी दिए गए पाथ पर मौजूद फाइल की सामग्री को एक String के रूप में पढ़ने के लिए IO.FS.readFile का इस्तेमाल किया जा सकता है।
इस अभ्यास में वैल्यू लौटाने के बजाय नतीजे मानक आउटपुट या मानक एरर पर लिखने होते हैं। इसके लिए Lean में फंक्शन मौजूद हैं।
Except में मिलने वाली एरर से अलग, IO के एक्सेप्शन वास्तव में रनटाइम एक्सेप्शन होते हैं। इन्हें संभालने के लिए आप try/catch का इस्तेमाल कर सकते हैं:
try
/-
code that may possibly raise an exception
-/
catch msg =>
/-
code that is executed only if an exception was thrown
-/
Exercism पर साइन अप कीजिए और Lean को 100 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।