एफपी (प्रोग्रामिंग भाषा)

From alpha
Jump to navigation Jump to search
FP
ParadigmFunction-level
द्वारा डिज़ाइन किया गयाJohn Backus
पहली प्रस्तुति1977
Dialects
FP84
Influenced by
APL[1]
Influenced
FL, Haskell, Joy

एफपी ('कार्यात्मक प्रोग्रामिंग' के लिए संक्षिप्त)[2]फंक्शन-लेवल प्रोग्रामिंग का समर्थन करने के लिए जॉन बैकस द्वारा बनाई गई एक प्रोग्रामिंग भाषा है[2]आदर्श। यह आम तौर पर उपयोगी आदिम के एक सेट से प्रोग्राम बनाने और नामित चर से बचने की अनुमति देता है (एक शैली जिसे एपीएल (प्रोग्रामिंग भाषा) पॉइंट फ्री भी कहा जाता है)। यह APL (प्रोग्रामिंग लैंग्वेज) से काफी प्रभावित था जिसे 1960 के दशक की शुरुआत में Kenneth E. Iverson द्वारा विकसित किया गया था।[3]

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

An FP system is based on the use of a fixed set of combining forms called functional forms. These, plus simple definitions, are the only means of building new functions from existing ones; they use no variables or substitutions rules, and they become the operations of an associated algebra of programs. All the functions of an FP system are of one type: they map objects onto objects and always take a single argument.[2]

स्वयं एफपी को कभी भी शिक्षा के बाहर ज्यादा उपयोग नहीं मिला।[5] 1980 के दशक में बैकस ने एक उत्तराधिकारी भाषा, FL (प्रोग्रामिंग भाषा) बनाई, जो IBM रिसर्च की एक आंतरिक परियोजना थी।

सिंहावलोकन

वे मान जो FP प्रोग्राम एक दूसरे में मैप करते हैं, उनमें एक सेट (अमूर्त डेटा प्रकार) शामिल होता है जो अनुक्रम निर्माण के तहत क्लोजर (गणित) होता है:

अगर एक्स1,...,एक्सn मान हैं, तो अनुक्रम 〈x1,...,एक्सn〉 भी एक मूल्य है

इन मूल्यों को परमाणुओं के किसी भी सेट से बनाया जा सकता है: बूलियन, पूर्णांक, वास्तविक, वर्ण, आदि।

बूलियन : {टी, एफ}
पूर्णांक : {0,1,2,...,∞}
चरित्र: {'ए', 'बी', 'सी',...}
प्रतीक : {एक्स,वाई,...}

⊥ अपरिभाषित मान या तल है। क्रम बॉटम-प्रिजर्विंग हैं:

<एक्स1,...,⊥,...,xn〉 = ⊥

FP प्रोग्राम फ़ंक्शंस हैं, जिनमें से प्रत्येक एक वैल्यू x को दूसरे में मैप करता है:

f:x उस मान का प्रतिनिधित्व करता है जो फ़ंक्शन f को लागू करने के परिणामस्वरूप होता है
    मान x के लिए

कार्य या तो आदिम होते हैं (अर्थात, एफपी पर्यावरण के साथ प्रदान किए जाते हैं) या प्रोग्राम बनाने के संचालन (जिन्हें कार्यात्मक भी कहा जाता है) द्वारा आदिम से बनाया गया है।

आदिम फ़ंक्शन का एक उदाहरण स्थिर है, जो एक मान x को निरंतर-मूल्यवान फ़ंक्शन x̄ में बदल देता है। कार्य सख्त कार्य हैं:

च: ⊥ = ⊥

प्रिमिटिव फंक्शन का एक अन्य उदाहरण सख्त समारोह फैमिली है, जिसे 1,2,... द्वारा निरूपित किया जाता है:

मैं:〈एक्स1,...,एक्सn〉 = एक्सi अगर 1 ≤ मैं ≤ एन
              = ⊥ अन्यथा

कार्यात्मक

आदिम कार्यों के विपरीत, कार्यात्मक अन्य कार्यों पर काम करते हैं। उदाहरण के लिए, कुछ कार्यों का एक इकाई मान होता है, जैसे 0 जोड़ के लिए और 1 गुणन के लिए। कार्यात्मक 'यूनिट' एक 'फ़ंक्शन f' पर लागू होने पर ऐसा 'मान' उत्पन्न करता है जिसमें एक है:

'यूनिट +' = 0
'यूनिट ×' = 1
'यूनिट फू' ​​= ⊥

ये एफपी के मुख्य कार्य हैं:

'रचना' 'f'∘'g' कहा पे 'f'∘'g':'x' = 'f':('g':'x')
'निर्माण' ['च'1,...,एफn] जहां [एफ1,...,एफn]: एक्स = [एफ1: एक्स,..., एफn:एक्स>
स्थिति (एच ⇒ एफ; जी) जहां (एच ⇒ एफ; जी): एक्स = एफ: एक्स अगर एच: एक्स = टी
                                             = जी: एक्स अगर एच: एक्स = एफ
                                             = ⊥ अन्यथा
अप्लाई-टू-ऑल αf जहां αf:〈x1,...,एक्सn〉 = 〈एफ: एक्स1,...,च:xn
इन्सर्ट-राइट / f जहां / f:〈x〉 = x
                       और / च:〈एक्स1,एक्स2,...,एक्सn〉 = एफ:〈एक्स1,/च:〈एक्स2,...,एक्सn〉〉
                       और / च:〈〉 = इकाई च
इन्सर्ट-लेफ्ट \f जहां \f:〈x〉 = x
                      और \f:〈x1,एक्स2,...,एक्सn〉 = f:〈\f:〈x1,...,एक्सn-1>,एक्सn〉
                      और \f:〈〉 = इकाई च

समान कार्य

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

च ≡ 

जहां Ef एक एक्सप्रेशन (कंप्यूटर साइंस) है, जो प्रिमिटिव्स, अन्य परिभाषित फंक्शन्स, और फंक्शन सिंबल f से ही बनाया गया है, फंक्शंस का इस्तेमाल करते हुए।

एफपी84

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

FP84 के शब्दार्थ कार्यक्रमों के एक अंतर्निहित बीजगणित में सन्निहित हैं, फ़ंक्शन-स्तरीय प्रोग्रामिंग का एक सेट | फ़ंक्शन-स्तरीय समानताएं जिनका उपयोग कार्यक्रमों में हेरफेर करने और तर्क करने के लिए किया जा सकता है।

संदर्भ

  1. The Conception, Evolution, and Application of Functional Programming Languages Archived 2016-03-11 at the Wayback Machine Paul Hudak, 1989
  2. 2.0 2.1 2.2 Backus, J. (1978). "Can programming be liberated from the von Neumann style?: A functional style and its algebra of programs". Communications of the ACM. 21 (8): 613. doi:10.1145/359576.359579.
  3. "Association for Computing Machinery A. M. Turing Award" (PDF).
  4. Yang, Jean (2017). "Interview with Simon Peyton-Jones". People of Programming Languages.
  5. Hague, James (December 28, 2007). "Functional Programming Archaeology". Programming in the Twenty-First Century.
  • Sacrificing simplicity for convenience: Where do you draw the line?, John H. Williams and Edward L. Wimmers, IBM Almaden Research Center, Proceedings of the FIfteenth Annual ACM SIGACT-SIGPLAN Symposium on Principles of Programming Languages, San Diego, CA, January 1988.


बाहरी संबंध