क्या रूबी एक कार्यात्मक भाषा है?


88

विकिपीडिया का कहना है कि रूबी एक कार्यात्मक भाषा है, लेकिन मैं आश्वस्त नहीं हूं। क्यों या क्यों नहीं?


4
शायद इसलिए कि आपका प्रश्न बहुत छोटा है, हालाँकि व्यक्तिगत रूप से मुझे इससे कोई समस्या नहीं है!
ljs

पहले से ही अच्छे उत्तर हैं, इसलिए बस उन्हें पूरक करने के लिए, एफपी और रूबी पर चर्चा करने वाली सामग्री की एक जोड़ी: code.google.com/p/tokland/wiki/RubyFunctionalProgramming स्लाइडशेयर.net
टॉकलैंड

1
अगर किसी को इस विषय में रुचि है, तो कृपया इसे देखें और आप सीखेंगे कि कैसे माणिक को कार्यात्मक तरीके से उपयोग किया जा सकता है, कार्यात्मक प्रोग्रामिंग की जड़ें क्या हैं, क्यों माणिक कार्यात्मक भाषा नहीं है, भले ही यह कार्यात्मक प्रोग्राम करने में सक्षम हो: youtube .com / watch? v = 5ZjwEPupybw
maddin2code

जवाबों:


29

मुझे सबसे निश्चित रूप से लगता है कि आप रूबी में कार्यात्मक शैली का उपयोग कर सकते हैं।

कार्यात्मक शैली में कार्यक्रम करने में सक्षम होने के लिए सबसे महत्वपूर्ण पहलुओं में से एक यह है कि क्या भाषा उच्च आदेश कार्यों का समर्थन करती है ... जो रूबी करती है।

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

तो, हाँ, यह कार्यात्मक शैली का समर्थन करता है, लेकिन यह आपको गैर-कार्यात्मक शैली में भी कार्यक्रम करने देगा।


4
इस मापदंड का उपयोग करते हुए, क्या आप कहेंगे कि स्मॉलटाक कार्यात्मक है क्योंकि इसमें ब्लॉक हैं?
ऑस्करराइज

अच्छा जवाब है लेकिन एक नाइटपिक - उच्च क्रम कार्यों को एक कार्यात्मक शैली के लिए कड़ाई से आवश्यक नहीं है। उदाहरण के लिए, आप फ़ंक्शन ऑब्जेक्ट्स को परिभाषित करके और उन्हें उच्च ऑर्डर फ़ंक्शन के समान प्रभाव प्राप्त करने के लिए कंपोज़ करके जावा (जिसमें प्रथम श्रेणी / उच्च क्रम फ़ंक्शन नहीं हैं) में कार्यात्मक शैली प्राप्त कर सकते हैं।
मिकेरा

2
बस, यह बताना चाहता हूं कि @peter ने पूछा Is ruby a functional language?और सीधे उत्तर में कहा कि यह सरल नहीं है। रूबी कुछ कार्यात्मक विशेषताओं के साथ एक ऑब्जेक्ट ओरिएंटेड भाषा है।
एलियास पेरेज़

58

एक भाषा है या नहीं एक कार्यात्मक भाषा महत्वहीन है। फंक्शनल प्रोग्रामिंग एक थीसिस है, जिसे फिलिप वाडलर (द एसेन्स ऑफ फंक्शनल प्रोग्रामिंग) और जॉन ह्यूज (क्यों फंक्शनल प्रोग्रामिंग मैटर्स) द्वारा समझाया गया है।

एक सार्थक प्रश्न है, 'कार्यात्मक प्रोग्रामिंग की थीसिस को प्राप्त करने के लिए रूबी कितना उत्तरदायी है?' जवाब 'बहुत खराब' है।

मैंने अभी हाल ही में इस पर बात की। ये हैं स्लाइड्स


3
आपके द्वारा दी गई स्लाइड्स में यह उल्लेख नहीं किया गया है कि रूबी "एफपी की थीसिस को प्राप्त करने के लिए बहुत खराब रूप से उत्तरदायी है।" जावा (ओके, आसान अनाम फ़ंक्शंस?) की तुलना में C # अधिक एमनेबल क्यों है? क्या यह इसलिए है क्योंकि आपके पास रूबी में वैश्विक चर हो सकते हैं?
kizzx2

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

2
+1 भाषाओं को कार्यात्मक के रूप में वर्गीकृत करने में अस्पष्टता को इंगित करने के लिए। नरक, मैंने कार्यात्मक सी लिखा है!
एली

1
रूबी की तुलना में C # अधिक क्यों है?
dan_l 21

1
प्रभावी रूप से लिंक-केवल उत्तर, क्योंकि यह स्पष्टीकरण के महत्वपूर्ण भाग (संपूर्ण स्पष्टीकरण, वास्तव में) को बाहरी लिंक से जोड़ता है। अब जब वह लिंक मर गया, तो उत्तर बेकार हो गया।
ivan_pozdeev

34

रूबी उच्च-स्तरीय फ़ंक्शंस का समर्थन करता है (ऐरे # मैप, इंजेक्शन, और चयन देखें), लेकिन यह अभी भी एक अनिवार्य, ऑब्जेक्ट-ओरिएंटेड भाषा है।

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

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


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

6
HHC, परिभाषा के अनुसार, एक चर एक मान है जो बदल सकता है । आप जो बोल रहे हैं, वह मूल्य है।
स्काला न्यूब

वास्तव में हास्केल का "अनमॉडिफ़ेबल वैरिएबल" केवल मापदंडों (परिभाषाओं) के बिना निरंतर कार्य है।
बारिशदेव

16

मैं उस समर्थन को प्रस्तुत करता हूं, या एक कार्यात्मक शैली में एक भाषा में कार्यक्रम करने की क्षमता होने से एक कार्यात्मक भाषा नहीं बनती है।

मैं एक कार्यात्मक शैली में भी जावा कोड लिख सकता हूं अगर मैं अपने कॉलेजियम को चोट पहुंचाना चाहता हूं, और कुछ महीनों के सप्ताह में खुद को।

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

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

रूबी अपने मूल में ऑब्जेक्ट-ओरिएंटेड है, इसलिए भले ही एक कार्यात्मक शैली के लिए यह काफी अच्छा समर्थन है, यह स्वयं एक कार्यात्मक भाषा नहीं है।

वैसे भी मेरी गैर-वैज्ञानिक राय है।

संपादित करें: रेट्रोस्पेक्ट में और ठीक टिप्पणियों के लिए विचार के साथ मैंने इस उत्तर को दूर किया है, मुझे लगता है कि वस्तु-उन्मुख बनाम कार्यात्मक तुलना सेब और संतरे में से एक है।

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

अब, यह मेरी गैर-वैज्ञानिक राय है।


मुझे लगता है कि आप रूबी को जावा की तुलना में कार्यात्मक कॉल करने के लिए एक बेहतर मामला बना सकते हैं .... नहीं, रूबी कड़ाई से कार्यात्मक नहीं है, लेकिन इसमें एक कार्यात्मक शैली का उपयोग करना बहुत आसान है ... और एक गैर-कार्यात्मक शैली सहयोगी हो सकता है आसानी से इसे वापस गैर-कार्यात्मक में बदल दें
माइक स्टोन

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

इसलिए चूंकि डी के पास शुद्ध कार्य हैं, आप डी को एक कार्यात्मक भाषा कहेंगे? digitalmars.com/d/2.0/function.html#pure-functions
पीटर बर्न्स

3
बहुत से लोग लिस्प और योजना कार्यात्मक भाषाओं पर विचार करते हैं, मोटे तौर पर अनाम कार्यों के व्यापक उपयोग के कारण। और फिर भी, उनके पास शुद्ध कार्यों की गारंटी नहीं है। शुद्ध कार्यों का समर्थन करने वाली भाषाओं के लिए शब्द को सीमित करना बहुत अधिक प्रतिबंधात्मक लगता है।
skymt

13

रूबी को "TRUELY" कार्यात्मक होने के लिए निम्नलिखित आवश्यकताओं को पूरा करना होगा।

अपरिवर्तनीय मूल्य: "चर" सेट होने के बाद, इसे बदला नहीं जा सकता। रूबी में, इसका मतलब है कि आपको प्रभावी रूप से स्थिरांक जैसे चर का इलाज करना होगा। भाषा में पूरी तरह से समर्थित नहीं है, आपको प्रत्येक चर को मैन्युअल रूप से फ्रीज करना होगा।

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

उच्च-क्रम के कार्य: ये ऐसे कार्य हैं जो कार्यों को तर्क के रूप में अनुमति देते हैं, या रिटर्न मान के रूप में कार्यों का उपयोग करते हैं। यह, यकीनन, किसी भी कार्यात्मक भाषा की सबसे महत्वपूर्ण विशेषताओं में से एक है।

करीकरण: उच्च-क्रम के कार्यों द्वारा सक्षम किया गया, करीकरण एक फ़ंक्शन को रूपांतरित कर रहा है जो एक तर्क में कई तर्कों को लेता है जो एक तर्क लेता है। यह आंशिक फ़ंक्शन अनुप्रयोग के साथ हाथ में जाता है, जो एक बहु-तर्क फ़ंक्शन को एक फ़ंक्शन में बदल रहा है जो कम तर्क लेता है फिर मूल रूप से किया।

पुनरावृत्ति: स्वयं के भीतर से एक फ़ंक्शन को कॉल करके लूपिंग। जब आपके पास उत्परिवर्तित डेटा तक पहुँच नहीं होती है, तो पुनरावर्तन का उपयोग डेटा निर्माण और श्रृंखला निर्माण के लिए किया जाता है। ऐसा इसलिए है क्योंकि लूपिंग एक कार्यात्मक अवधारणा नहीं है, क्योंकि इसमें एक निश्चित समय में लूप की स्थिति को संग्रहीत करने के लिए चर को पास करने की आवश्यकता होती है।

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

प्रस्ताव (सिर्फ एक विचार) मैं किसी तरह की परिभाषा के लिए बहुत अच्छा होगा mode, जिसमें कार्यात्मक प्रतिमान के साथ फाइल घोषित करने का निर्देश हो, उदाहरण

मोड 'कार्यात्मक'


2
आपका स्वागत है। मैं आपको कार्यात्मक भाषाओं के बारे में पढ़ने के लिए आमंत्रित करना चाहूंगा। लिस्प सभी कार्यात्मक लंगू, एमएल (CAML) और एर्लांग / अमृत के दादा-दादी हैं। यह वास्तव में चीजों के आपके दृष्टिकोण को बदल देता है। मैं बार विशेषज्ञ नहीं हूं, लेकिन कंप्यूटर विज्ञान के एक निरंतर छात्र को नया सामान पढ़ने और सीखने का आनंद मिलता है।
एलियास पेरेज़

सुव्यवस्थित उत्तर। रूबी ने कुछ अतिरिक्त अन्वेषणों से प्यार किया होगा कि माणिक इन चीजों का कितना समर्थन करता है। मेरा मानना ​​है कि उच्च क्रम के कार्य, करी और पुनरावृत्ति रूबी में सभी समर्थित / संभव हैं, कृपया मुझे सही करें अगर मैं गलत हूं।
माइकल डोरस्ट


4

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

उदाहरण:

"हैलो" .reverse () = "olleh", प्रत्येक स्ट्रिंग एक स्ट्रिंग ऑब्जेक्ट उदाहरण है और इसी तरह आगे और आगे।

यहाँ या यहाँ पढ़ें


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

4

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

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

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


हास्केल किस तरह से विशुद्ध रूप से कार्यात्मक भाषा नहीं है? या मिरांडा (एक कम प्रसिद्ध कार्यात्मक प्रोग्रामिंग भाषा) के बारे में कैसे? courses.cs.washington.edu/courses/cse505/99au/functional/… "हास्केल एक मानक शुद्ध कार्यात्मक भाषा है,"
बारलोप

2

रूबी वास्तव में एक बहु-प्रतिमान भाषा का बहुत अधिक नहीं है, मुझे लगता है। बहु-प्रतिमान का उपयोग लोगों द्वारा अपनी पसंदीदा भाषा को कुछ अलग करने के लिए किया जाता है, जो कई अलग-अलग क्षेत्रों में उपयोगी है।

मैं वर्णन करता हूं कि रूबी एक वस्तु-उन्मुख स्क्रिप्टिंग भाषा है। हां, फ़ंक्शंस प्रथम श्रेणी के ऑब्जेक्ट (सॉर्ट) हैं, लेकिन यह वास्तव में इसे एक कार्यात्मक भाषा नहीं बनाता है। IMO, मैं जोड़ सकता हूं।


4
भाषा का प्रकार उस प्रोग्रामिंग शैलियों द्वारा परिभाषित किया गया है जिसका वह समर्थन करता है; बदले में, यह सुविधाओं द्वारा तय किया जाता है। प्रथम श्रेणी और अनाम कार्य = न्यूनतम कार्यात्मक प्रोग्रामिंग। रूबी OO प्रोग्रामिंग का समर्थन करती है, लेकिन इसकी आवश्यकता नहीं है: आपको कभी भी कक्षा को परिभाषित करने की आवश्यकता नहीं है। इसलिए, बहु-प्रतिमान।
21

2

कार्यात्मक प्रोग्रामिंग में पुनरावृत्ति आम है। लगभग कोई भी भाषा पुनरावर्तन का समर्थन करती है, लेकिन अगर पूंछ कॉल अनुकूलन (TCO) नहीं है तो पुनरावर्ती एल्गोरिदम अक्सर अप्रभावी होते हैं ।

कार्यात्मक प्रोग्रामिंग भाषाएं पूंछ की पुनरावृत्ति को अनुकूलित करने में सक्षम हैं और निरंतर स्थान में इस तरह के कोड को निष्पादित कर सकती हैं। कुछ रूबी कार्यान्वयन पूंछ पुनरावृत्ति का अनुकूलन करते हैं, दूसरे नहीं करते हैं, लेकिन सामान्य रूप से रूबी कार्यान्वयन को TCO करने की आवश्यकता नहीं होती है। देखें क्या रूबी टेल कॉल अनुकूलन प्रदर्शन करते हैं?

इसलिए, यदि आप कुछ रूबी कार्यात्मक शैली लिखते हैं और कुछ विशेष कार्यान्वयन के TCO पर भरोसा करते हैं, तो आपका कोड एक और रूबी दुभाषिया में बहुत अप्रभावी हो सकता है। मुझे लगता है यही कारण है कि रूबी एक कार्यात्मक भाषा नहीं है (न ही पायथन है)।


TCO दिलचस्प है, क्योंकि यह अनिवार्य रूप से कार्यक्रम के व्यवहार को बदलता है। कुछ मामलों में, यह कार्यक्रम के लिए दिखाई नहीं देता है, लेकिन अन्य मामलों में, यह अपवाद अपवाद है। इसलिए, यह हमेशा एक उपयुक्त अनुकूलन नहीं है।
ioquatix

2

कड़ाई से बोलते हुए, किसी भाषा को "कार्यात्मक" के रूप में वर्णित करने का कोई मतलब नहीं है; अधिकांश भाषाएँ कार्यात्मक प्रोग्रामिंग में सक्षम हैं। यहां तक ​​कि C ++ है।

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

उत्तरार्द्ध यकीनन एक मामूली कार्यान्वयन-विशिष्ट तकनीकी है और इसका वास्तविक भाषा से कोई लेना-देना नहीं है। X64 C # 4.0 संकलक पूंछ-पुनरावृत्ति अनुकूलन करता है, जबकि x86 कोई भी मूर्खतापूर्ण कारण के लिए नहीं करता है।

सिंथेटिक चीनी को आमतौर पर कुछ हद तक या किसी अन्य के आसपास काम किया जा सकता है, खासकर अगर भाषा में प्रोग्रामेबल प्रीकॉम्पीलर है (यानी सी की #define)।

यह पूछना थोड़ा अधिक सार्थक हो सकता है, "क्या भाषा __ समर्थन अनिवार्य प्रोग्रामिंग का समर्थन करती है?", और जवाब, उदाहरण के लिए, लिस्प के साथ, "नहीं" है।


1

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

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