क्या एक कार्यात्मक प्रोग्रामिंग भाषा को रीबोल करें?


9

मैं Rebol में भाग गया और मैं इसके बारे में सोच रहा था।

मैं यहाँ से निम्नलिखित स्क्रिप्ट में भाग गया :

 use [feed questions answers][
    feed: load-xml/dom http://stackoverflow.com/feeds/tag/rebol
    questions: map-each entry feed/get-by-tag <entry> [
        find/match entry/get <id> "http://stackoverflow.com/q/"
    ]

    answers: make block! length? questions

    foreach question questions [
        question: load-xml/dom join http://stackoverflow.com/feeds/question/ question
        foreach entry next question/get-by-tag <entry> [append answers entry/tree]
    ]

    insert clear feed/find-element <entry> answers
    feed/flatten
 ]

सभी संग्रह हेरफेर ऑपरेशन जैसे map-eachकि मुझे जावास्क्रिप्ट और C # दोनों की याद दिलाते हैं जिनमें कार्यात्मक क्षमताएं हैं।

एक क्रियाशील भाषा है? क्या यह कार्यात्मक प्रोग्रामिंग का समर्थन करता है? क्या यह शुद्ध कार्यात्मक भाषा (PFL) के रूप में वर्गीकृत होगी?


5
यहाँ REBOL के निर्माता का जवाब है: REBOL एक शुद्ध कार्यात्मक भाषा है?
ग्रेग हेविगिल

1
@GregHewgill उस संसाधन के लिए धन्यवाद। मैंने StackOverflow Rebol चैट रूम ( chat.stackoverflow.com/transcript/message/7836761#7836761 ) में एक चैट के बाद यह सवाल पूछा । उन्होंने (हमने) यह सोचा कि चूंकि प्रोग्रामर या अन्य साइटों के बारे में स्टैकएक्सचेंज में इस बारे में कोई जानकारी नहीं है, इसलिए मुझे इसे भविष्य के संदर्भ के लिए पूछना चाहिए। यह लिंक बहुत अच्छा है, लेकिन इसे विस्तारित किया जा सकता है और यहां समझाया गया है कि ऐसे अधिक उपयोगकर्ता जो अनुभवी नहीं हैं Rebol प्रोग्रामर इसे समझ सकते हैं। उस लेख के उद्धरणों और व्यक्तिगत विकास के अनुभव के साथ एक उत्तर की सराहना की जाएगी।
बेंजामिन ग्रुएनबाम

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

जवाबों:


13

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

फिर भी ... बेसलाइन "रॉल" में आप इस तरह की बातें लिख सकते हैं:

foo: function [value [integer!]] [
    either now/date = 20-Feb-2013 [
        value + 1
    ] [
        value
    ]
]

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

इसलिए Rebol बॉक्स से बाहर शुद्ध कार्यात्मक नहीं है । (... पर पढ़ें ...)

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

>> foo: does [a + 10]

>> a: 20

>> print foo
== 30

(नोट: डीओईएस एक फ़ंक्शन को परिभाषित करने के लिए एक सुविधा है जिसमें कोई तर्क नहीं है, जिसमें केवल एक निकाय है।)

मुझे नहीं पता कि मैं उस (या जावास्क्रिप्ट) पर विचार करने के लिए फिट बैठता हूं जो मैं बात करता हूं जो कार्यात्मक प्रोग्रामिंग को कॉल करेगा। YMMV।

यदि आप कंप्यूटर विज्ञान में किसी भी समय बिताते हैं, तो आप ट्यूरिंग टारपिट और कम्प्यूटेबिलिटी जैसी चीजों के बारे में सीखते हैं और इन प्रकार के सिद्धांतों के समतुल्य हैं जहां "यदि आप X को Y से जोड़ सकते हैं तो Z सत्य होगा"। और जैसा कि आप सी में एक हास्केल कार्यान्वयन लिख सकते हैं, और फिर खुद को केवल सी कॉल का उपयोग करके हास्केल पुस्तकालय में मैप कर सकते हैं, आप दावा कर सकते हैं कि आप "कार्यात्मक प्रोग्रामिंग" कर रहे हैं और तकनीकी रूप से सही हैं।

इसलिए यदि आप कहना चाहते हैं कि Rebol कार्यात्मक प्रोग्रामिंग शैलियों के लिए तुला हो सकता है, तो आप एक निराशावादी हो सकते हैं और कह सकते हैं "अच्छी तरह से यह दिखावा करने से बेहतर नहीं है कि आप C कर रहे हैं जब आप वास्तव में भाषा के ऐसे सीमित उपसमूह का उपयोग कर रहे हैं जो आप ' प्रॉक्सी द्वारा हास्केल का उपयोग करना " । रेबोल की आस्तीन ऊपर चाल है कि आप कितनी आसानी से एक "बोली" प्रतिमान से दूसरे में फिसल जाते हैं। थोड़ा डोमेन-विशिष्ट-भाषा लिखना जो कार्यात्मक होता है, इतना आसान और स्वाभाविक है कि ऐसा महसूस नहीं होता है कि आप इसे करने के लिए अपनी भाषा को संयुक्त से घुमा रहे हैं। डोमेन विशिष्ट भाषाओं को बनाने की क्षमता जिसमें कार्यात्मक चरित्र होता है, Rebol को "प्रतिमान तटस्थ" के रूप में लेबल करता है ।

बहुत से लोग Rebol को अपनी सबसे आम बोली (DO बोली) के साथ मिलाते हैं और सोचते हैं कि "Rebol क्या है"। लेकिन रेबोल का "सार" एक्सएमएल की तरह अधिक है, यह एक डेटा विनिमय प्रारूप है जो संयोग से (ठीक है, संयोग से नहीं) हाइपर-अनुकूलित कोड है जो इसे बॉक्स से बाहर कुछ निश्चित तरीकों से संसाधित करने पर ध्यान केंद्रित करता है। एक अच्छी पृष्ठभूमि पर पढ़ने के लिए कि यह एक्सएमएल से पैंट को कैसे काटता है , देखें एक्सएमएल को शुरू में एमीगाओस के कार्ल सस्सेनरथ (और अब रेबोल) की खामियों से दोष था।


1
यह एक महान जवाब है, लेकिन मुझे लगता है कि "एक्सएमएल शुरू से ही त्रुटिपूर्ण था" लेख बहुत बुरा है। सबसे पहले, वह खराब एक्सएमएल का उपयोग करता है (नेस्टिंग के साथ प्रतिनिधित्व करने वाला सब कुछ विशेषताओं के साथ प्रतिनिधित्व किया जा सकता है)। दूसरा, भाषाओं को एक पेड़ की तरह संरचना द्वारा दर्शाया जाता है जो xml जैसा दिखता है। जब आप एक वाक्य को पार्स करते हैं तो आपको एक पार्स ट्री मिलता है, एक्सएमएल की तुलना करना उचित नहीं है जिसमें ग्राम विशिष्ट जानकारी है जो स्ट्रिंग के साथ डोमेन विशिष्ट है। उत्तर के लिए धन्यवाद :)
बेंजामिन Gruenbaum

2
मैं एक Rebol n00b हूँ और जैसा कि आपने कहा है, मैं भी अब के बारे में सोच रहा हूँ कि Rebol वह है जो DO बोली है। इस मानसिकता से बाहर निकलने की उम्मीद है। :-)
के.के.

1
@BenjaminGruenbaum अगर मैं कार्ल की वेबसाइट को संपादित कर सकता हूं, तो मेरा विश्वास करो, मैं करूंगा। :-)
HostileFork का कहना है कि

@BenjaminGruenbaum लेकिन सभी भाषाएँ स्वतंत्र रूप से उस पेड़ की संरचना में हेरफेर नहीं कर सकती हैं। Rebol उस संबंध में बहुत लिस्प-वाई है।
इज़्काता १14 ’
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.