Jump to content

ഫങ്ഷണൽ പ്രോഗ്രാമിംഗ്

വിക്കിപീഡിയ, ഒരു സ്വതന്ത്ര വിജ്ഞാനകോശം.
(Functional programming എന്ന താളിൽ നിന്നും തിരിച്ചുവിട്ടതു പ്രകാരം)

കമ്പ്യൂട്ടർ ശാസ്ത്രത്തിൽ, ഫങ്ഷണൽ പ്രോഗ്രാമിംഗ് (functional programming) എന്നത് ഒരു പ്രോഗ്രാമിങ് മാതൃകയാണ് - ഫംഗ്‌ഷനുകൾ പ്രയോഗിച്ചും കംമ്പോസ് ചെയ്തുമാണ് പ്രോഗ്രാമുകൾ നിർമ്മിക്കുന്നത്. ഇത് ഒരു ഡിക്ലറേറ്റീവ് പ്രോഗ്രാമിംഗ് മാതൃകയാണ്, അതിൽ ഫംഗ്‌ഷൻ നിർവചനങ്ങൾ പ്രോഗ്രാമിന്റെ പ്രവർത്തന നില അപ്‌ഡേറ്റ് ചെയ്യുന്ന ഇമ്പറേറ്റീവ് സ്റ്റേറ്റ്മെന്റുകളുടെ ഒരു ശ്രേണിയെക്കാൾ മൂല്യങ്ങളെ മറ്റ് മൂല്യങ്ങളിലേക്ക് മാപ്പ് ചെയ്യുന്ന എക്സ്പ്രഷൻസ് ട്രീകളാണ്. [1]

ഫങ്ഷണൽ പ്രോഗ്രാമിംഗിൽ, ഫംഗ്‌ഷനുകൾ ഫസ്റ്റ്-ക്ലാസ് സിറ്റിസൺസായി കണക്കാക്കപ്പെടുന്നു, അതായത്, മറ്റേതൊരു ഡാറ്റാ ടൈപ്പിനും കഴിയുന്നതുപോലെ, അവയ്ക്ക് പേരുകൾ (ലോക്കൽ ഐഡന്റിഫയറുകൾ ഉൾപ്പെടെ), ആർഗ്യുമെന്റുകളായി പാസ് ചെയ്യാനും മാത്രമല്ല മറ്റ് ഫംഗ്ഷനുകളിൽ നിന്ന് റിട്ടേൺ ചെയ്യാനും കഴിയും. ചെറിയ ഫംഗ്ഷനുകൾ മോഡുലാർ രീതിയിൽ സംയോജിപ്പിച്ച്, ഡിക്ലറേറ്റീവ്, കമ്പോസബിൾ ശൈലിയിൽ പ്രോഗ്രാമുകൾ എഴുതാൻ ഇത് അനുവദിക്കുന്നു.

ഫങ്ഷണൽ പ്രോഗ്രാമിംഗ് ചിലപ്പോൾ പൂർണ്ണമായും ഫങ്ഷണൽ പ്രോഗ്രാമിംഗിന്റെ പര്യായമായി കണക്കാക്കപ്പെടുന്നു, ഇത് ഫങ്ഷണൽ പ്രോഗ്രാമിംഗിന്റെ ഒരു ഉപവിഭാഗമാണ്, അത് എല്ലാ പ്രവർത്തനങ്ങളെയും ഡിറ്റർമിനിസ്റ്റിക് മാത്തമാറ്റിക്കൽ ഫംഗ്ഷനുകളായി അല്ലെങ്കിൽ പ്യൂവർ ഫംഗ്ഷനുകളായി കണക്കാക്കുന്നു. നൽകിയിരിക്കുന്ന ചില ആർഗ്യുമെന്റുകൾ ഉപയോഗിച്ച് ഒരു പ്യുവർ ഫംഗ്‌ഷൻ വിളിക്കുമ്പോൾ, അത് എല്ലായ്‌പ്പോഴും അതേ റിസൾട്ട് തന്നെ നൽകും, വാല്യൂ മാറ്റാവുന്ന അവസ്ഥയോ മറ്റ് പാർശ്വഫലങ്ങളോ ഇതിനെ ബാധിക്കില്ല. ഇംമ്പറേറ്റീവ് പ്രോഗ്രാമിംഗിൽ പൊതുവായുള്ള ഇംപ്യൂവർ പ്രൊസീജറിൽ നിന്ന് വ്യത്യസ്തമാണ്, അത് പാർശ്വഫലങ്ങൾ ഉണ്ടാക്കാം (പ്രോഗ്രാമിന്റെ സ്റ്റേറ്റ് പരിഷ്ക്കരിക്കുക അല്ലെങ്കിൽ ഒരു ഉപയോക്താവിൽ നിന്ന് ഇൻപുട്ട് എടുക്കുക മുതലയാവ). പ്യൂവറിലി ഫങ്ഷണൽ പ്രോഗ്രാമിംഗിന്റെ വക്താക്കൾ അവകാശപ്പെടുന്നത്, പാർശ്വഫലങ്ങൾ(side effects) പരിമിതപ്പെടുത്തുന്നതിലൂടെ, പ്രോഗ്രാമുകൾക്ക് കുറച്ച് ബഗുകൾ മാത്രമേ ഉണ്ടാകൂ, ഡീബഗ് ചെയ്യാനും പരിശോധിക്കാനും എളുപ്പമായിരിക്കും, ഫോർമൽ വേരിഫിക്കേഷന് കൂടുതൽ അനുയോജ്യമാകും.[2][3]

ഫംഗ്‌ഷണൽ പ്രോഗ്രാമിംഗിന്റെ റൂട്ട് അക്കഡീമിയിൽ (academia) ഉണ്ട്, ഇത് ഫംഗ്‌ഷനുകളെ മാത്രം അടിസ്ഥാനമാക്കിയുള്ള ഒഫീഷ്യൽ കമ്പ്യൂട്ടേഷൻ സംവിധാനമായ ലാംഡ കാൽക്കുലസിൽ നിന്ന് വികസിച്ചതാണ്. ഫങ്ഷണൽ പ്രോഗ്രാമിംഗ് ചരിത്രപരമായി ഇംപറേറ്റീവ് പ്രോഗ്രാമിംഗിനെ അപേക്ഷിച്ച് ജനപ്രീതി ആർജ്ജിച്ച ഒന്നല്ല, എന്നാൽ പല ഫംഗ്ഷണൽ ഭാഷകളും ഇന്ന് വ്യവസായപരമായും, വിദ്യാഭ്യാസപരമായും ഉപയോഗിക്കുന്നു. എന്നിരുന്നാലും, പ്രധാന പ്രോഗ്രാമിംഗ് ഭാഷകളായ കോമൺ ലിസ്പ്, സ്കീം[4][5][6][7]പോലുള്ള ഫങ്ഷണൽ പ്രോഗ്രാമിംഗിനെ ഇത് പിന്തുണയ്ക്കുന്നു, ക്ലോജർ, വൂൾഫ്രം ലാങ്വേജ്, [8] (മാത്തമാറ്റിക്ക എന്നും അറിയപ്പെടുന്നു), റാക്കറ്റ്, എർലാങ്, ഒകാമൽ (OCAML)[9][10], ഹാസ്കൽ[11][12], എഫ്# [13][14]ഈ ഭാഷകൾ എല്ലാം വൈവിധ്യമാർന്ന നിരവധി സംഘടനകൾ വ്യാവസായിക ആവശ്യങ്ങളക്കായി ഉപയോഗിക്കുന്നു. [15][16]ആർ(R)[17][18] (സ്ഥിതിവിവരക്കണക്കുകൾ) പോലുള്ള, വെബിലുപയോഗിക്കുന്ന ജാവാസ്ക്രിപ്റ്റ് (JavaScript)[19] പോലെയുള്ള നിർദ്ദിഷ്‌ട ഡൊമെയ്‌നുകളിൽ വിജയം കണ്ടെത്തിയ ചില ഭാഷകൾക്കും ഫങ്ഷണൽ പ്രോഗ്രാമിംഗ് പ്രധാനമാണ്, ജെ, കെ, എക്സ്ക്വറി / എക്സ്എൽടി(XQuery / XSLT) (എക്സ്എംഎൽ)[20][21], ഓപാൽ മുതലയാവ. എസ്ക്യൂഎൽ, ലെക്സ്/യാക്(SQL, Lex / Yacc) പോലുള്ള വ്യാപകമായ ഡൊമെയ്ൻ-സ്പെസിഫിക് സ്റ്റേറ്റ്മെന്റ് ഭാഷകൾ ഫങ്ഷണൽ പ്രോഗ്രാമിങ്ങിന്റെ ചില ഘടകങ്ങൾ ഉപയോഗിക്കുന്നു, പ്രത്യേകിച്ച് മ്യൂട്ടബിൾ മൂല്യങ്ങൾ ഒഴിവാക്കുന്നതിൽ[22]. കൂടാതെ, മറ്റ് പല പ്രോഗ്രാമിംഗ് ഭാഷകളും ഒരു ഫങ്ഷണൽ ശൈലിയിലുള്ള പ്രോഗ്രാമിംഗിനെ പിന്തുണയ്ക്കുന്നു അല്ലെങ്കിൽ ഫങ്ഷണൽ പ്രോഗ്രാമിംഗിൽ നിന്നുള്ള ഫീച്ചറുകൾ നടപ്പിലാക്കിയിട്ടുണ്ട്. [23][24]സി++11,സി#[25], കോട്ലിൻ[26],പേൾ[27],പിഎച്ച്പി[28],പൈത്തൺ[29],ഗോ[30],റസ്റ്റ്[31], റാക്കു[32] ,സ്കാല[33], ജാവ (ജാവ 8 മുതൽ)[34].

ചരിത്രം

[തിരുത്തുക]

1930-കളിൽ അലോൺസോ ചർച്ച് വികസിപ്പിച്ചെടുത്ത ലാംഡ കാൽക്കുലസ്, ഫംഗ്ഷൻ ആപ്ലിക്കേഷനിൽ നിന്ന് നിർമ്മിച്ച ഒരു ഔപചാരികമായ കണക്കുകൂട്ടൽ സംവിധാനമാണ്. 1937-ൽ അലൻ ട്യൂറിംഗ്, ലാംഡ കാൽക്കുലസ്, ട്യൂറിംഗ് മെഷീനുകൾ എന്നിവ കമ്പ്യൂട്ടേഷന്റെ തുല്യ മാതൃകകളാണെന്ന് തെളിയിച്ചു,[[35]ലാംഡ കാൽക്കുലസ് ട്യൂറിംഗ് കംപ്ലീറ്റാണെന്ന് കാണിക്കുന്നു. എല്ലാ ഫംഗ്ഷണൽ പ്രോഗ്രാമിംഗ് ഭാഷകളുടെയും അടിസ്ഥാനം ലാംഡ കാൽക്കുലസ് ആണ്. 1920 കളിലും 1930 കളിലും മോസസ് ഷോൺഫിങ്കലും ഹാസ്‌കെൽ കറിയും ചേർന്ന് തീയറ്റിക്കൽ ഫോർമുലേഷൻ, കോമ്പിനേറ്ററി ലോജിക് എന്നിവ വികസിപ്പിച്ചെടുത്തു.[36]

ചർച്ച് പിന്നീട് ഒരു വീക്കർ സിസ്റ്റം വികസിപ്പിച്ചെടുത്തു, സിമ്പ്ലി ടൈപ്പ്ഡ് ലാംഡ കാൽക്കുലസ്, എല്ലാ പദങ്ങൾക്കും വേണ്ടി ഒരു ടൈപ്പ് നൽകി ലാംഡ കാൽക്കുലസ് വിപുലീകരിച്ചു.[37]ഇത് സ്റ്റാറ്റിക്കലി-ടൈപ്പ്ഡ് ഫംഗ്ഷണൽ പ്രോഗ്രാമിംഗിന്റെ അടിസ്ഥാനമാണ്.

ആദ്യത്തെ ഹൈ-ലെവൽ ഫങ്ഷണൽ പ്രോഗ്രാമിംഗ് ഭാഷയാണ്, ലിസ്പ് 1950 കളുടെ അവസാനത്തിൽ ഐ.ബി.എം. 700/7000 സീരീസ് ശാസ്ത്ര കമ്പ്യൂട്ടറുകൾക്കു വേണ്ടി ജോൺ മക്കാർത്തി, മസാച്ചുസെറ്റ്സ് ഇൻസ്റ്റിറ്റ്യൂട്ട് ഓഫ് ടെക്നോളജി (എം.ഐ.ടി) വികസിപ്പിച്ചെടുത്തു.[38]ലിസ്പ് ഫംഗ്‌ഷനുകൾ നിർവചിച്ചത് ചർച്ചിന്റെ ലാംഡ നൊട്ടേഷൻ ഉപയോഗിച്ചാണ്, റിക്രർസ്സീവ് ഫങ്ഷനുകൾ അനുവദിക്കുന്നതിനായി ഒരു ലേബൽ നിർമ്മിതി ഉപയോഗിച്ച് വിപുലീകരിച്ചു.[39] ഫങ്ഷണൽ പ്രോഗ്രാമിംഗിന്റെ പല മാതൃകാപരമായ സവിശേഷതകളും ലിസ്‌പ് ആദ്യമായി അവതരിപ്പിച്ചു, ആദ്യകാല ലിസ്‌പ്‌സ് മൾട്ടി-പാരഡൈം ഭാഷകളായിരുന്നുവെങ്കിലും പുതിയ മാതൃകകൾ വികസിപ്പിച്ചപ്പോൾ, നിരവധി പ്രോഗ്രാമിംഗ് ശൈലികൾക്കുള്ള പിന്തുണ കൂടി ഉൾപ്പെടുത്തി.

അവലംബം

[തിരുത്തുക]
  1. "Declaration vs. expression style - HaskellWiki".
  2. Hudak, Paul (September 1989). "Conception, evolution, and application of functional programming languages" (PDF). ACM Computing Surveys. 21 (3): 359–411. doi:10.1145/72551.72554. S2CID 207637854. Archived from the original (PDF) on 2016-01-31. Retrieved 2023-03-12.
  3. Hughes, John (1984). "Why Functional Programming Matters".
  4. Clinger, Will (1987). "MultiTasking and MacScheme". MacTech. 3 (12). Retrieved 2008-08-28.
  5. Hartheimer, Anne (1987). "Programming a Text Editor in MacScheme+Toolsmith". MacTech. 3 (1). Archived from the original on 2011-06-29. Retrieved 2008-08-28.
  6. Kidd, Eric. Terrorism Response Training in Scheme. CUFP 2007. Archived from the original on 2010-12-21. Retrieved 2009-08-26.
  7. Cleis, Richard. Scheme in Space. CUFP 2006. Archived from the original on 2010-05-27. Retrieved 2009-08-26.
  8. "Wolfram Language Guide: Functional Programming". 2015. Retrieved 2015-08-24.
  9. Minsky, Yaron; Weeks, Stephen (July 2008). "Caml Trading — experiences with functional programming on Wall Street". Journal of Functional Programming. 18 (4): 553–564. doi:10.1017/S095679680800676X. S2CID 30955392. Retrieved 2008-08-27.
  10. Leroy, Xavier. Some uses of Caml in Industry (PDF). CUFP 2007. Archived from the original (PDF) on 2011-10-08. Retrieved 2009-08-26.
  11. "Haskell in industry". Haskell Wiki. Retrieved 2009-08-26. Haskell has a diverse range of use commercially, from aerospace and defense, to finance, to web startups, hardware design firms and lawnmower manufacturers.
  12. Hudak, Paul; Hughes, J.; Jones, S. P.; Wadler, P. (June 2007). A history of Haskell: being lazy with class. Third ACM SIGPLAN Conference on History of Programming Languages. San Diego, California. doi:10.1145/1238844.1238856. Retrieved 2013-09-26.
  13. Mansell, Howard (2008). Quantitative Finance in F#. CUFP 2008. Archived from the original on 2015-07-08. Retrieved 2009-08-29.
  14. Peake, Alex (2009). The First Substantial Line of Business Application in F#. CUFP 2009. Archived from the original on 2009-10-17. Retrieved 2009-08-29.
  15. "The 15 most popular computer languages, according to the Facebook for programmers". 2016. Retrieved 2017-07-31.
  16. "JavaScript is the World's Dominant Programming Language". 2016. Retrieved 2017-07-31.
  17. "The useR! 2006 conference schedule includes papers on the commercial use of R". R-project.org. 2006-06-08. Retrieved 2011-06-20.
  18. Chambers, John M. (1998). Programming with Data: A Guide to the S Language. Springer Verlag. pp. 67–70. ISBN 978-0-387-98503-9.
  19. comments, 27 Jun 2017 Matt Banz Feed 603up 2. "An introduction to functional programming in JavaScript". Opensource.com (in ഇംഗ്ലീഷ്). Retrieved 2021-01-09.{{cite web}}: CS1 maint: numeric names: authors list (link)
  20. Novatchev, Dimitre. "The Functional Programming Language XSLT — A proof through examples". Retrieved May 27, 2006.
  21. Mertz, David. "XML Programming Paradigms (part four): Functional Programming approached to XML processing". IBM developerWorks. Retrieved May 27, 2006.
  22. Chamberlin, Donald D.; Boyce, Raymond F. (1974). "SEQUEL: A structured English query language". Proceedings of the 1974 ACM SIGFIDET: 249–264.
  23. Dominus, Mark J. (2005). Higher-Order Perl. Morgan Kaufmann. ISBN 978-1-55860-701-9.
  24. Holywell, Simon (2014). Functional Programming in PHP. php[architect]. ISBN 9781940111056.
  25. Functional Programming with C# - Simon Painter - NDC Oslo 2020 (in ഇംഗ്ലീഷ്), archived from the original on 2021-10-30, retrieved 2021-10-23
  26. "Functional programming - Kotlin Programming Language". Kotlin. Retrieved 2019-05-01.
  27. Dominus, Mark J. (2005). Higher-Order Perl. Morgan Kaufmann. ISBN 978-1-55860-701-9.
  28. Holywell, Simon (2014). Functional Programming in PHP. php[architect]. ISBN 9781940111056.
  29. The Cain Gang Ltd. "Python Metaclasses: Who? Why? When?" (PDF). Archived from the original (PDF) on 30 മേയ് 2009. Retrieved 27 ജൂൺ 2009.
  30. "GopherCon 2020: Dylan Meeus - Functional Programming with Go". YouTube.com.{{cite web}}: CS1 maint: url-status (link)
  31. "Functional Language Features: Iterators and Closures - The Rust Programming Language". doc.rust-lang.org. Retrieved 2021-01-09.
  32. Vanderbauwhede, Wim. "Cleaner code with functional programming". Archived from the original on 11 Sep 2020. Retrieved 6 October 2020. {{cite web}}: |archive-date= / |archive-url= timestamp mismatch; 28 ജൂലൈ 2020 suggested (help)
  33. "Effective Scala". Scala Wiki. Archived from the original on 2012-06-19. Retrieved 2012-02-21. Effective Scala.
  34. "Documentation for package java.util.function since Java 8 (also known as Java 1.8)". Retrieved 2021-06-16.
  35. Turing, A. M. (1937). "Computability and λ-definability". The Journal of Symbolic Logic. 2 (4). Cambridge University Press: 153–163. doi:10.2307/2268280. JSTOR 2268280. S2CID 2317046.
  36. Haskell Brooks Curry; Robert Feys (1958). Combinatory Logic. North-Holland Publishing Company. Retrieved 10 February 2013.
  37. Church, A. (1940). "A Formulation of the Simple Theory of Types". Journal of Symbolic Logic. 5 (2): 56–68. doi:10.2307/2266170. JSTOR 2266170. S2CID 15889861.
  38. McCarthy, John (June 1978). "History of Lisp". In ACM/SIGPLAN History of Programming Languages Conference: 217–223. doi:10.1145/800025.808387. Archived from the original on 2008-06-07. Retrieved 2019-03-06.
  39. John McCarthy (1960). "Recursive functions of symbolic expressions and their computation by machine, Part I." (PDF). Communications of the ACM. 3 (4). ACM New York, NY, USA: 184–195. doi:10.1145/367177.367199. S2CID 1489409.
"https://ml.wikipedia.org/w/index.php?title=ഫങ്ഷണൽ_പ്രോഗ്രാമിംഗ്&oldid=3999364" എന്ന താളിൽനിന്ന് ശേഖരിച്ചത്