सबसे शुद्ध कार्यात्मक प्रोग्रामिंग भाषा? [बन्द है]


20

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

यह मुझे लगता है कि लिस्प या क्लोजर (या स्कीम, या स्काला, आदि) सीखना अधिक व्यावहारिक होगा, लेकिन मैंने हाल ही में जो सुना है, उसके लिए हास्केल को किसी को कार्यात्मक प्रोग्रामिंग सिद्धांतों को सिखाना बहुत कठिन होगा। मुझे इस बारे में अभी तक यकीन नहीं है, इसलिए मैं आपसे पूछ रहा हूं: सबसे शुद्ध कार्यात्मक प्रोग्रामिंग भाषा कौन सी है? यदि कोई व्यक्ति सबसे शुद्ध कार्यात्मक प्रोग्रामिंग भाषा के शानदार शीर्षक के लिए प्रतिस्पर्धा कर रहा है, तो यह बहुत अच्छा होगा।


2
मैंने मिरांडा को विश्वविद्यालय में सीखा है इसलिए मुझे पूर्वाग्रहित किया गया है, लेकिन मैं हास्केल को सुझाव दूंगा कि वे किसी भी व्यक्ति को अशुद्धता की व्याकुलता के बिना एक कार्यात्मक भाषा में विसर्जित करना चाहते हैं । * 8 ')
मार्क बूथ

2
कार्यात्मक प्रोग्रामिंग सीखने के बाद, आपको एक अभिव्यंजक प्रकार प्रणाली के साथ सांख्यिकीय रूप से टाइपिंग प्रोग्रामिंग भी सीखनी चाहिए। संयुक्त श्रेणी (कार्यात्मक और टाइप दोनों) में, मेरा सुझाव है: Coq> Haskell> OCaml> Scala> others। कुछ कम लोकप्रिय विकल्प हैं जो Coq और Haskell (जैसे एपिग्राम और एजडा) के बीच में फिट होते हैं। हास्केल ओकेएमएल के व्यक्त मॉड्यूल सिस्टम को याद करता है।
लुकास्टी

जवाबों:


28

कार्यात्मक भाषाओं की शुद्धता की डिग्री का आकलन करने के लिए कोई पैमाना नहीं है। यदि भाषा साइडइफेक्ट्स की अनुमति देती है तो यह अशुद्ध है, अन्यथा यह शुद्ध है। इस परिभाषा के अनुसार, हास्केल, मर्करी, क्लीन आदि शुद्ध कार्यात्मक भाषाएं हैं; जबकि स्काला, क्लोजर, एफ #, ओकेएमएल आदि अशुद्ध हैं।

संपादित करें: हो सकता है कि मैंने इसे "के रूप में टाइप किया हो , " यदि भाषा टाइप सिस्टम को जाने बिना साइड-इफेक्ट की अनुमति नहीं देती है , तो यह शुद्ध है। अन्यथा यह अशुद्ध है। "


6
बिल्कुल नहीं: हास्केल साइड इफेक्ट्स ( IOमोनड) की अनुमति देता है । यह सिर्फ इतना है कि साइड-इफ़ेक्ट-कारण कोड स्पष्ट रूप से चिह्नित है। मुझे नहीं लगता कि यह शुद्ध / अशुद्ध भाषाओं पर बात करने के लिए उपयोगी है (हास्केल आपको अनिवार्य रूप से प्रोग्राम करने देता है! हांसी!) लेकिन यह कोड के फंक्शन (फ़ंक्शन, मॉड्यूल, प्रोग्राम, जो भी हो) को शुद्ध होने के नाते उपयोगी हो सकता है। / अशुद्ध।
फ्रैंक शियरर

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

4
@Frank Shearar लेकिन यह एक इस तरह से बात करने के लिए उपयोगी है क्योंकि IOइकाई है शुद्ध। यह रनटाइम लाइब्रेरी, जो आपके कोड नहीं है, क्योंकि आपका mainफ़ंक्शन मूल रूप से एक विशाल राज्य ट्रांसफार्मर है। ( main :: World -> Worldपर्दे के पीछे की तरह कुछ )
वैकल्पिक

1
मेरी भाषा में संदर्भात्मक पारदर्शिता भी है। आप बस लिखते हैं program = "some C code", और फिर रनटाइम वातावरण सी कोड के साथ व्यवहार करता है। :-)
डैनियल लुबरोव

3
जैसा कि स्क्रीन पर प्रिंट करना एक साइड-इफेक्ट है, वास्तव में शुद्ध कार्यात्मक कार्यक्रम बहुत उबाऊ हैं।

15

चूँकि सीखना आपका लक्ष्य है, और प्रति कार्यक्रम लिखना नहीं , इसलिए आपको लैंबडा कैलकुलस से कोई शुद्ध नहीं मिल सकता है ।

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

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


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

2
प्रूफ लिखना एक प्रोग्राम लिख रहा है और एक प्रोग्राम लिखना एक प्रूफ लिखना है। जब आपको करी-हॉवर्ड समरूपता के बारे में पता चलता है, तो आप महसूस करेंगे कि आपने गणित की बाधा को दस हज़ार लाइनों से पहले पार कर लिया है।
मैकनील

1
का कोई सरल प्रतिनिधित्व नहीं है -1
डैनियल लुबरोव

2
@ मेसन व्हीलर: λ- कैलकुलस में अकेले नंबर नहीं होते हैं, या लैम्बडा एब्स्ट्रक्शन के अलावा वास्तव में किसी भी तरह का डेटा होता है। जब तक अन्यथा निर्दिष्ट नहीं किया जाता है, कोई भी λ-पथरी में संख्याओं के बारे में बात करता है, जिसका अर्थ शायद प्राकृतिक संख्याओं के लिए चर्च की एन्कोडिंग है , जहां एक संख्या n को n- गुना फ़ंक्शन संरचना द्वारा दर्शाया जाता है। उस ने कहा, मुझे संदेह है कि किसी ने वास्तव में कोशिश करने के बाद घटाव का पता लगाने के लिए संघर्ष किया था ; मैंने इसे दोपहर में अपने दम पर काम किया और केवल जोड़ और ज्ञान की परिभाषा दी जो घटाव संभव था।
सीए मैक्कैन

1
एक बार मामलों द्वारा अपघटन प्राप्त करने के बाद, चर्च अंकों का उपयोग करना घटाना आसान है। नकारात्मक संख्याओं का समर्थन करने के लिए पूरे (व्युत्पन्न) पथरी का निर्माण करना, बल्कि अधिक काम करना।
डोनल फेलो

6

इंप्रूव लैंग्वेज वास्तव में अधिक परिचित अनिवार्य भाषाओं से सिद्धांत में भिन्न नहीं हैं, खासकर अब जब कि कई कार्यात्मक ट्रिक की नकल की गई है। अलग क्या शैली है - आप समस्याओं को कैसे हल करते हैं।

चाहे आप हास्केल को शुद्ध मानते हैं, या IO मोनाद को अशुद्धता के रूप में गिनते हैं, हास्केल शैली इस शैली का एक चरम रूप है और अच्छी तरह से सीखने लायक है।

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

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

चरण दो - पाठ स्रोत कोड उत्पन्न करने के बजाय, आप एक दृढ़ता से टाइप किया हुआ सार वाक्यविन्यास ट्री बनाते हैं। आपका अनिवार्य भाषा संकलक आपके "उच्च स्तर" संकलक में अवशोषित हो जाता है, और एएसटी को सीधे स्रोत कोड के रूप में स्वीकार करता है। यह हास्केल जो करता है, उसके बहुत करीब है।

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

इसलिए, चरण 3 के लिए, दो को समान बनाएं - समान सिंटैक्स वाले समान फ़ंक्शन को "कोड पीढ़ी" के दौरान आंशिक रूप से मूल्यांकन किया जा सकता है, या पूरी तरह से मूल्यांकन किया जा सकता है, या बिल्कुल भी मूल्यांकन नहीं किया जा सकता है। इसके अलावा, पुनरावर्तन के पक्ष में एएसटी नोड्स के सभी लूपिंग निर्माण को छोड़ दें। वास्तव में, एक विशेष प्रकार के डेटा के रूप में एएसटी नोड्स के विचार को पूरी तरह से त्याग दें - आपके पास "शाब्दिक मूल्य" एएसटी नोड्स नहीं हैं, बस मूल्य आदि।

यह बहुत ज्यादा है जो आईओ सनक करता है - बाइंड ऑपरेटर प्रोग्राम बनाने के लिए "कार्रवाई" की रचना करने का एक तरीका है। यह कुछ खास नहीं है - सिर्फ एक फंक्शन। "कोड पीढ़ी" के दौरान कई अभिव्यक्तियों और कार्यों का मूल्यांकन किया जा सकता है, लेकिन जो लोग I / O साइड-इफेक्ट्स पर निर्भर करते हैं, उन्हें रन-टाइम तक मूल्यांकन में देरी होनी चाहिए - किसी विशेष नियम द्वारा नहीं, बल्कि डेटा निर्भरता के प्राकृतिक परिणाम के रूप में भाव।

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

इस विवरण से कोई संदेह नहीं होगा कि शुद्धतावादी प्रमुख विस्फोट करेंगे, लेकिन मेरे लिए यह कुछ वास्तविक कारणों की व्याख्या करता है कि हास्केल दिलचस्प क्यों है। यह प्रोग्रामिंग और मेटाप्रोग्रामिंग के बीच की सीमा को धुंधला कर देता है, और विशेष प्रोग्रामिंग की आवश्यकता के बिना आवश्यक प्रोग्रामिंग को सुदृढ़ करने के लिए कार्यात्मक प्रोग्रामिंग के टूल का उपयोग करता है।

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

उस ने कहा, कुछ मेटाप्रोग्रामिंग चीजें हैं जो मानक हास्केल नहीं कर सकते हैं, मूल रूप से क्योंकि प्रकार (और शायद कुछ अन्य चीजें) प्रथम श्रेणी के मान नहीं हैं। हालांकि, यह पता करने की कोशिश करने वाले भाषा संस्करण हैं।

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


धन्यवाद! मैं सोच रहा था कि क्या सी ++ टेम्प्लेट की उदारता स्वयं कार्यों में एकीकृत हो सकती है। ऐसा लगता है कि हास्केल ऐसा करता है, लेकिन महत्वपूर्ण हिस्सा यह है कि क्या इसे संकलित भाषा में लागू किया जा सकता है , जैसे कि एक ही इंजन संकलन-समय के दौरान टेम्पलेट्स से जेनेरिक फ़ंक्शन बना रहा है, रन-टाइम के दौरान उनका मूल्यांकन भी कर सकता है ...
मिलिंद आर

5

मैं व्यक्तिगत रूप से कार्यात्मक शुद्धता के तीन स्तरों में भाषाओं को वर्गीकृत करता हूं:

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

  • कार्यात्मक भाषाओं को प्रभावित करें - अर्थात वे जो एक कार्यात्मक शैली पर जोर देते हैं लेकिन साइड इफेक्ट्स की अनुमति देते हैं। क्लोजर इस श्रेणी में स्पष्ट रूप से है (यह अपने एसटीएम ढांचे के हिस्से के रूप में एक नियंत्रित फैशन में उत्परिवर्तन की अनुमति देता है), ओकेमैक्स या # #

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

आपकी स्थिति में, मैं पहले हास्केल सीखने का सुझाव दूंगा, फिर क्लोजर। मैंने यही किया और यह मेरे लिए बहुत अच्छा रहा! हास्केल सुंदर है और आपको सबसे शुद्ध कार्यात्मक सिद्धांत सिखाता है, क्लोज़र बहुत अधिक व्यावहारिक है और आपको दिल में बहुत अधिक कार्यात्मक होने के बावजूद बहुत कुछ करने में मदद करता है।

मैं वास्तव में कार्यात्मक भाषाओं के रूप में तीसरी श्रेणी की गिनती नहीं करता हूं (हालांकि हास्केल और क्लोज़र सीखने के बाद मैं अक्सर खुद का उपयोग करते समय कार्यात्मक तकनीकों का लाभ उठाता हूं!)


बहुत सख्त सीमाओं के भीतर , यहां तक ​​कि सी में कार्यात्मक क्षमताएं हैं। (मुख्य सीमा फ़ंक्शंस के रनटाइम सिंथेसिस पर है, जो कि वास्तव में सी में भयावह है, इतना है कि ज्यादातर लोग दावा करते हैं कि यह नहीं किया जा सकता है।)
डोनल फैलो

2
@ डॉनल फेलो: सीमा में जैसा कि अनंतता की ओर जाता है, हर ट्यूरिंग-पूर्ण भाषा कार्यात्मक होती है: किसी को भाषा में केवल एक लिस्प दुभाषिया लागू करने की आवश्यकता होती है, और उसके बाद उसका उपयोग करें। :]
सीए मैक्कैन

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

@ मीकेरा: मुझे आपका जवाब बहुत दिलचस्प लगता है: अगर स्काला कार्यात्मक नहीं है, लेकिन केवल बहु-प्रतिमान है, तो आप C ++ 11, C # या यहां तक ​​कि जावा (लैम्ब्डा की योजनाबद्ध परिचय) में कार्यात्मक प्रोग्रामिंग सुविधाओं का न्याय कैसे करते हैं?
जियोर्जियो

@ जियोर्जियो: मुझे लगता है कि आपके द्वारा उल्लेखित सभी भाषाओं में कार्यात्मक विशेषताएं शायद एक अच्छा विचार हैं, वे सिर्फ उन्हें "कार्यात्मक भाषा" नहीं बनाते हैं। या इसे विपरीत दिशा से देखने के लिए, तथ्य यह हो सकता है कि आप आवधिक-शैली के एकादश IO हास्केल को अनिवार्य भाषा नहीं बना सकते हैं :-)। बहु-प्रतिमान भाषाएं मूल रूप से परिणाम होती हैं जब आप बहुत सारे अलग-अलग प्रतिमानों को एक साथ लाते हैं और किसी भी विशेष शैली को पहले और सबसे महत्वपूर्ण नहीं मानते हैं। IMHO C ++, C # और Java सभी बहु-प्रतिमान होने की ओर बढ़ रहे हैं, लेकिन अभी तक वहाँ नहीं हैं क्योंकि वर्ग-आधारित OOP अभी भी प्रमुख है।
मीरा

3

यदि एक शुद्ध कार्यात्मक भाषा ऐसी है, जिसमें केवल शुद्ध कार्य हैं (दिनचर्या में साइड इफेक्ट्स नहीं हैं), तो यह थोड़ा व्यर्थ है, क्योंकि यह इनपुट नहीं पढ़ सकता है या आउटपुट नहीं लिख सकता है;)

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

मैं अब यह कहने जा रहा हूं: प्रोग्रामिंग फैशन बेवकूफ और उल्टा है। केवल यही चीजें मायने रखती हैं कि आपका कार्यक्रम छोटा है, लिखना आसान है, बनाए रखना आसान है और सही ढंग से काम करता है। आप इसे कैसे प्राप्त करते हैं, इसका प्रोग्रामिंग प्रोग्रामिंग के साथ कोई लेना-देना नहीं है। - रिचर्ड जोन्स

इसके अलावा, यदि आप "पवित्रता" की तलाश में हैं तो आप प्योर पर एक नज़र डालना चाहते हैं । हालाँकि, ध्यान दें कि C रूटीन को कॉल करने में अत्यधिक आसानी से यह कार्यात्मक रूप से अस्पष्ट हो जाता है (लेकिन बहुत शक्तिशाली भी)।


3

पूरी तरह से गंभीर जवाब नहीं है, लेकिन अनलांबा को एक दावेदार होना चाहिए। आपको SKI कॉम्बिनेटरों की तुलना में कोई भी "शुद्ध कार्यात्मक" नहीं मिल सकता है।


4
पागलपन! विधर्म! किस तरह की शुद्ध भाषा में साइड-इफ़ेक्ट वाले कॉम्बिनेटर की तरह बेतुकेपन हैं? नहीं नहीं। क्या तुम सच में यहाँ चाहते हैं आलसी कश्मीर है
सीए मैक्कैन

2

एरलैंग, हास्केल, स्कीम, स्काला, क्लोजर और एफ #

यह प्रश्न संभवतः आपकी खोज में भी आपकी मदद करेगा ।


धन्यवाद, दिलचस्प सवाल वास्तव में। मैंने पीएलटी-स्कीम / रैकेट के साथ शुरुआत की है, लेकिन मैंने अभी तक एसआईसीपी पर ध्यान नहीं दिया है ... रियल वर्ल्ड हास्केल मेरे लिए भी काफी दिलचस्प लग रहा है।
जोनिस

योजना एक कार्यात्मक शैली को प्रोत्साहित करती है, लेकिन इसमें set!(अन्य बातों के अलावा) ...
डैनियल लुबरोव

मैं OCaml का सुझाव देता हूं, क्योंकि यह मेरा पसंदीदा है। और इसमें एक मॉड्यूल सिस्टम है, जो हास्केल और एफ # मिस करता है।
लुकास्टी

हो सकता है @lukstafi पिछले 3 वर्षों में हैक्सेल बदल गया (मुझे पता है कि यह पागल की तरह उगाया गया है), लेकिन हैसेल में निश्चित रूप से मॉड्यूल हैं।
सारा

@kai एक मॉड्यूल सिस्टम द्वारा, मेरा मतलब था कि मॉड्यूल अन्य मॉड्यूल (मॉड्यूल का एक "लैम्ब्डा कैलकुलस") द्वारा मानकीकृत है।
लुकास्टी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.