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