എഫ് ഷാർപ്പ് (പ്രോഗ്രാമിങ് ഭാഷ)എഫ്#(F#) (ഉച്ചരിക്കുന്നത് എഫ് ഷാർപ്പ്) ഫംഗ്ഷണൽ, ഇംപെറേറ്റീവ്, ഒബ്ജക്റ്റ് ഓറിയെന്റഡ് പ്രോഗ്രാമിങ് രീതികൾ ഉൾക്കൊള്ളുന്ന ശക്തമായ ടൈപ്പ്, ഒന്നിലധികം മാതൃകൾ ഉള്ള പ്രോഗ്രാമിങ് ഭാഷയാണ്. ക്രോസ് പ്ലാറ്റ്ഫോമായ കോമൺ ലാംഗ്വേജ് ഇൻഫ്രാസ്ട്രക്ചർ (CLI) ഭാഷയായി എഫ് # ഉപയോഗിക്കാറുണ്ടെങ്കിലും പക്ഷെ അത് ജാവാസ്ക്രിപ്റ്റും[5] ഗ്രാഫിക്സ് പ്രോസസ്സിംഗ് യൂണിറ്റും (ജിപിയു) കോഡ് ജനറേറ്റ് ചെയ്യുന്നതിനും കഴിയും.[6] എഫ്# സോഫ്റ്റ്വേർ ഫൗണ്ടേഷൻ,[7] മൈക്രോസോഫ്റ്റ്, തുറന്ന സംഭാവനക്കാർ എന്നിവർ ചേർന്ന് വികസിപ്പിച്ചെടുത്തു. എഫ് # സോഫ്റ്റുവെയർ ഫൌണ്ടേഷനിൽ നിന്നും ഓപ്പൺ സോഴ്സ്, ക്രോസ് പ്ലാറ്റ്ഫോം കമ്പൈലർ ലഭ്യമാണ്.[8]എഫ്# വിഷ്വൽ സ്റ്റുഡിയോ [9],സമറിൻ സ്റ്റുഡിയോ(Xamarin studio)[10] എന്നിവയിൽ പൂർണ്ണ പിന്തുണയുള്ള ഭാഷയാണ്.മോണോ, മോണോഡെവലപ്പ്, ഷാർപ്ഡെവലപ്പ്, എംബിറേസ്, വെബ് ഷാർപർ എന്നിവയാണ് എഫ് ഡെവലപ്മെന്റ് മറ്റ് ഉപകരണങ്ങളെ പിന്തുണയ്ക്കുന്നത്. [11] പ്ലഗ് ഇൻസ് പിന്തുണയ്ക്കുന്ന എഫ്# വ്യാപകമായി ഉപയോഗിക്കുന്ന എഡിറ്റർമാർക്ക്, പ്രത്യേകിച്ച് ആറ്റത്തിനും വിഷ്വൽ സ്റ്റുഡിയോ കോഡിനായുള്ള ഇയോണൈഡ് എക്സ്റ്റൻഷൻ, വിം, എമാക്സ്, ആൻഡ് സബ്ബ് ലൈം ടെക്സ്റ്റ് തുടങ്ങിയ മറ്റ് എഡിറ്ററുകൾക്കുള്ള സംയോജനമാണ്. എഫ്# എം.എൽ. ഭാഷാ കുടുംബത്തിലെ അംഗം ആണ്. പ്രോഗ്രാമിങ് ഭാഷ ഓക്കമിലെ ഒരു കോറിന്റെ ഒരു .നെറ്റ് ഫ്രെയിംവർക്ക് ഇംപ്ലിമെന്റേഷൻ ആയിത്തീർന്നു. സി#, പൈത്തൺ, ഹാസ്കൽ, സ്കാല, എർലാങ്. ചരിത്രംപതിപ്പുകൾഎഫ് ഷാർപ്പിന്റെ വികസനത്തിൽ, ഭാഷ പല പതിപ്പുകളിലൂടെ കടന്നുപോയിട്ടുണ്ട്:
എഫ്# ഇൻട്രാറ്റീവ്(REPL(റീഡ്-ഇവാലുവേറ്റ്-പ്രിന്റ് ലൂപ്പ്) റഫർ ചെയ്യുന്നതിനായി എഫ് # ഉപയോഗിക്കുന്നു) .നെറ്റ് ഫ്രെയിംവർക്കിൽ മാത്രമേ പ്രവർത്തിക്കുകയുള്ളു എന്നത് ശ്രദ്ധിക്കുക. അതുകൊണ്ടാണ് വിൻഡോസിൽ മാത്രം പ്രവർത്തിക്കുന്നത്.[20] ഭാഷ പരിണാമംഎഫ്# തുറന്ന വികസനവും സാങ്കേതികവിദ്യയും ഉപയോഗിക്കുന്നു. മൈക്രോസോഫ്റ്റിന്റെ റിസർച്ചിൽ നിന്നുള്ള ഡോൺ സൈമെ ഭാഷാ പരിണാമ പ്രക്രിയയെ കൈകാര്യം ചെയ്യുന്നു, ഭാഷ, ഡിസൈൻ എന്നിവയക്കുവേണ്ടി ബെനവലൻറ് ഡിക്റ്റേറ്റർ ഫോർ ലൈഫ് (ബി.ഡി.എഫ്.എൽ) ആകുകയും, കൂടാതെ എഫ് # സോഫ്റ്റ് വെയർ ഫൗണ്ടേഷനോടൊപ്പം പ്രവർത്തിക്കുകയും ചെയ്യുന്നു. എഫ്# ഭാഷയുടെ മുൻപതിപ്പുകൾ രൂപകൽപ്പന ചെയ്തത് മൈക്രോസോഫ്റ്റ്, മൈക്രോസോഫ്റ്റ് റിസർച്ച് തുടങ്ങിയവയാണ്. എഫ്# കേംബ്രിഡ്ജ്, മൈക്രോസോഫ്റ്റ് റിസേർച്ച് മുതലായവയിൽ നിന്നാണ് പരിണമിച്ചത്. ഭാഷ ആദ്യം രൂപകൽപ്പന ചെയ്ത് നടപ്പിലാക്കിയത് ഡോൺ സൈമെ ആണ്, എഫ് ഷാർപ്പ് ടീമിലെ ആരോ പറഞ്ഞതനുസരിച്ച് അവർ പറയുന്നു എഫ് "തമാശ"ക്ക് വേണ്ടിയാണ്.[21]യൂണിറ്റുകളുടെ രൂപകൽപ്പനയ്ക്ക് ആൻഡ്രൂ കെന്നഡി സംഭാവന നൽകി. വിഷ്വൽ സ്റ്റുഡിയോയ്ക്കുള്ള വിഷ്വൽ എഫ് # ടൂളുകൾ മൈക്രോസോഫ്റ്റ് വികസിപ്പിച്ചതാണ്. എഫ്# സോഫ്റ്റ്വേർ ഫൗണ്ടേഷൻ എഫ് # ഓപ്പൺ സോഴ്സ് കമ്പൈലർ, ടൂളുകൾ എന്നിവ വികസിപ്പിച്ചെടുത്തു, ലഭ്യമാക്കിയ ഓപ്പൺ സോഴ്സ് കമ്പൈലർ സംയോജിപ്പിക്കുന്നു, ഇത് മൈക്രോസോഫ്റ്റ് വിഷ്വൽ എഫ് # ടൂൾസ് ടീം നൽകുന്നതാണ്.
ഭാഷാ വിഹഗവീക്ഷണംപ്രവർത്തന പ്രോഗ്രാമിംഗ്എഫ് # എന്നത് ശക്തമായി ടൈപ്പ് (strongly typed)ചെയ്ത ഫംഗ്ഷൻ-ടൈപ്പ് അനുമാനം ഉപയോഗിക്കുന്ന ഭാഷയാണ്. പ്രോഗ്രാമർ തരങ്ങൾ പ്രഖ്യാപിക്കേണ്ട ആവശ്യമില്ല—കമ്പൈലർ സമയത്ത് തരം തിരിച്ചെടുക്കുന്നു (തരം അനുമാനം). എഫ്# സ്പഷ്ടമായ തരത്തിലുള്ള വ്യാഖ്യാനങ്ങളെ അനുവദിക്കുന്നു, അവ ചില സാഹചര്യങ്ങളിൽ ആവശ്യമാണ്. എഫ്# ആഴത്തിലുള്ള മൂല്യനിർണ്ണയം ഉപയോഗിക്കുന്ന ഒരു എക്സ്പ്രഷൻ അടിസ്ഥാനമാക്കിയുള്ള ഭാഷയാണ്. let x = 3 + 4
ഡേറ്റാ അംഗങ്ങളെ പേരുനൽകുന്ന ഒരു റെക്കോർഡാണ് റെക്കോർഡ്. റെക്കോർഡ് നിർവചനത്തിന്റെ ഒരു ഉദാഹരണം ഇതാ: type R =
{ Name : string
Age : int }
നമുക്ക് വ്യത്യസ്ത യൂണിയൻ തരം എന്നത് സി യൂണിയനുകളുടെ തരം സുരക്ഷയുള്ള പതിപ്പാണ്. ഉദാഹരണത്തിന്, type R =
{ Name : string
Age : int }
യൂണിയൻ രീതിയുടെ മൂല്യങ്ങൾ ഒന്നുകിൽ യൂണിയൻ കേസായിരിക്കും. ഓരോ കേസിന്റെയും നിർവ്വചനത്തിൽ ഓരോ യൂണിയൻ കേസുകളും വഹിക്കുന്ന മൂല്യങ്ങളുടെ രീതി ഉൾപ്പെടുത്തിയിരിക്കുന്നു. ലിസ്റ്റ് തരം മാറ്റാൻപറ്റാത്തതാണ്, ലിങ്ക്ഡ് ലിസ്റ്റ് എഫ്# ലാംഡ ഫംഗ്ഷനുകളും ക്ലോസ്സേഴ്സും പിന്തുണയ്ക്കുന്നു. എഫ്# ലെ എല്ലാ ഫംഗ്ഷനുകളും ഫസ്റ്റ് ക്ലാസ് മൂല്യങ്ങളും മാറ്റമില്ലാത്തവയുമാണ്.
ഫങ്ഷനുകൾ കറീഡാകാൻ(curried) കഴിയും. ഫസ്റ്റ് ക്ലാസ് മൂല്യങ്ങളാണെങ്കിൽ, മറ്റ് പ്രവർത്തനങ്ങൾക്ക് ആർഗ്യുമെന്റായി നൽകാം. മറ്റ് പ്രവർത്തന പ്രോഗ്രാമിംഗ് ഭാഷകളെ പോലെ, seq { for b in 0 .. 25 do
if b < 15 then
yield b*b }
0 മുതൽ 25 വരെയുള്ള സംഖ്യകളുടെ ശ്രേണിയിൽ നിന്ന് സംഖ്യകൾ 0 ഫിൽറ്റർ ചെയ്തുകൊണ്ട് സംഖ്യകളുടെ സ്ക്വയറുകളുടെ ഒരു ശ്രേണീ ആരംഭിക്കുന്നു. സീക്വൻസ് എന്നത് ജനറേറ്ററാണ് - മൂല്യങ്ങൾ ഡിമാന്റിൽ ജനറേറ്റുചെയ്യപ്പെടുന്നു (അതായത്, ലാളിത്യമായി വിലയിരുത്തുകയാണ്) - ലിസ്റ്റുകളും അറേകളും ഔത്സുക്യത്തോടെ വിലയിരുത്തുന്നു. പേരുകളിലേക്ക് മൂല്യങ്ങൾ ബന്ധിപ്പിക്കുന്നതിന് പാറ്റേൺ പൊരുത്തപ്പെടുന്ന രീതി എഫ് ഷാർപ്പ് ഉപയോഗിക്കുന്നു. മാത്രമല്ല വിവേചനപൂർണ്ണമായ യൂണിയനുകൾ ഉപയോഗിക്കുമ്പോഴും പാറ്റേൺ പൊരുത്തപ്പെടൽ ഉപയോഗിക്കപ്പെടുന്നു, യൂണിയൻ എന്നത് പാറ്റേൺ നിയമങ്ങൾക്കെതിരായി പൊരുത്തപ്പെടുന്നു, അവ തമ്മിലുള്ള ചേർച്ച വിജയിക്കുമ്പോൾ ഒരു റൂൾ തിരഞ്ഞെടുക്കുന്നു. എക്സ്റ്റൻസിബിൾ പാറ്റേൺ പൊരുത്തപ്പെടുന്ന രൂപത്തിൽ എഫ്# സജീവ ഇനങ്ങളെ പിന്തുണയ്ക്കുന്നു. ഉദാഹരണത്തിന്, നിലവിലുള്ള തരത്തിൽ പൊരുത്തപ്പെടുത്തലുകൾ ഒന്നിലധികം ഉണ്ടാകുമ്പോൾ ആണ് ഇത് ഉപയോഗിക്കുന്നത്. കമ്പ്യൂട്ടേഷൻ എക്സ്പ്രഷനുകൾ എന്ന് വിളിക്കുന്ന രചനാപരമായ കണക്കുകൂട്ടലുകൾ നിർവ്വചിക്കുന്നതിനുള്ള ഒരു സാധാരണ വാക്യഘടന എഫ്# പിന്തുണയ്ക്കുന്നു. സീക്വൻസ് എക്സ്പ്രഷനുകൾ, എസിങ്ക്രണസ് കണക്കുകൂട്ടൽ, ക്വറികൾ എന്നിവയാണ് കംപ്യൂട്ടിംഗ് എക്സ്പ്രഷനുകളുടെ പ്രത്യേകതകൾ. കണക്കുകൂട്ടൽ സമ്പ്രദായങ്ങൾ മൊനാഡ് മാതൃകയുടെ ഒരു നിർവ്വഹണമാണ്.[26] ഇംപെറേറ്റീവ് പ്രോഗ്രാമിംഗ്ഇംപെറേറ്റീവ് പ്രോഗ്രാമിംഗിനുള്ള എഫ്# പിന്തുണ ഉൾപ്പെടുന്നവ താഴെ കൊടുത്തിരിക്കുന്നതു പ്രകാരമാണ്
മൂല്യങ്ങളും റെക്കോർഡ് ഫീൽഡുകളും // Define 'x' with initial value '1'
let mutable x = 1
// Change the value of 'x' to '3'
x <- 3
നെയിംസ്പേസ് അനിവാര്യ ഡാറ്റ ഘടനകളെ നിർവചിക്കുന്നു. കൂടാതെ, എല്ലാ സിഎൽഐ(CLI) ടൈപ്പുകൾക്കും ഒബ്ജക്റ്റ് പ്രോഗ്രാമിംഗ്മറ്റ് പൊതു ഭാഷാ ഇൻഫ്രാസ്ട്രക്ചർ (CLI) ഭാഷകൾ പോലെ, എഫ്# ഓബ്ജക്റ്റ് പ്രോഗ്രാമിങ്ങിലൂടെ സിഎൽഐ(CLI) തരങ്ങളും വസ്തുക്കളും ഉപയോഗിക്കാൻ കഴിയും. ഒബ്ജക്റ്റ് പ്രോഗ്രാമിങ്ങിനായുള്ള എഫ്# പിന്തുണയിൽ ഉൾപ്പെടുന്നവ:
പാറ്റേണുകളിൽ ഒബ്ജക്റ്റ് പ്രോഗ്രാമിനുള്ള പിന്തുണ ഉൾപ്പെടുന്നു
എഫ്# ഒബ്ജക്ട് തരം നിർവചനങ്ങൾ ക്ലാസ്, ഘടന, ഇന്റർഫേസ്, എൻയും, അല്ലെങ്കിൽ ഡെലിഗേറ്റ് തരം നിർവചനങ്ങൾ, സി# ൽ കാണുന്ന നിർവചന രൂപങ്ങളുമായി യോജിക്കുന്നു. /// A simple object type definition
type Person(name : string, age : int) =
member x.Name = name
member x.Age = age
എസിൻക്രണസ് പ്രോഗ്രാമിംഗ്എസിൻക്രണസ് വർക്ക്ഫ്ലോകൾ വഴി എസിൻക്രണസ് പ്രോഗ്രാമിനായി എഫ് # പിന്തുണയ്ക്കുന്നു. ഒരു എസിൻക്രണസ് വർക്ക്ഫ്ലോ ഒരു let asynctask =
async { let req = WebRequest.Create(url)
let! response = req.GetResponseAsync()
use stream = response.GetResponseStream()
use streamreader = new System.IO.StreamReader(stream)
return streamreader.ReadToEnd() }
സമാന്തര പ്രോഗ്രാമിങ്പാരലൽ പ്രോഗ്രാമിങ്, ഭാഗികമായി എഫ്# സ്റ്റാൻഡേർഡ് ലൈബ്രറിയിൽ അളവിന്റെ യൂണിറ്റുകൾസംഖ്യകളുടെ അളവെടുക്കൽ പരിശോധന യൂണിറ്റുകളെ എഫ്# ടൈപ്പ് സിസ്റ്റം പിന്തുണയ്ക്കുന്നു. [28]ഉപയോക്തൃ കോഡിലെ കുറഞ്ഞ തരം വ്യാഖ്യാനങ്ങൾ ആവശ്യമായ എഫ്# ടൈപ്പ് അനുമാനങ്ങളുമായി അളക്കുന്ന സവിശേഷ യൂണിറ്റുകൾ സംയോജിക്കുന്നു.[29] മെറ്റാപ്രോഗ്രാംമിങ്ങ്എഫ്# ഭാഷയ്ക്കുള്ള ഇഷ്ടാനുസൃത ഡൊമെയ്ൻ-നിർദ്ദിഷ്ട ഭാഷകളെ ഉൾപ്പെടുത്തുന്നതിന് മെറ്റാപ്രോഗ്രാംമിങ്ങ് മുഖേനയുള്ള ചില സിന്റാക്സ് കസ്റ്റമൈസ് ചെയ്യാൻ എഫ്# അനുവദിക്കുന്നു, പ്രത്യേകിച്ച് കമ്പ്യൂട്ടിംഗ് എക്സ്പ്രഷനുകളിലൂടെ. എഫ് ഷാർപ്പിൽ മെറ്റ പ്രോഗ്രാമിംഗ് ഉദ്ധരണികൾക്കുള്ള ഒരു സവിശേഷത ഉൾക്കൊള്ളുന്നു.[30]ഒരു ഉദ്ധരണി എക്സ്പ്രഷൻ F # എക്സ്പ്രഷനുകളുടെ അമൂർത്ത സിന്റാക്സ് ട്രീ അവതരണത്തിലേക്ക് മൂല്യനിർണ്ണയം ചെയ്യുന്നു. അതുപോലെ, വിവര-സമ്പന്നമായ പ്രോഗ്രാമിംഗ്എഫ് # ടൈപ്പ് പ്രൊവൈഡേഴ്സ് എന്നറിയപ്പെടുന്ന സ്റ്റാറ്റിക് എക്സ്റ്റൻസിബിൾ ടൈപ്പ് ജനറേറ്റ് വഴി എഫ്# 3.0 ഒരു കംപൈൽ ടൈം മെറ്റാ പ്രോഗ്രാമിങ് സംവിധാനം അവതരിപ്പിച്ചു.[31] എഫ്# ടൈപ്പ് പ്രൊവൈഡറുകൾ എഫ്# കംപൈലറും ടൂളുകളും കമ്പൈലർ സമയത്തു് കമ്പൈലർ ഓൺ-ഡിമാന്റ് ടൈപ്പ് വിവരങ്ങൾ ലഭ്യമാക്കുന്ന ഘടകങ്ങളോടൊപ്പം ദീർഘിപ്പിയ്ക്കുന്നു. ഫ്രീബേസ് നോളഡ്ജ് ഗ്രാഫിൽ ഉൾപ്പെടെ, സ്കേലബിൾ വഴി, ബന്ധിപ്പിച്ച വിവര ഉറവിടങ്ങളിലേക്ക് ശക്തമായി ടൈപ്പ് ചെയ്യുവാൻ എഫ് # ടൈപ്പ് ദാതാക്കൾ ഉപയോഗിയ്ക്കപ്പെട്ടു.[32] എഫ് # 3.0 ൽ എഫ് # ക്വോട്ടേഷൻ, കംപ്യൂട്ടേഷൻ എക്സ്പ്രഷൻ സവിശേഷതകൾ എന്നിവ ലിങ്ക്(LINQ) അന്വേഷണങ്ങൾ നടപ്പിലാക്കാൻ കൂട്ടിച്ചേർക്കുന്നു.[33] ഉദാഹരണത്തിന്:- // Use the OData type provider to create types that can be used to access the Northwind database.
open Microsoft.FSharp.Data.TypeProviders
type Northwind = ODataService<"http://services.odata.org/Northwind/Northwind.svc">
let db = Northwind.GetDataContext()
// A query expression.
let query1 = query { for customer in db.Customers do
select customer }
തരം ദാതാക്കൾ, ചോദ്യങ്ങൾ, ശക്തമായ ടൈപ്പ് ചെയ്ത ഫങ്ഷണൽ പ്രോഗ്രാമിങ് എന്നിവ വിവര ശേഖരണ പ്രോഗ്രാമുകൾ എന്ന് അറിയപ്പെടുന്നു.[34] ഏജന്റ് പ്രോഗ്രാമിംഗ്ലൈറ്റ് വെയിറ്റ് അസിൻക്രണസ് ഏജന്റുകളുടെ ഇൻ-മെമ്മറി നടപ്പിലാക്കലിലൂടെ ആക്റ്റർ പ്രോഗ്രാമിങ് മോഡലിന്റെ വ്യതിയാനം എഫ്# പിന്തുണയ്ക്കുന്നു. ഉദാഹരണത്തിന്, ഇനിപ്പറയുന്ന കോഡ് ഒരു ഏജന്റും പോസ്റ്റുകളും 2 സന്ദേശങ്ങൾ നിർവ്വചിക്കുന്നു: let counter =
MailboxProcessor.Start(fun inbox ->
let rec loop n =
async { do printfn "n = %d, waiting..." n
let! msg = inbox.Receive()
return! loop(n+msg) }
loop 0)
വികസന ഉപകരണങ്ങൾ
ആപ്ലിക്കേഷൻ ഏരിയകൾഎഫ്# ഒരു പൊതു ഉദ്ദേശ പ്രോഗ്രാമിങ് ഭാഷയാണ്. വെബ് പ്രോഗ്രാമിംഗ്എഫ്# കോഡ് ഒരു സെർവറിലെ നെറ്റീവ് കോഡും ക്ലയന്റിൽ ജാവാസ്ക്രിപ്റ്റ് കോഡുമൊക്കെയായി എഫ്# കോഡ് നടപ്പിലാക്കുന്ന വെബ് ഷാർപ്പർ ചട്ടക്കൂടിന്റെ ഒരു കേന്ദ്ര ഭാഗമാണ്. അനലിറ്റിക്കൽ പ്രോഗ്രാമിംഗ്എഫ്# ക്വണ്ടിറ്റേറ്റീവ് ഫിനാൻസ് പ്രോഗ്രാമിംഗിന് ഉപയോഗിക്കുന്നു,[37] ഊർജ്ജ വ്യാപാരം, പോർട്ട്ഫോളിയോ ഒപ്റ്റിമൈസേഷൻ, ,[38] മെഷീൻ ലേണിംഗ്,[39] ബിസിനസ്സ് ഇൻറലിജൻസ്,[40] ഫേസ്ബുക്കിൽ ഉള്ള സോഷ്യൽ ഗെയിമിംഗ് തുടങ്ങിയവക്കായി ഉപയോഗിക്കുന്നു.[41] 2010-ൽ സി # ഒപ്റ്റിമൈസ് ചെയ്ത ബദലായി എഫ്# നിലയുറപ്പിച്ചു. F # ന്റെ സ്ക്രിപ്റ്റിങ് കഴിവ്, എല്ലാ മൈക്രോസോഫ്റ്റ് പ്രൊഡക്ടുകളോടു ഉള്ള അന്തർഭാഷാ പൊരുത്തം, ഡെവലപ്പർമാർക്കിടയിൽ ജനപ്രിയമാക്കുന്നു. പല ഡെവലപ്പർമാരും എഫ്# അടിസ്ഥാനമാക്കിയുള്ള സിസ്റ്റങ്ങൾ സൃഷ്ടിക്കുന്നു, കൂടാതെ സി # WCF സേവനങ്ങൾ ഉപയോഗിക്കുന്നു. സ്ക്രിപ്റ്റിംഗ്പ്രധാനമായും ഡെസ്ക്ടോപ്പ് റീഡ്-ഇവൽ-പ്രിന്റ് ലൂപ്പ് (REPL) സ്ക്രിപ്റ്റിങ്ങിനുള്ള സ്ക്രിപ്റ്റിംഗ് ഭാഷയായി എഫ് # ഉപയോഗിക്കാം.[42] ഓപ്പൺ സോഴ്സ് കമ്മ്യൂണിറ്റിഎഫ് # ഓപ്പൺ സോഴ്സ് സമൂഹത്തിൽ എഫ് # സോഴ്സ് ഫൗണ്ടേഷനും ഗിറ്റ്ഹബിലുള്ള എഫ് # ഓപ്പൺ സോഴ്സ് ഗ്രൂപ്പും ഉൾപ്പെടുന്നു. അനുയോജ്യതഎഫ്# പരമ്പരാഗതമായ "എംഎൽ(ML) അനുയോജ്യത മോഡ്" നേരിട്ട് ഒകാമൽ(OCaml)ന്റെ വലിയ ഉപസൗരത്തിൽ എഴുതപ്പെട്ട പ്രോഗ്രാമുകൾ നേരിട്ട് സമാഹരിക്കാൻ കഴിയും, ഫങ്റ്റേഴ്സ്, വസ്തുക്കൾ, പോളിമോർഫിക് വേരിയന്റുകൾ അല്ലെങ്കിൽ മറ്റ് കൂട്ടിച്ചേർക്കലുകൾ എന്നിവ ഇല്ലാതെ. ഉദാഹരണങ്ങൾഏതാനും ചെറിയ സാമ്പിളുകൾ പിന്തുടരുന്നു: // This is a comment for a sample hello world program.
open System
Console.WriteLine("Hello World!")
ഒരു കൺസ്ട്രക്ടറുമായി ഒരു വ്യക്തി ക്ലാസ്സ് ഒരു പേരും പ്രായവും രണ്ടു ഇംമൂട്ടബിൾ പ്രോപ്രട്ടീസ് എടുക്കൽ. /// This is a documentation comment for a type definition.
type Person(name : string, age : int) =
member x.Name = name
member x.Age = age
/// class instantiation
let mrSmith = Person("Smith", 42)
ഫംഗ്ഷണൽ ഭാഷകളുടെ വാക്യഘടന കാണിക്കുന്നതിനുള്ള ഒരു ലളിതമായ ഉദാഹരണം, നോൺ-നെഗറ്റീവ് 32 ബിറ്റ് പൂർണ്ണ സംഖ്യ ഫാക്റ്റോറിയൽ ഫംഗ്ഷൻ, ഇവിടെ എഫ്# ൽ കാണിച്ചിരിക്കുന്നു: /// Using pattern matching expression
let rec factorial n =
match n with
| 0 -> 1
| _ -> n * factorial (n - 1)
/// For a single-argument functions there is syntactic sugar (pattern matching function):
let rec factorial = function
| 0 -> 1
| n -> n * factorial (n - 1)
/// Using fold and range operator
let factorial n = [1..n] |> Seq.fold (*) 1
ഇറ്ററേഷൻ(Iteration)ഉദാഹരണങ്ങൾ: /// Iteration using a 'for' loop
let printList lst =
for x in lst do
printfn "%d" x
/// Iteration using a higher-order function
let printList2 lst =
List.iter (printfn "%d") lst
/// Iteration using a recursive function and pattern matching
let rec printList3 lst =
match lst with
| [] -> ()
| h :: t ->
printfn "%d" h
printList3 t
ഫിബൊനാസി ഉദാഹരണങ്ങൾ: /// Fibonacci Number formula
let rec fib n =
match n with
| 0 | 1 -> n
| _ -> fib (n - 2) + fib (n - 1)
/// Another approach - a lazy infinite sequence of Fibonacci numbers
let fibSeq = Seq.unfold (fun (a,b) -> Some(a+b, (b, a+b))) (0,1)
// Print even fibs
[1 .. 10]
|> List.map fib
|> List.filter (fun n -> (n % 2) = 0)
|> printList
// Same thing, using a list expression
[ for i in 1..10 do
let r = fib i
if r % 2 = 0 then yield r ]
|> printList
ഒരു സാമ്പിൾ വിൻഡോസ് ഫോംസ് പ്രോഗ്രാം: // Open the Windows Forms library
open System.Windows.Forms
// Create a window and set a few properties
let form = new Form(Visible=true, TopMost=true, Text="Welcome to F#")
// Create a label to show some text in the form
let label =
let x = 3 + (4 * 5)
new Label(Text = sprintf "x = %d" x)
// Add the label to the form
form.Controls.Add(label)
// Finally, run the form
[<System.STAThread>]
Application.Run(form)
എസിൻക്രണസ് പാരലൽ പ്രോഗ്രാമിങ് സാമ്പിൾ (സമാന്തരമായ സിപിയു, ഐ / ഒ ടാസ്ക്കുകൾ): /// A simple prime number detector
let isPrime (n:int) =
let bound = int (sqrt (float n))
seq {2 .. bound} |> Seq.forall (fun x -> n % x <> 0)
// We are using async workflows
let primeAsync n =
async { return (n, isPrime n) }
/// Return primes between m and n using multiple threads
let primes m n =
seq {m .. n}
|> Seq.map primeAsync
|> Async.Parallel
|> Async.RunSynchronously
|> Array.filter snd
|> Array.map fst
// Run a test
primes 1000000 1002000
|> Array.iter (printfn "%d")
ഇതും കാണുക
അവലംബം
|