"ഫങ്ഷണൽ പ്രോഗ്രാമിംഗ്" എന്ന താളിന്റെ പതിപ്പുകൾ തമ്മിലുള്ള വ്യത്യാസം

(ചെ.) യന്ത്രം: അക്ഷരപിശകുകൾ ശരിയാക്കുന്നു
വരി 1:
{{prettyurl|functional programming}}
കമ്പ്യൂട്ടർ ശാസ്ത്രത്തിൽ, '''ഫങ്ഷണൽ പ്രോഗ്രാമിംഗ്''' (functional programming)എന്നത് ഒരു പ്രോഗ്രാമിങ് മാതൃകയാണ് - കമ്പ്യൂട്ടർ പ്രോഗ്രാമുകളുടെ ഘടനയും ഘടകങ്ങളും കെട്ടിപ്പടുക്കുന്ന ഒരു ശൈലി. ഇത് ഗണിതശാസ്ത്ര മൂല്യങ്ങളുടെ മൂല്യനിർണ്ണയം എന്ന നിലയിൽ കണക്കുകൂട്ടൽ കണക്കാക്കുകയും മാറ്റം വരുത്തൽ, മാറ്റാവുന്ന ഡാറ്റ ഒഴിവാക്കുകയും ചെയ്യുന്നു. കമ്പ്യൂട്ടർ പ്രോഗ്രാമുകളുടെ ഘടനയും ഘടകങ്ങളും നിർമ്മിക്കാനുള്ള ഒരു ശൈലി അത് കണക്കുകൂട്ടൽ, ഗണിതശാസ്ത്ര മൂല്യങ്ങൾ എന്നിവയുടെ വിലയിരുത്തലായി കണക്കാക്കുന്നു. ഒരു പ്രസ്താവനയുള്ള പ്രോഗ്രാമിങ് മാതൃകയാണ്, പ്രോഗ്രാമുകൾ പ്രസ്താവനയ്ക്ക് പകരം എക്സ്പ്രഷൻ അല്ലെങ്കിൽ ഡിക്ലറേഷൻ<ref name="expression style">{{cite web|url=https://wiki.haskell.org/Declaration_vs._expression_style#Expression_style|title=Declaration vs. expression style - HaskellWiki|publisher=}}</ref> ഉപയോഗിച്ച് പ്രവർത്തിക്കുന്നു എന്നാണ്. ഫങ്ഷണൽ കോഡ് ഐഡിംപോട്ടന്റ്(idempotent) ആണ്, ഒരു ഫങ്ഷന്റെ ഔട്ട്പുട്ട് മൂല്യം ഫംഗ്ഷനിലേക്ക് പാസാകുന്ന ആർഗ്യുമെന്റുകളിൽ മാത്രമാണ്, അതിനാൽ ഒരു ഫങ്ഷൻ f അതേ മൂല്യത്തോട് കൂടി രണ്ട് വട്ടം വിളിക്കുന്നു ഒരു ആർഗുമെന്റ് x ഓരോ തവണയും ഒരേ ഫലം f (x) നൽകുന്നു. ഇത് ഈ നടപടിക്രമങ്ങളിൽ വ്യത്യസ്തമാണ് ലോക്കൽ അല്ലെങ്കിൽ ഗ്ലോബൽ സ്റ്റേറ്റിനെ ആശ്രയിച്ചിരിക്കുന്നു, ഒരേ വാദഗതികൾക്കൊപ്പം മറ്റൊരു പ്രോഗ്രാം സ്റ്റേറ്റ്മെന്റിനെ വിളിക്കുമ്പോൾ വ്യത്യസ്ത സമയങ്ങളിൽ വ്യത്യസ്ത ഫലങ്ങൾ ഉണ്ടാകാം. പാർശ്വഫലങ്ങൾ നീക്കംചെയ്യൽ, അതായത്, ഫംഗ്ഷൻ ഇൻപുട്ടുകൾക്ക് അനുസൃതമല്ലാത്ത അവസ്ഥയിലുള്ള മാറ്റങ്ങൾ, ഒരു പ്രോഗ്രാമിന്റെ പെരുമാറ്റം മനസിലാക്കാനുംമനസ്സിലാക്കാനും പ്രവചിക്കാനും വളരെ എളുപ്പം കഴിയും, ഇത് ഫങ്ഷണൽ പ്രോഗ്രാമിങ്ങ് വികസനത്തിന്റെ പ്രധാന ഉദ്ദേശ്യങ്ങളിലൊന്നാണ്.
 
പ്രവർത്തന പ്രോഗ്രാമിംഗ് ഭാഷയുടെ ഉൽഭവം ലാംഡ കാൽകുലസിൽ നിന്നാണ്, സൂക്ഷ്മപരിശോധന, ഫങ്ഷൻ ഡെഫനിഷൻ, ഫങ്ഷൻ ആപ്ലിക്കേഷൻ, റിക്കർഷൻ എന്നിവയെക്കുറിച്ച് അന്വേഷിക്കാൻ 1930 കളിൽ വികസിപ്പിച്ച എൻച്ചെഡിംഗ്‌സ് പ്രോബ്ലം (Entscheidungsproblem)എന്ന ഔപചാരിക സിസ്റ്റം വികസിപ്പിച്ചെടുത്തു. നിരവധി പ്രവർത്തന പ്രോഗ്രാമിങ് ഭാഷകൾ ലാംഡ കാൽകുലസിൽ വിപുലീകരിക്കാൻ കഴിയും. പരക്കെ അറിയപ്പെടുന്ന ഡിക്ലറേറ്റീവ് പ്രോഗ്രാമിങ്, ലോജിക്കൽ പ്രോഗ്രാമിങ് എന്നിവ റിലേഷൻസിനെ അടിസ്ഥാനമാക്കിയുള്ളതാണ്.
വരി 6:
ഇതിൽ നിന്നും വ്യത്യസ്തമായി, ഇംപെറേറ്റീവ് പ്രോഗ്രാമിങ് സോഴ്സ് കോഡിൽ കമാൻഡുകൾ ഉള്ള അവസ്ഥ മാറുന്നു, ലളിതമായ മാതൃക അസൈൻമെന്റ് ആയിരിക്കും. ഇംപെറേറ്റീവ് പ്രോഗ്രാമിങ്ങിൽ സബ്റൂട്ടൈൻ ഫങ്ഷനുകൾ ഉണ്ട്, എന്നാൽ ഇവ ഗണിതശാസ്ത്രപരമായ അർത്ഥത്തിൽ പ്രവർത്തിക്കുന്നില്ല. പ്രോഗ്രാം അവസ്ഥാ മൂല്യം മാറിയേക്കാം, പാർശ്വഫലങ്ങൾ ഉണ്ടാകും. തിരിച്ചുള്ള മൂല്യങ്ങളില്ലാത്ത പ്രവർത്തനങ്ങൾ അർത്ഥപൂർണ്ണമാണ്. ഇക്കാരണങ്ങളാൽ അവയ്ക്ക് റഫറൻഷ്യൽ സുതാര്യതയില്ല. അതായത്, ഒരേ ഭാഷാ ആവിഷ്‌കരണം വ്യത്യസ്ത സമയങ്ങളിൽ വ്യത്യസ്ത മൂല്യങ്ങൾ നടപ്പാക്കാൻ കഴിയും.
 
വാണിജ്യപരമായ സോഫ്റ്റ്വെയർസോഫ്റ്റ്‌വേർ ഡെവലപ്പ്മെന്റിനെ അപേക്ഷിച്ച് ഫങ്ഷണൽ പ്രോഗ്രാമിങ് ഭാഷകൾ അക്കാഡമിയയിൽ പ്രാധാന്യമർഹിക്കുന്നതാണ്. എന്നിരുന്നാലും, പ്രധാന പ്രോഗ്രാമിംഗ് ഭാഷകളായ കോമൺ ലിസ്പ്, [[സ്കീം (പ്രോഗ്രാമിങ് ഭാഷ)|സ്കീം]] പോലുള്ള ഫങ്ഷണൽ പ്രോഗ്രാമിംഗിനെ ഇത് പിന്തുണയ്ക്കുന്നു, ക്ലോജർ, വൂൾഫ്രം ഭാഷ <ref name="reference.wolfram.com">{{cite web | title = Wolfram Language Guide: Functional Programming | url = http://reference.wolfram.com/language/guide/FunctionalProgramming.html | year = 2015 | accessdate = 2015-08-24 }}</ref> (മാത്തമാറ്റിക്ക എന്നും അറിയപ്പെടുന്നു), റാക്കറ്റ്, എർലാങ്, ഒകാമൽ(OCAML), [[ഹാസ്കൽ (പ്രോഗ്രാമിങ് ഭാഷ)|ഹാസ്കൽ]], [[എഫ് ഷാർപ്പ് (പ്രോഗ്രാമിങ് ഭാഷ)|എഫ്#]] <ref name='quantFSharp'>{{cite conference | last = Mansell | first = Howard | title = Quantitative Finance in F# | url = http://cufp.galois.com/2008/abstracts.html#MansellHoward | year = 2008 | conference = CUFP 2008 | accessdate = 2009-08-29 }}</ref>ഈ ഭാഷകൾ എല്ലാം വൈവിധ്യമാർന്ന നിരവധി സംഘടനകൾ വ്യാവസായിക വാണിജ്യപരമായ ഉപയോഗങ്ങൾക്കായി ഉപയോഗിക്കുന്നു. ലോകത്തിലെ ഏറ്റവും വ്യാപകമായി വിതരണം ചെയ്യപ്പെടുന്ന ഭാഷകളിലൊന്നായ [[ജാവാസ്ക്രിപ്റ്റ്]] (JavaScript), ചലനാത്മകവും ഒബ്ജക്റ്റ് ഓറിയെന്റഡ് പാരാഡിഗങ്ങളും കൂടാതെ, ചലനാത്മകമായി ടൈപ്പ് ചെയ്യുന്നതും ഫങ്ഷണൽ ഭാഷയുടെ സ്വഭാവ സവിശേഷതകളാണ്.<ref name='mostPopularLanguages'>{{cite web | title = The 15 most popular computer languages, according to the Facebook for programmers | url = http://www.businessinsider.com/github-most-popular-coding-languages-2016-9/ | year = 2016 | accessdate = 2017-07-31}}</ref><ref name='javaScriptWidelyUsed'>{{cite web | title = JavaScript is the World's Dominant Programming Language | url = https://arc.applause.com/2016/03/22/javascript-is-the-worlds-dominant-programming-language/ | year = 2016 | accessdate = 2017-07-31}}</ref>ആർ(R) (സ്ഥിതിവിവരക്കണക്കുകൾ) പോലുള്ള പ്രത്യേക ഡൊമെയ്നുകളിൽ വിജയം കണ്ടെത്തിയ ചില ഭാഷകളിലേക്കും പ്രവർത്തിക്കുന്നതും പ്രധാനമാണ്, കെസി സിസ്റ്റംസ് (സാമ്പത്തിക വിശകലനം)നിന്ന് ജെ, കെ, എക്സ്ക്വറി / എക്സ്എൽടി(XQuery / XSLT) ([[എക്സ്.എം.എൽ.|എക്സ്എംഎൽ]]), ഓപാൽ മുതലയാവ. [[എസ്.ക്യു.എൽ.|എസ്ക്യൂഎൽ]], ലെക്സ്/യാക്(SQL, Lex / Yacc) പോലുള്ള വ്യാപകമായ ഡൊമെയ്ൻ-നിർദ്ദിഷ്ട പ്രസ്താവന ഭാഷകൾ പ്രവർത്തന പ്രോഗ്രാമിങ്ങിന്റെ ചില ഘടകങ്ങൾ ഉപയോഗിക്കുന്നു, പ്രത്യേകിച്ച് മ്യൂട്ടബിൾ മൂല്യങ്ങൾ ഒഴിവാക്കുന്നതിൽ.
 
പ്രോഗ്രാമിംഗ് ഫങ്ഷണൽ ശൈലി കൊണ്ടുവരാൻ ഫങ്ഷണൽ പ്രോഗ്രാമിങ്ങിനായി പ്രത്യേകം രൂപകൽപ്പന ചെയ്തിട്ടില്ലാത്ത ഭാഷകളിൽ പോലും സാധ്യമാണ്. ഉദാഹരണമായി, ഫങ്ഷണൽ പ്രോഗ്രാമിങ് ആശയങ്ങൾ എങ്ങനെ പ്രയോഗിക്കണമെന്ന് വിശദീകരിക്കുന്ന ഒരു പുസ്തകത്തിന്റെ വിഷയം ആപേക്ഷികമായ [[പേൾ]] പ്രോഗ്രാമിങ് ഭാഷയാണ്.<ref>{{cite book | last = Dominus | first = Mark J. | authorlink = Mark Jason Dominus | title = Higher-Order Perl |publisher=[[Morgan Kaufmann]] | year = 2005 |isbn = 978-1-55860-701-9 | title-link = Higher-Order Perl }}</ref>[[പി.എച്ച്.പി.]] പ്രോഗ്രാമിങ് ഭാഷയുടെ കാര്യത്തിലും ഇത് സത്യമാണ്.<ref>{{cite book | last = Holywell | first = Simon | title = Functional Programming in PHP | publisher = php[architect] | year = 2014 | isbn = 9781940111056}}</ref>സി ++ 11, ജാവ 8, സി # 3.0 എന്നിവയിൽ ഫങ്ഷണൽ സ്റ്റൈൽ സുഗമമാക്കുന്നതിന് എല്ലാം ചേർത്ത നിർമ്മിതികളും ഉൾപ്പെടുന്നു. [[ജൂലിയ (പ്രോഗ്രാമിങ് ഭാഷ)|ജൂലിയ]] ഭാഷയിൽ ഫങ്ഷണൽ പ്രോഗ്രാമിംഗ് കഴിവുകൾ ലഭ്യമാക്കുന്നു. [[സ്കാല (പ്രോഗ്രാമിങ് ഭാഷ)|സ്കാലയിൽ]] രസകരമായ സംഗതിയുള്ളത്-ഇത് പലപ്പോഴും ഒരു ഫങ്ഷണൽ ശൈലിയിലാണ് എഴുതപ്പെടുന്നത്, എന്നാൽ പാർശ്വഫലങ്ങളുടെ(side effects) സാന്നിദ്ധ്യം, മാറ്റാവുന്ന സ്ഥലവും, അത് ഇംപെറേറ്റീവ്, ഫങ്ഷണൽ ഭാഷകളുടെ ഇടയിൽ ഗ്രേ ഏരിയ എന്നാണ് അറിയപ്പെടുന്നത്.
"https://ml.wikipedia.org/wiki/ഫങ്ഷണൽ_പ്രോഗ്രാമിംഗ്" എന്ന താളിൽനിന്ന് ശേഖരിച്ചത്