क्या कार्यात्मक प्रोग्रामिंग गणित से दृढ़ता से संबंधित है?


21

क्या कार्यात्मक प्रोग्रामिंग गणित से संबंधित है क्योंकि बहुत अधिक कार्यात्मक प्रोग्रामिंग को गणितीय धारणाओं से दर्शाया गया है? प्रोग्रामर के लिए अनिवार्य प्रोग्रामिंग के साथ कार्यात्मक प्रोग्रामिंग सीखने और समझने के लिए गणित का एक मजबूत आधार होना आवश्यक है?


1
क्या यह प्रश्न गणितज्ञ के साथ सही रूप से टैग किया गया है या इसे गणित होना चाहिए?

यहाँ और यहाँ दो समान प्रश्न हैं। मुझे नहीं लगता कि आपके पास गणित में एक 'मजबूत आधार' होना चाहिए लेकिन आपको कुछ दृष्टिकोण से इसके सिद्धांतों की काफी अच्छी समझ होनी चाहिए। मैमोरी मैपिंग से ज्योमेट्री मुझे सबसे अधिक मदद करती है, लेकिन मैं शायद ही कभी संख्या के बारे में सोचता हूं। गणित है (हो सकता है) हालांकि बहुत उपयोगी है।
गेरेट क्लैबोर्न

जवाबों:


28

सभी प्रोग्रामिंग गणित से संबंधित है। वास्तव में कई विश्वविद्यालय अभी भी अपने कंप्यूटर विज्ञान कार्यक्रमों को गणित विभाग के दायरे में रखते हैं।

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

सामान्य रूप से (जिनमें से कार्यात्मक एक सबसेट है) घोषणात्मक प्रोग्रामिंग भाषाओं को लेने में मुझे जो वास्तविक कठिनाई मिली है, वह यह है कि नियंत्रण में रहने का आग्रह कर रहा हूं; कंप्यूटर को क्या करना है। किसी को भी अभ्यस्त होने में कुछ समय लगता है।


अच्छे शब्द, +1।
मुदस्सिर

4
जब आप एसक्यूएल अच्छी तरह से घोषित प्रोग्रामिंग सीखते हैं तो यह इतना कठिन नहीं होता है।

7

हाँ। अनिवार्य रूप से, एक कार्यात्मक कार्यक्रम इस तरह के कथनों का एक समूह है:

// 1_ और 2_ "डमी तर्क" f (1_) हैं: = पाप (1_) g (1_, 2_): = 1_ + 2_ आदि ...

x = f ()

y = g (x)

z = h (x, h2 (y))

आदि...

आप लिख रहे हैं कि नए मानों को परिभाषित करने वाले समीकरणों के रूप में कार्यक्रम क्या करना है (नोट: चर नहीं) पहले परिभाषित मूल्यों के कार्यों के रूप में। आप कार्यों को संबंधों के रूप में भी परिभाषित करते हैं। यह वास्तव में गणितीय प्रमेयों को लिखे जाने के तरीके के समान है।


मैं गणितीय कार्यों को हैस्केल और अन्य के अजीब सिंटैक्स से बेहतर समझ सकता हूं। क्या आपके पास कोई लिंक है जो किसी भी कार्यात्मक भाषा के वाक्यविन्यास के गणित के चरणों से संबंधित है।
रेनडॉक्टर

यह उत्तर सटीक है। एक बार जब आप गणितीय कार्य लिख रहे हों और चरण-दर-चरण प्रक्रियाएँ नहीं महसूस कर रहे हों, तो एफपी सही अर्थों को बनाना शुरू कर देगा। अधिकांश लोग पहले प्रक्रियात्मक प्रोग्रामिंग सीखते हैं और वह सामान बड़े पैमाने पर होता है। मुझे लगता है कि प्रक्रियात्मक भाषाओं में "कार्यों" को "प्रक्रियाएं" कहा जाना चाहिए।
काकाजी

2

आईएमओ गणितज्ञ, एक भाषा के उदाहरण के रूप में जिसमें आप कार्यात्मक प्रोग्रामिंग का उपयोग कर सकते हैं, गणित में एक मजबूत पृष्ठभूमि की आवश्यकता नहीं है। वास्तव में, मुझे नहीं लगता कि मैंने अपनी बुनियादी गणित शिक्षा के दौरान कार्यात्मक प्रोग्रामिंग जैसी किसी चीज़ का सामना किया। मैंने सी-स्टाइल करते हुए मैथेमेटिका प्रोग्रामिंग शुरू की, और केवल वर्षों बाद कार्यात्मक प्रोग्रामिंग की खोज की। मुझे नहीं लगता कि बुनियादी कार्यात्मक प्रोग्रामिंग निर्माणों पसंद है Map, Apply, NestList, आदि सब पर किसी भी गणित पृष्ठभूमि की आवश्यकता है।


1

ज़रुरी नहीं। कार्यात्मक प्रोग्रामिंग सिर्फ एक कार्यप्रणाली है, लेकिन लैम्बडा कैलकुलस और इस तरह के सामान में इसका आधार था।

क्लोजर प्रक्रियात्मक भाषाओं में कार्यात्मक प्रोग्रामिंग अवधारणाओं को पेश करने का एक (छोटा) प्रयास है। इसके बजाय for(int i =0 ; i < num; i++) doStuff(arr[i]);, आप इसके बजाय मान सकते हैं कि सरणी के तत्व स्वाभाविक रूप से "उनके लिए किया गया सामान" हो सकते हैंarr.each do |el| doStuff(el) end


10
आप केवल एक अनाम फ़ंक्शन को मिसाल दे रहे हैं, न कि बंद करने के लिए। विकीडिया:The term closure is often mistakenly used to mean anonymous function. This is probably because most languages implementing anonymous functions allow them to form closures and programmers are usually introduced to both concepts at the same time. These are, however, distinct concepts. A closure retains a reference to the environment at the time it was created (for example, to the current value of a local variable in the enclosing scope) while a generic anonymous function need not do this.

1

संक्षिप्त उत्तर है: हाँ, क्योंकि औपचारिकता की एक निश्चित डिग्री (जैसे प्रोग्रामिंग भाषा) के साथ सब कुछ गणित से अलग-अलग डिग्री के लिए गणित से दृढ़ता से संबंधित है।

लेकिन, प्रोग्रामिंग भाषा का उपयोग करने के लिए गणित के साथ कड़ाई से परिचित होने की आवश्यकता नहीं होती है, उदाहरण के लिए भाषाओं की थेरोएटिकल नींव। आपको यह जानने की जरूरत नहीं है कि एक संदर्भ मुक्त भाषा क्या है और एक भाषा का उपयोग करने के लिए ऐसी भाषा के कौन से कानून और संपत्ति हैं। इसी तरह, आपको जर्मन या फ्रेंच बोलने के लिए जर्मन या रोमनिस्ट होने की ज़रूरत नहीं है।

"गणितीय" अंकन कार्यात्मक भाषाओं की एक आम संपत्ति नहीं है। हास्केल की तुलना में स्काला और सभी लिस्प आधारित भाषाओं में बहुत अलग वाक्यविन्यास हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.