ऐरे भाषा में सोचना
(github.com/razetime)K भाषा में सोचना
- K प्रोग्रामिंग ज़्यादातर REPL के ज़रिए की जाती है.
- ngn/k का rlwrap arrow keys से history ब्राउज़ करने देता है, इसलिए यह बड़े प्रोग्राम डेवलपमेंट के लिए उपयोगी है.
- फ़ंक्शनों को पहले REPL में टेस्ट किया जाता है, फिर उन्हें वास्तविक कोड में ले जाया जाता है.
- ngn/k का pretty output हमेशा वैध K data लौटाता है और प्रोग्राम की speed बढ़ाने के लिए इसे पहले से compute किया जा सकता है.
- K scripts वैसे ही चलती हैं जैसे REPL में input दिया गया हो, और हर लाइन का return value print होता है जब तक वह semicolon पर ख़त्म न हो.
- Scripts multi-line definitions की अनुमति देती हैं, जिससे readability बेहतर होती है.
- काम को script में सेव करके REPL में इस्तेमाल करने के लिए,
\lfile.kका उपयोग करके फ़ाइल चलाई जा सकती है और data load किया जा सकता है. - REPL में किसी फ़ाइल को कई बार load करके पहले के data को overwrite किया जा सकता है.
\से मिलने वाले REPL help में कई उपयोगी commands होते हैं.
ऐरे प्रोग्रामिंग का सरलीकरण
- ऐरे प्रोग्रामिंग जटिल patterns को छोटे, declarative और पढ़ने में आसान patterns में सरल बनाने की एक लगातार चलने वाली प्रक्रिया है.
- जटिल patterns को सरल बनाने के तरीक़ों पर "APL में patterns और anti-patterns: शुरुआती स्तर के ठहराव से बाहर निकलना - Aaron Hsu - Dyalog '17" में विस्तार से चर्चा की गई है.
मैट्रिक्स multiplication का K रूपांतरण
- Wikipedia लेख से लिया गया मैट्रिक्स multiplication का iterative algorithm सीधे K में बदला जा सकता है.
- K में बदले गए सबसे खराब code उदाहरण में बहुत सारे global variable assignments, nested loops और काफ़ी modifications की ज़रूरत होती है.
- Code को सरल बनाकर इन समस्याओं को एक-एक करके हल किया जा सकता है.
inner loop का सरलीकरण
- inner loop में
sumको fold(/) का उपयोग करके सरल बनाया जा सकता है. '(each) एक array लौटाता है, इसलिएCglobal variable को हटाया जा सकता है.i,j,kvariables को हटाकर loop को सरल किया जा सकता है.
loops हटाना और global variables को न्यूनतम करना
kके बिना सीधे rows और columns को match करके बीच वाला loop हटाया जा सकता है.jको हटाने के लिएBके हर column कोA[i]के साथ pair किया जा सकता है.iको हटाने के लिए eachleft का उपयोग करकेAकी हर row कोBके हर column के साथ pair किया जा सकता है.- अब global variables की ज़रूरत नहीं रहती.
मैट्रिक्स multiplication फ़ंक्शन का अंतिम रूप
+(transpose) महँगा होता है, इसलिए इसे हटाया जा सकता है.xकी हर row कोyके हर column से गुणा करने के बजाय,Bकी हर row को पूरेAके साथ मिलाकर वही काम implicit रूप से किया जा सकता है.- अंत में एक संक्षिप्त और स्पष्ट मैट्रिक्स multiplication फ़ंक्शन मिलता है.
- Code को सरल बनाने की प्रक्रिया शुरुआत में कई चरणों से गुज़रती है, लेकिन K में दक्षता बढ़ने पर यह अधिक आसान और intuitive हो सकती है.
- मैट्रिक्स multiplication एक सरल प्रक्रिया है जो K के array support के साथ अच्छी तरह मेल खाती है.
- K के साथ कम मेल खाने वाले और भी algorithms तथा उनसे निपटने के तरीक़े भविष्य के अध्यायों में देखे जाएँगे.
GN⁺ की राय
- यह लेख दिखाता है कि K भाषा का उपयोग करके मैट्रिक्स multiplication जैसे algorithms को कैसे सरल और optimize किया जा सकता है.
- REPL के ज़रिए तुरंत मिलने वाला feedback और code का iterative improvement, K programming की मुख्य विशेषताएँ हैं, और यह junior software engineers के लिए भी उपयोगी सीखने का तरीका है.
- Code simplification की प्रक्रिया programming क्षमता को बेहतर बनाने में महत्वपूर्ण है, और यह लेख उसे ठोस उदाहरणों के साथ आसानी से समझाता है.
1 टिप्पणियां
Hacker News राय
कई लोग array languages की उपयोगिता और उन्हें समझ पाने की क्षमता पर सवाल उठाते हैं.
array languages के कई चौंकाने वाले पहलू हैं, और ऊपर दी गई सूची उनमें से केवल कुछ ही हैं.
अगर आपने array programming के बारे में कभी नहीं सुना और एक परिचय चाहते हैं, तो "The Array Cast" की सिफारिश की जाती है.
70 के दशक में APL/APL2 खोजा और उससे मोहित हो गया, लेकिन functions को compose करने की क्षमता और भी अधिक आकर्षक लगी.
array languages का उपयोग करते समय सबसे महत्वपूर्ण समझ:
array languages के बारे में एक सवाल: "N से छोटे उन सभी numbers को कैसे खोजा जाए जिनके लिए condition P true है" जैसे काम कैसे किए जाते हैं?
J language के बारे में अनुभव: array languages का paradigm पक्षपाती है, और हर समस्या को arrays के nesting के रूप में सोचना मददगार है या नहीं, इस पर भरोसा नहीं है.
K language की problems हल करते समय मिला प्रभाव: K language जानबूझकर दुरूह है.
array language J का उदाहरण:
dot =: +/ . *का उपयोग करके P और Q का dot product निकाला जाता है.K language का syntax अधिक छोटा है, लेकिन K language कैसे काम करती है, इसके बारे में बहुत-सा अंतर्निहित संदर्भ दिमाग़ में बनाए रखना पड़ता है.