2009-12-22 16 views
5

स्कूल में एक कार्यात्मक प्रोग्रामिंग कोर्स के दौरान हास्केल सीखा था। हास्केल को काम करना थोड़ा मुश्किल था। अब पाइथन पर बहुत काम किया है। पाइथन के साथ काम करना काफी आसान है।कौन सा अधिक कार्यात्मक प्रोग्रामिंग भाषा हैस्केल या पायथन?

पायथन कुछ कार्यात्मक प्रोग्रामिंग संरचनाओं का समर्थन करता है।

कार्यात्मक प्रोग्रामिंग पर पुनर्विचार करने की सोच रहा था। कोड के लिए एक बेहतर भाषा क्या होगी? हास्केल या पायथन? क्यूं कर?

+3

कोई बेहतर (कार्यात्मक) भाषा नहीं है, केवल अलग-अलग भाषाएं हैं। वैसे भी, अजगर एक कार्यात्मक भाषा नहीं है। – Chii

+0

ओह, चलो। -1 इस सवाल के लिए उचित नहीं है। यदि आपने कभी भी एर्लांग, एक्सएसएलटी या हास्केल में कोई प्रोजेक्ट नहीं किया है, तो आप इन सुविधाओं को बहुत आसानी से गलती कर सकते हैं। – Boldewyn

+9

यदि पाइथन वास्तव में एक कार्यात्मक भाषा थी तो यह व्यक्तिपरक हो सकता है। वास्तव में पाइथन अनिवार्य शैली और परिवर्तनीय स्थिति को गले लगाता है, और कुछ कार्यात्मक-आइश संरचनाओं को चुनता है जहां यह उपयुक्त होता है। –

उत्तर

32

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

कार्यात्मक प्रोग्रामिंग सुविधाओं का एक सेट इतना सोचने का एक तरीका नहीं है। कार्रवाई में सोचने के तरीके और इसे सीखना शुरू करने के लिए, जॉन ह्यूजेस द्वारा Why Functional Programming Matters पेपर देखें। ह्यूजेस से आप जो सीखते हैं, आप आसानी से हास्केल में आवेदन कर सकते हैं। वास्तव में, हास्केल बल पर अधिक संभावना है कि आप सोचने का नया तरीका सीखें। पाइथन के साथ आप यहां और वहां कुछ लैम्ब्स का उपयोग कर सकते हैं और खुद को मूर्ख बना सकते हैं कि आप कार्यात्मक प्रोग्रामिंग सीख रहे हैं। आप नहीं होंगे

उस ने कहा, हास्केल एक बार में सभी को निगलने के लिए बहुत कुछ हो सकता है। यदि आपको यह मुश्किल लगता है तो आप Standard ML या Racket (जिसे पहले पीएलटी योजना या डॉशेचेम कहा जाता है) को आजमा सकते हैं। मानक एमएल आपको अधिक नए विचारों के साथ पेश करेगा, लेकिन उन लोगों के पास नए कार्यकर्ताओं का स्वागत करने के लिए उनके साथ कोई कार्य नहीं है जिस तरह से रैकेटियर या हास्केल लोग करते हैं।

+0

क्या आपको सचमुच लगता है कि एक शक्तिशाली प्रकार प्रणाली कार्यात्मक प्रोग्रामिंग के लिए ड्रॉ है? टीआईओबीई इंडेक्स को देखते हुए, लिस्प और एर्लांग सबसे लोकप्रिय कार्यात्मक भाषा प्रतीत होते हैं, और वे दोनों गतिशील AFAIK हैं। – Chuck

+6

मुझे लगता है कि एक शक्तिशाली प्रकार प्रणाली * ए * प्रमुख ड्रॉ है। एक शक्तिशाली मैक्रो सिस्टम भी एक प्रमुख ड्रॉ है, जो मुझे लगता है कि एलआईएसपी की कुछ लोकप्रियता बताती है। Erlang अपने कार्यात्मक विशेषताओं के लिए इतना लोकप्रिय नहीं है, लेकिन इसकी विश्वसनीयता और स्केलेबल समांतरता के कारण। इसके अलावा यह आपके पीछे एक प्रमुख हार्डवेयर निर्माता होने से कोई दिक्कत नहीं करता है। एरिक्सन टेलीफोनी और एरलांग है क्योंकि सूर्य कंप्यूटिंग और जावा है। शायद और भी। –

+1

हास्केल (बनाम एरलांग) पर क्विक चेक की सादगी सीधे हास्केल के प्रकार प्रणाली के लीवरेजिंग से आती है। तो, हां, हास्केल की टाइप सिस्टम कुछ लोगों के लिए ऑफपुट कर रही है (मुझे लगता है कि टाइप क्लास गंदे हैं, और टाइपिंग प्रोग्राम्स में अनिवार्य रूप से कठिनाई होती है), लेकिन यह शक्तिशाली है, और हास्केल द्वारा प्राप्त किए जाने वाले अधिकांश कार्यों के लिए आधार प्रदान करता है। –

38

हास्केल एक कार्यात्मक प्रोग्रामिंग भाषा है, जबकि अजगर सिर्फ कुछ विशेषताएं कार्यात्मक प्रोग्रामिंग भाषाओं के है। तो, यह बस गया है। Q.e.d.

संपादित करें: क्या अजगर में कमी है, बस एक उदाहरण देने के लिए, optimization of recursive function calls है। यह वास्तविक कार्यात्मक प्रोग्रामिंग भाषाओं में महत्वपूर्ण है।

गुगलिंग, वैसे, बस this nice article का उत्पादन किया।

-4

Haskell homepage से:

हास्केल एक उन्नत पूरी तरह कार्यात्मक प्रोग्रामिंग भाषा है। अत्याधुनिक अनुसंधान के बीस वर्षों से अधिक का एक ओपन सोर्स उत्पाद, यह मजबूत, संक्षिप्त, सही सॉफ्टवेयर के तेज़ी से विकास की अनुमति देता है।

व्यंग्यात्मक अनुवाद:

  • "उन्नत" = "नहीं हर किसी के लिए"
  • "पूरी तरह कार्यात्मक" =
  • "बीस से अधिक वर्षों" "निश्चित रूप से हर किसी के लिए नहीं" = "और अभी भी हर कोई इसे पसंद नहीं करता!"
  • "अत्याधुनिक शोध" = "एक मौका है कि आपको एक व्यावहारिक समस्या मिल सकती है जिसे आप इसके साथ हल कर सकते हैं लेकिन हम अभी भी इस पर काम कर रहे हैं!"
  • "मजबूत, संक्षिप्त, सही सॉफ्टवेयर" = "क्या आप सरल, समझने योग्य, स्पष्ट, पठनीय याद कर रहे हैं? मान लीजिए!"

अलग-अलग चुटकुले, कार्यात्मक भाषा बहुमत के लिए नहीं है और कभी नहीं होगी। ऐसे लोग हैं जो ढेर की तरह सोच सकते हैं लेकिन मैं, एक के लिए, यह पसंद करता हूं कि कंप्यूटर मेरी गड़बड़ी को समझने के लिए कड़ी मेहनत करता है।

+2

गड़बड़ी को समझने के लिए +1 - कंप्यूटर मेरे जैसा होना चाहिए। – whatnick

+6

कार्यात्मक भाषाओं के साथ क्या करना है? अगर आप ढेर में हैं तो फर्थ भाषा है। यदि कार्यात्मक भाषाओं पर आपकी राय के लिए आधार है तो मुझे डर है कि आपके पास लंबे समय तक, ** लंबा ** रास्ता है जो आपको पकड़ने से पहले जाने के लिए है। सरकासिक भी। – rvirding

+9

क्या? आपका दावा यह है कि कार्यात्मक प्रोग्रामिंग धातु के बहुत करीब है? ऐसी दुनिया में जहां सी प्रमुख भाषा है, कम नहीं? आपको अपने मेड से दूर रहना होगा। हास्केल बहुत उच्च स्तर है। आप वास्तव में यहां क्या मतलब है, "यह वह नहीं है जो मुझे पहले से ही पता है।" – Chuck

0

बोल्डविन ने क्या कहा। हास्केल सबसे अधिक "कट्टर" कार्यात्मक भाषाओं में से एक है है, क्योंकि वहां बस परिवर्तनीय स्थिति को बनाए रखने का कोई तरीका नहीं है।

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

दूसरी ओर, पाइथन, "फंक्शनल शो एंड टेल" अनुभाग पेश करता है जहां कुछ हद तक कार्यात्मक विशेषताओं को अन्यथा मुख्य रूप से अनिवार्य वातावरण में संचालित किया जा सकता है।

इस प्रकार, यदि उनके मूल प्रश्न में, ओपी का "बेहतर" मतलब "अधिक कार्यात्मक" या "कार्यात्मक-भूमि का बेहतर नागरिक" (जैसा कि उसने स्पष्ट किया है), तो हास्केल "हाथ" जीतता है।

+1

हास्केल निश्चित रूप से परिवर्तनीय स्थिति प्रदान करता है, यह सिर्फ डिफ़ॉल्ट नहीं है। आधार पुस्तकालयों में दोनों परिवर्तनीय संदर्भ (आईओआरएफ/एसटीआरआईएफ) और म्यूटेबल सरणी (आईओएरे/एसटीएआरएआर) दोनों पर विचार करें। सिर्फ इसलिए कि यह डिफ़ॉल्ट नहीं है, इसका मतलब यह नहीं है कि यह अस्तित्व में नहीं है। –

+7

बेशक, पाइथन में टेस्ट-ड्राइविंग कार्यात्मक विशेषताएं कुछ कारों को चलाने और पार्क में छोड़कर एक कार चला रही हैं। Guido खुद पाइथन में कार्यात्मक प्रोग्रामिंग की बहुत आलोचनात्मक है। शुरुआत के लिए, लैम्ब्डा निश्चित रूप से वास्तविक कार्यों के लिए दूसरे श्रेणी के नागरिक हैं। – Chuck

7

जबकि पायथन वास्तव में कुछ कार्यात्मक संरचनाओं का समर्थन करता है, हास्केल एक कार्यात्मक भाषा है। आपको यह भी विचार करने की आवश्यकता है कि हैस्केल भी पूरी तरह से कार्यात्मक और आलसी, दो अवधारणाएं जो आपको हास्केल में मिलने वाली कठिनाई का कारण हो सकती हैं। यदि यह मामला है, तो पढ़ें।

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

यह पूरी तरह से उस समय पर निर्भर करता है जब आप पुनरीक्षण कार्यात्मक प्रोग्रामिंग और इस वर्तमान प्रतिमान में अपनी वर्तमान पृष्ठभूमि पर खर्च करने के इच्छुक हैं।

+3

फिर से, * हास्केल म्यूटेबल सरणी, संदर्भ और लूप * प्रदान करता है। वे सिर्फ डिफ़ॉल्ट नहीं हैं: IORef/IOArray/Control.Monad.for आदि –

+0

सहमत हैं, लेकिन वे ऐसी भाषा का एक अस्पष्ट हिस्सा हैं जो आम तौर पर नए उपयोगकर्ताओं को हतोत्साहित किया जाता है, या यहां तक ​​कि लाया नहीं जाता है। – CharlieP

+3

@ डॉन: यह इस बारे में नहीं है कि भाषा क्या संभव बनाता है (ट्यूरिंग टैरपिट से सावधान रहें), यह इस बारे में है कि भाषा क्या आसान बनाती है। – Chuck

11

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

एक पूरी तरह कार्यात्मक भाषा के रूप में, हास्केल मूल रूप से अनिवार्य बनाता है कि एक कथात्मक, कार्यात्मक शैली में एक कार्यक्रम है, तो हाथ-नीचे, हास्केल "अधिक कार्यात्मक" अजगर से है।

+2

प्रथम श्रेणी के फ़ंक्शन के लिए उचित अनाम लैम्बडा, और उचित रूप से अंतरिक्ष-कुशल पूंछ कॉल की आवश्यकता होती है, जिनमें से कोई भी पाइथन नहीं है। अन्यथा मैं पूरी तरह से सहमत हूं। सी एफ http://lambda-the-ultimate.org/node/3532#comment-50319 –

संबंधित मुद्दे

 संबंधित मुद्दे