क्या सभी कोड को मानचित्र / फ़िल्टर / संचालन को कम करने की एक श्रृंखला के रूप में दर्शाया जा सकता है?


16

मैं हाल ही में कोड के बड़े हिस्से को हटा रहा हूं और उन्हें लिनक प्रश्नों के साथ बदल रहा हूं।

भाषा के पूर्वाग्रह को दूर करना - Linq अनिवार्य रूप से मानचित्र / फ़िल्टर और संचालन को कम करने का एक सेट है जो डेटा के अनुक्रम पर काम करता है।

यह मुझे सोच में पड़ गया, मैं सैद्धांतिक रूप से इसे कैसे ले पाऊंगा। क्या मैं पूरे कोड आधार को एक श्रृंखला (या यहां तक ​​कि एकल) के मानचित्र / फ़िल्टर और संचालन को फिर से लिखने में सक्षम होगा।

दुर्भाग्य से मुझे उपयोगी सामान करने के लिए भुगतान किया जाता है, इसलिए मैं बहुत आगे प्रयोग करने में सक्षम नहीं हुआ, लेकिन मैं किसी भी कोड संरचना के बारे में नहीं सोच सकता हूं जो इस तरह से संरचित नहीं किया जा सकता है। साइड इफेक्टेड कोड को मोनाड्स के माध्यम से निपटाया जा सकता है .. यहां तक ​​कि आउटपुट अनिवार्य रूप से मेमोरी एड्रेस को स्क्रीन एड्रेस पर मैप कर रहा है।

क्या ऐसा कुछ भी है जो (सैद्धांतिक रूप से) लिनक क्वेरी के रूप में दोबारा नहीं लिखा जा सकता है?


पेड़ों के लिए यहां देखें: stackoverflow.com/questions/250377/…
blueberryfields

मैंने हमेशा सोचा था कि ट्यूरिंग पूरा होने की गारंटी देने के लिए "कम" करना पर्याप्त है (मानचित्र और फ़िल्टर को संचालन को कम करने के रूप में लागू किया जा सकता है, नहीं?) - कम से कम, कार्यात्मक भाषा को कम करने के बराबर। मैं Linq के बारे में पर्याप्त नहीं जानता कि यह सुनिश्चित करना है कि कार्यात्मक एक के बाद कार्यान्वयन को कितनी बारीकी से देखता है।
ब्लूबेरीफिल्ड्स

1
मुझे नहीं पता, लेकिन अंगूठे का एक मोटा नियम यह है कि कोई भी व्यक्ति अपने सभी कोड को लिखने पर विचार करेगा, वह ट्यूरिंग पूरा हो जाएगा। लेकिन उस के कोरोलरी यह है कि ट्यूरिंग पूरा होना बहुत रोमांचक नहीं है।
Psr

1
मैं psr से सहमत हूं; मुझे लगता है कि इस प्रश्न का एक वैध उत्तर ट्यूरिंग पूर्णता को संबोधित करने की आवश्यकता है। एक सबूत केवल इन कार्यों का उपयोग करके ट्यूरिंग मशीन को लागू करने का प्रयास कर सकता है।
रॉ

आइडल सोचा: भले ही हम बकवास की अनुमति देते हैं my_list.map(_ignored => a copy of my_list), ऐसा लगता है कि इस तरह के कार्यक्रम का स्थान उपयोग कुछ बहुपद (कार्यक्रम की लंबाई के आधार पर) से घिरा है। तब ऐसी भाषा निश्चित रूप से उन समस्याओं की गणना नहीं कर सकती है जो PSPACE में नहीं हैं। हालाँकि, PSPACE में कई समस्याओं को असाध्य माना जाता है, बड़ी कक्षाओं के लिए कुछ भी नहीं कहना, यह बहुत गंभीर प्रतिबंध नहीं हो सकता है।

जवाबों:


1

इसे फ़ंक्शनल प्रोग्रामिंग कहा जाता है, और कई लोगों द्वारा इसे एक मूलभूत अवधारणा माना जाता है। सॉफ्टवेयर पर जोएल पर यहाँ एक अच्छा परिचय है । अधिक तकनीकी उत्तर नहीं है, वर्तमान में आपके कंप्यूटर प्रश्न पूछने का कोई ज्ञात तरीका नहीं है (अच्छी तरह से परिभाषित तरीके से) जिसका उत्तर SKI पथरी के माध्यम से नहीं दिया जा सकता है।


1
नहीं है अब तक के कार्यों से कार्यात्मक प्रोग्रामिंग के लिए और अधिक map, filterऔर reduce(यदि हम ट्यूरिंग पूर्णता पर ध्यान न दें और व्यावहारिक एफपी भाषाओं का उपयोग इस तीन बार चला जाता है)। वास्तव में, वे सिर्फ सामान्य होने के लिए होते हैं और इस तरह आम तौर पर उपयोगी होते हैं, लेकिन वास्तव में कार्यात्मक प्रोग्रामिंग के बहुत सरल अनुप्रयोग हैं। नंगे न्यूनतम लैंबडा कैलकुलस उन कार्यों को कई अन्य लोगों के बीच परिभाषित कर सकते हैं, न कि अन्य तरीके से।

"यहां जोएल ऑन सॉफ्टवेयर का एक अच्छा परिचय है" - जो फोर्टन को बेसिक के साथ भ्रमित करने का प्रबंधन करता है, इसलिए मैं इसमें अन्य तथ्यों पर ज्यादा भरोसा नहीं करूंगा।
quant_dev
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.