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

വിക്കിപീഡിയ, ഒരു സ്വതന്ത്ര വിജ്ഞാനകോശം.
Jump to navigation Jump to search

കമ്പ്യൂട്ടർ ശാസ്ത്രത്തിൽ, ഫങ്ഷണൽ പ്രോഗ്രാമിംഗ് (functional programming)എന്നത് ഒരു പ്രോഗ്രാമിങ് മാതൃകയാണ് - കമ്പ്യൂട്ടർ പ്രോഗ്രാമുകളുടെ ഘടനയും ഘടകങ്ങളും കെട്ടിപ്പടുക്കുന്ന ഒരു ശൈലി. ഇത് ഗണിതശാസ്ത്ര മൂല്യങ്ങളുടെ മൂല്യനിർണ്ണയം എന്ന നിലയിൽ കണക്കുകൂട്ടൽ കണക്കാക്കുകയും മാറ്റം വരുത്തൽ, മാറ്റാവുന്ന ഡാറ്റ ഒഴിവാക്കുകയും ചെയ്യുന്നു. കമ്പ്യൂട്ടർ പ്രോഗ്രാമുകളുടെ ഘടനയും ഘടകങ്ങളും നിർമ്മിക്കാനുള്ള ഒരു ശൈലി അത് കണക്കുകൂട്ടൽ, ഗണിതശാസ്ത്ര മൂല്യങ്ങൾ എന്നിവയുടെ വിലയിരുത്തലായി കണക്കാക്കുന്നു. ഒരു പ്രസ്താവനയുള്ള പ്രോഗ്രാമിങ് മാതൃകയാണ്, പ്രോഗ്രാമുകൾ പ്രസ്താവനയ്ക്ക് പകരം എക്സ്പ്രഷൻ അല്ലെങ്കിൽ ഡിക്ലറേഷൻ[1] ഉപയോഗിച്ച് പ്രവർത്തിക്കുന്നു എന്നാണ്. ഫങ്ഷണൽ കോഡ് ഐഡിംപോട്ടന്റ്(idempotent) ആണ്, ഒരു ഫങ്ഷന്റെ ഔട്ട്പുട്ട് മൂല്യം ഫംഗ്ഷനിലേക്ക് പാസാകുന്ന ആർഗ്യുമെന്റുകളിൽ മാത്രമാണ്, അതിനാൽ ഒരു ഫങ്ഷൻ f അതേ മൂല്യത്തോട് കൂടി രണ്ട് വട്ടം വിളിക്കുന്നു ഒരു ആർഗുമെന്റ് x ഓരോ തവണയും ഒരേ ഫലം f (x) നൽകുന്നു. ഇത് ഈ നടപടിക്രമങ്ങളിൽ വ്യത്യസ്തമാണ് ലോക്കൽ അല്ലെങ്കിൽ ഗ്ലോബൽ സ്റ്റേറ്റിനെ ആശ്രയിച്ചിരിക്കുന്നു, ഒരേ വാദഗതികൾക്കൊപ്പം മറ്റൊരു പ്രോഗ്രാം സ്റ്റേറ്റ്മെന്റിനെ വിളിക്കുമ്പോൾ വ്യത്യസ്ത സമയങ്ങളിൽ വ്യത്യസ്ത ഫലങ്ങൾ ഉണ്ടാകാം. പാർശ്വഫലങ്ങൾ നീക്കംചെയ്യൽ, അതായത്, ഫംഗ്ഷൻ ഇൻപുട്ടുകൾക്ക് അനുസൃതമല്ലാത്ത അവസ്ഥയിലുള്ള മാറ്റങ്ങൾ, ഒരു പ്രോഗ്രാമിന്റെ പെരുമാറ്റം മനസിലാക്കാനും പ്രവചിക്കാനും വളരെ എളുപ്പം കഴിയും, ഇത് ഫങ്ഷണൽ പ്രോഗ്രാമിങ്ങ് വികസനത്തിന്റെ പ്രധാന ഉദ്ദേശ്യങ്ങളിലൊന്നാണ്.

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

ഇതിൽ നിന്നും വ്യത്യസ്തമായി, ഇംപെറേറ്റീവ് പ്രോഗ്രാമിങ് സോഴ്സ് കോഡിൽ കമാൻഡുകൾ ഉള്ള അവസ്ഥ മാറുന്നു, ലളിതമായ മാതൃക അസൈൻമെന്റ് ആയിരിക്കും. ഇംപെറേറ്റീവ് പ്രോഗ്രാമിങ്ങിൽ സബ്റൂട്ടൈൻ ഫങ്ഷനുകൾ ഉണ്ട്, എന്നാൽ ഇവ ഗണിതശാസ്ത്രപരമായ അർത്ഥത്തിൽ പ്രവർത്തിക്കുന്നില്ല. പ്രോഗ്രാം അവസ്ഥാ മൂല്യം മാറിയേക്കാം, പാർശ്വഫലങ്ങൾ ഉണ്ടാകും. തിരിച്ചുള്ള മൂല്യങ്ങളില്ലാത്ത പ്രവർത്തനങ്ങൾ അർത്ഥപൂർണ്ണമാണ്. ഇക്കാരണങ്ങളാൽ അവയ്ക്ക് റഫറൻഷ്യൽ സുതാര്യതയില്ല. അതായത്, ഒരേ ഭാഷാ ആവിഷ്‌കരണം വ്യത്യസ്ത സമയങ്ങളിൽ വ്യത്യസ്ത മൂല്യങ്ങൾ നടപ്പാക്കാൻ കഴിയും.

വാണിജ്യപരമായ സോഫ്റ്റ്വെയർ ഡെവലപ്പ്മെന്റിനെ അപേക്ഷിച്ച് ഫങ്ഷണൽ പ്രോഗ്രാമിങ് ഭാഷകൾ അക്കാഡമിയയിൽ പ്രാധാന്യമർഹിക്കുന്നതാണ്. എന്നിരുന്നാലും, പ്രധാന പ്രോഗ്രാമിംഗ് ഭാഷകളായ കോമൺ ലിസ്പ്, സ്കീം പോലുള്ള ഫങ്ഷണൽ പ്രോഗ്രാമിംഗിനെ ഇത് പിന്തുണയ്ക്കുന്നു, ക്ലോജർ, വൂൾഫ്രം ഭാഷ [2] (മാത്തമാറ്റിക്ക എന്നും അറിയപ്പെടുന്നു), റാക്കറ്റ്, എർലാങ്, ഒകാമൽ(OCAML), ഹാസ്കൽ, എഫ്# [3]ഈ ഭാഷകൾ എല്ലാം വൈവിധ്യമാർന്ന നിരവധി സംഘടനകൾ വ്യാവസായിക വാണിജ്യപരമായ ഉപയോഗങ്ങൾക്കായി ഉപയോഗിക്കുന്നു. ലോകത്തിലെ ഏറ്റവും വ്യാപകമായി വിതരണം ചെയ്യപ്പെടുന്ന ഭാഷകളിലൊന്നായ ജാവാസ്ക്രിപ്റ്റ് (JavaScript), ചലനാത്മകവും ഒബ്ജക്റ്റ് ഓറിയെന്റഡ് പാരാഡിഗങ്ങളും കൂടാതെ, ചലനാത്മകമായി ടൈപ്പ് ചെയ്യുന്നതും ഫങ്ഷണൽ ഭാഷയുടെ സ്വഭാവ സവിശേഷതകളാണ്.[4][5]ആർ(R) (സ്ഥിതിവിവരക്കണക്കുകൾ) പോലുള്ള പ്രത്യേക ഡൊമെയ്നുകളിൽ വിജയം കണ്ടെത്തിയ ചില ഭാഷകളിലേക്കും പ്രവർത്തിക്കുന്നതും പ്രധാനമാണ്, കെസി സിസ്റ്റംസ് (സാമ്പത്തിക വിശകലനം)നിന്ന് ജെ, കെ, എക്സ്ക്വറി / എക്സ്എൽടി(XQuery / XSLT) (എക്സ്എംഎൽ), ഓപാൽ മുതലയാവ. എസ്ക്യൂഎൽ, ലെക്സ്/യാക്(SQL, Lex / Yacc) പോലുള്ള വ്യാപകമായ ഡൊമെയ്ൻ-നിർദ്ദിഷ്ട പ്രസ്താവന ഭാഷകൾ പ്രവർത്തന പ്രോഗ്രാമിങ്ങിന്റെ ചില ഘടകങ്ങൾ ഉപയോഗിക്കുന്നു, പ്രത്യേകിച്ച് മ്യൂട്ടബിൾ മൂല്യങ്ങൾ ഒഴിവാക്കുന്നതിൽ.

പ്രോഗ്രാമിംഗ് ഫങ്ഷണൽ ശൈലി കൊണ്ടുവരാൻ ഫങ്ഷണൽ പ്രോഗ്രാമിങ്ങിനായി പ്രത്യേകം രൂപകൽപ്പന ചെയ്തിട്ടില്ലാത്ത ഭാഷകളിൽ പോലും സാധ്യമാണ്. ഉദാഹരണമായി, ഫങ്ഷണൽ പ്രോഗ്രാമിങ് ആശയങ്ങൾ എങ്ങനെ പ്രയോഗിക്കണമെന്ന് വിശദീകരിക്കുന്ന ഒരു പുസ്തകത്തിന്റെ വിഷയം ആപേക്ഷികമായ പേൾ പ്രോഗ്രാമിങ് ഭാഷയാണ്.[6]പി.എച്ച്.പി. പ്രോഗ്രാമിങ് ഭാഷയുടെ കാര്യത്തിലും ഇത് സത്യമാണ്.[7]സി ++ 11, ജാവ 8, സി # 3.0 എന്നിവയിൽ ഫങ്ഷണൽ സ്റ്റൈൽ സുഗമമാക്കുന്നതിന് എല്ലാം ചേർത്ത നിർമ്മിതികളും ഉൾപ്പെടുന്നു. ജൂലിയ ഭാഷയിൽ ഫങ്ഷണൽ പ്രോഗ്രാമിംഗ് കഴിവുകൾ ലഭ്യമാക്കുന്നു. സ്കാലയിൽ രസകരമായ സംഗതിയുള്ളത്-ഇത് പലപ്പോഴും ഒരു ഫങ്ഷണൽ ശൈലിയിലാണ് എഴുതപ്പെടുന്നത്, എന്നാൽ പാർശ്വഫലങ്ങളുടെ(side effects) സാന്നിദ്ധ്യം, മാറ്റാവുന്ന സ്ഥലവും, അത് ഇംപെറേറ്റീവ്, ഫങ്ഷണൽ ഭാഷകളുടെ ഇടയിൽ ഗ്രേ ഏരിയ എന്നാണ് അറിയപ്പെടുന്നത്.

ചരിത്രം[തിരുത്തുക]

പ്രവർത്തനങ്ങളെ വിശദീകരിക്കുന്നതിനും അവയുടെ മൂല്യനിർണ്ണയത്തിനും ഉള്ള ഒരു സൈദ്ധാന്തിക ചട്ടക്കൂടാണ് ലാംബഡ കാൽക്കുലസ്. ഒരു പ്രോഗ്രാമിങ് ഭാഷയേക്കാൾ ഉപരി ഒരു ഗണിതപരമായ അമൂർത്തമാണ്(abstraction) ഇത്-എന്നാൽ നിലവിലുള്ള എല്ലാ പ്രവർത്തന പ്രോഗ്രാമിങ് ഭാഷകളുടെയും അടിസ്ഥാനം ഇതാണ്. സമാനമായ സൈദ്ധാന്തികമായ രൂപീകരണവും, സംയോജിത യുക്തിയും, ലാംഡ കാൽകുലസിനെ അപേക്ഷിച്ച് കൂടുതൽ അമൂർത്തമാണ്. സങ്കലനശാസ്ത്ര യുക്തിയും ലാംഡ കാൽകുലസും ആദ്യം ഗണിതത്തിന്റെ അടിത്തറകൾക്ക് ഒരു വ്യക്തമായ സമീപനം നേടിക്കൊടുത്തു. [8]

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

അവലംബം[തിരുത്തുക]

  1. "Declaration vs. expression style - HaskellWiki".
  2. "Wolfram Language Guide: Functional Programming". 2015. ശേഖരിച്ചത് 2015-08-24.
  3. Mansell, Howard (2008). Quantitative Finance in F#. CUFP 2008. ശേഖരിച്ചത് 2009-08-29.
  4. "The 15 most popular computer languages, according to the Facebook for programmers". 2016. ശേഖരിച്ചത് 2017-07-31.
  5. "JavaScript is the World's Dominant Programming Language". 2016. ശേഖരിച്ചത് 2017-07-31.
  6. Dominus, Mark J. (2005). Higher-Order Perl. Morgan Kaufmann. ISBN 978-1-55860-701-9.
  7. Holywell, Simon (2014). Functional Programming in PHP. php[architect]. ISBN 9781940111056.
  8. Haskell Brooks Curry; Robert Feys (1958). Combinatory Logic. North-Holland Publishing Company. ശേഖരിച്ചത് 10 February 2013.
  9. McCarthy, John (June 1978). "History of Lisp". In ACM/SIGPLAN History of Programming Languages Conference: 217–223. doi:10.1145/800025.808387.
"https://ml.wikipedia.org/w/index.php?title=ഫങ്ഷണൽ_പ്രോഗ്രാമിംഗ്&oldid=3127626" എന്ന താളിൽനിന്ന് ശേഖരിച്ചത്