दूसरों को पहले से ही जवाब दे दिया है। मैं बस कुछ और स्पष्टीकरण जोड़ूंगा।
थोड़ा सरल, हास्केल खरोज नियम है:
- कुछ कीवर्ड बातें (
where
, let
, do
, case ... of
) के एक ब्लॉक शुरू करते हैं।
- ऐसे कीवर्ड के बाद पहला शब्द ढूंढें और इसके इंडेंटेशन को नोट करें। कॉलम नाम दें जो पिवट कॉलम होता है।
- ब्लॉक में एक नई प्रविष्टि को परिभाषित करने के लिए बिल्कुल पिवट पर एक रेखा शुरू करें।
- पिछली लाइनों में प्रविष्टि को जारी रखने के लिए पिवट के बाद एक रेखा शुरू करें।
- ब्लॉक को समाप्त करने के लिए पिवट से पहले एक रेखा शुरू करें।
इसलिए,
where
wordCount input = show (ls ++ " " ++ ws ++ " " ++ cs ++ "\n")
where
ls = lines input
ws = length words input
cs = length input
असल
where {
wordCount input = show (ls ++ " " ++ ws ++ " " ++ cs ++ "\n")
;
where { -- same column, new entry
ls = lines input
; -- same column, new entry
ws = length words input
; -- same column, new entry
cs = length input
}
}
जो एक अलग परिभाषा wordCount
से संबंधित नहीं के रूप में दूसरा where
व्यवहार करता है मतलब है। अगर हम इसे और अधिक इंडेंट करते हैं:
where {
wordCount input = show (ls ++ " " ++ ws ++ " " ++ cs ++ "\n")
where { -- after the pivot, same entry
ls = lines input
;
ws = length words input
;
cs = length input
}
}
असंबद्ध रूप से, 'इंटरैक्ट' वास्तव में कभी भी हास्केल में I/O करने का सही तरीका नहीं है। – dfeuer
@ डीफ्यूअर: सरल के लिए 'इंटरैक्ट' का उपयोग करने में कुछ भी गलत नहीं है "मैं केवल उस हास्केल फ़ंक्शन को खोल में रखना चाहता हूं" - प्रोग्राम के बजाए। बेशक 'स्ट्रिंग' हमेशा अक्षम है, लेकिन ऐसे कई अनुप्रयोगों के लिए जो पूरी तरह से कोई फर्क नहीं पड़ता। – leftaroundabout
@ डेफ्यूर मैं सहमत हूं, मैं इस अभ्यास को पुस्तक से मौजूदा बॉयलरप्लेट के साथ कर रहा हूं, मैं आपके पास हैकेल में थोड़े विशेषज्ञता स्तर तक नहीं पहुंच पाया है, लेकिन मैं अच्छी डिजाइन समझता हूं और ज्यादातर पुस्तक के बाद के चरणों में टिप्पणी के लिए "सही तरीका" धन्यवाद सीखें हालांकि – user1639848