मैं बस हास्केल के साथ शुरू कर रहा हूं और सीज़र साइफर बनाने के लिए एक अच्छा exercise समाप्त कर चुका हूं।सूची समझ के बजाय उपयोग करने के लिए
पहले चरण में से एक ऐसा कार्य करना था जो एक पत्र लेगा और इसे एक संख्या में बदल देगा। मुझे पता है कि chr और ord पहले से ही ऐसा कर सकते हैं लेकिन अभ्यास का हिस्सा स्वयं लिखना था।
let2num c = head [ b | (a,b) <- zip ['a'..'z'] [0..25], a==c]
मैं, हास्केल वाक्य रचना और पहली बातें मैंने सीखा सूची comprehensions था से एक के लिए नया हूँ ताकि मेरे हथौड़ा बन गया है। हालांकि मैं बहुत उत्सुक हूं, इस समारोह को लिखने के लिए एक और (संभवतः बेहतर) तरीका क्या है?
यदि आप उत्सुक हैं तो शेष सिफर gist में है।
संपादित
मैं भी अन्य तरीकों से संख्या से पत्र को वापस अनुवाद करने के लिए इच्छुक हूँ।
num2let d = head [ a | (a,b) <- zip ['a'..'z'] [0..25], b==(d `mod` 26)]
मुझे आश्चर्य है कि 'अगर सिर [ख | (ए, बी) <- ज़िप ['ए' .. 'जेड'] [0..25], एक == सी] 'ओ (2 एन + 1) है। –
@Yasir: कड़ाई से यह ओ (1) बोल रहा है, क्योंकि केवल 26 निचले मामले पत्र हैं। लेकिन हाँ, यह बहुत कुशल नहीं है। मेरा जवाब देखें –
@Roman: लेकिन यह पहली बार ज़िपित सूची बनाता है, फिर संतोषजनक 'एक == c' तत्वों की एक और सूची बनाता है, फिर एक तत्व निकालता है: काफी काम का एक बहुत यह विचार करने के लिए हे (1), हुह। :-) हालांकि हो सकता है कि मैं गलत हूं। –