ലിസ്പ്

നീണ്ട ചരിത്രമുള്ളതും മറ്റു പ്രോഗ്രാമിങ് ഭാഷകളിൽ നിന്ന് വ്യത്യസ്തമായ ലേഖനവ്യവസ്ഥയോടുകൂടിയതുമായ പ്രോഗ്രാമിങ് ഭാഷാവിഭാഗമാണ്‌ ലിസ്പ് (LISP).പൂർണ്ണമായും പരാൻതൈസ് ചെയ്ത പ്രിഫിക്‌സ് നൊട്ടേഷനാനുള്ളത്. 1958-ലാണ്‌ ഇത് പുറത്തിറങ്ങിയത്. 'ലിസ്റ്റ് പ്രൊസസ്സിങ് ലാംഗ്വേജ്' (LISt Processing language) എന്നതിൽ നിന്നാണ്‌ പേരിന്റെ ഉൽഭവം. ഇന്ന് വ്യാപകമായ ഉപയോഗത്തിലുള്ള രണ്ടാമത്തെ ഏറ്റവും പഴയ ഹൈ-ലെവൽ പ്രോഗ്രാമിംഗ് ഭാഷയാണ് ലിസ്പ്. ഫോർട്രാൻ മാത്രമേ ഇതിലും പഴക്കമുള്ളത്, ഒരു വർഷം മാത്രം.
ഫോർട്രാനെ പോലെ തന്നെ ലിസ്പിനും തുടക്കത്തിൽ നിന്ന് ഒരുപാട് മാറ്റങ്ങൾ സംഭവിച്ചിട്ടുണ്ട്. ഇന്ന് നിലവിലുള്ള ലിസ്പിന്റെ പ്രചാരത്തിലുള്ള വകഭേദങ്ങളിൽ പ്രധാനപ്പെട്ടവ റാക്കറ്റ്(Racket), കോമൺ ലിസ്പും (Common Lisp) സ്കീം (Scheme) ക്ലോജുറും(Clojure) ആണ്‌.

അലോൺസോ ചർച്ചിന്റെ ലാംഡ കാൽകുലസിനെ അടിസ്ഥാനമാക്കി കമ്പ്യൂട്ടർ പ്രോഗ്രാമുകളിൽ ഗണിതസമവാക്യങ്ങൾ രേഖപ്പെടുത്തുന്നതിനുള്ള മാർഗ്ഗമായിട്ടായിരുന്നു ആദ്യം ലിസ്പ് രൂപംകൊണ്ടത്. പിന്നീട് പെട്ടെന്ന് തന്നെ കമ്പ്യൂട്ടറുകളിൽ കൃത്രിമബുദ്ധി പ്രായോഗികമാക്കാനുള്ള ഗവേഷണങ്ങൾക്കുള്ള പ്രോഗ്രാമിങ് ഭാഷ എന്ന നിലയിൽ പ്രചാരത്തിലാവുകയും ചെയ്തു. കമ്പ്യൂട്ടർ ശാസ്ത്രത്തിൽ പല തത്ത്വങ്ങളും ലിസ്പ് സംഭാവന ചെയ്തിട്ടുണ്ട്. ട്രീ ഡാറ്റാ സ്ട്രക്ച്ചർ, ഓട്ടോമാറ്റിക്ക് സ്റ്റോറേജ് മാനേജ്മെന്റ്, ഡൈനാമിക്ക് ടൈപ്പിങ്,കണ്ടീഷണൽസ്,ഹൈ ഓർഡർ ഫംഗ്ഷനുകൾ,റിക്കർഷൻസ്, സെൽഫ് ഹോസ്റ്റിങ് കം‌പൈലർ,റീഡ്-ഇവാൾ-പ്രിന്റ് ലൂപ്പ് എന്നിവ അവയിൽ ചിലതാണ്‌.

"ലിസ്പ് പ്രോസസ്സർ" എന്നതിൽ നിന്നാണ് ലിസ്പ് എന്ന പേര് ഉരുത്തിരിഞ്ഞത്.  ലിസ്പിന്റെ പ്രധാന ഡാറ്റാ ഘടനകളിലൊന്നാണ് ലിങ്ക്ഡ് ലിസ്റ്റുകൾ, കൂടാതെ ലിസ്പ് സോഴ്സ് കോഡ് ലിസ്റ്റുകൾ കൊണ്ട് നിർമ്മിച്ചതാണ്. അതിനാൽ, ലിസ്പ് പ്രോഗ്രാമുകൾക്ക് സോഴ്സ് കോഡിനെ ഒരു ഡാറ്റാ സ്ട്രക്ചറായി കൈകാര്യം ചെയ്യാൻ കഴിയും, ഇത് പുതിയ സിന്റാക്സ് അല്ലെങ്കിൽ ലിസ്പിൽ ഉൾച്ചേർത്ത(embedded)പുതിയ ഡൊമെയ്ൻ നിർദ്ദിഷ്ട ഭാഷകൾ സൃഷ്ടിക്കാൻ പ്രോഗ്രാമർമാരെ അനുവദിക്കുന്ന മാക്രോ സിസ്റ്റങ്ങൾ ഉണ്ടാകുന്നു.

കോഡിന്റെയും ഡാറ്റയുടെയും പരസ്പര കൈമാറ്റം ലിസ്പിന് തൽക്ഷണം തിരിച്ചറിയാൻ കഴിയുന്ന വാക്യഘടന നൽകുന്നു. എല്ലാ പ്രോഗ്രാം കോഡുകളും എസ്-എക്സ്പ്രഷനുകൾ അല്ലെങ്കിൽ പരാൻതൈസ്ഡ് ലിസ്റ്റുകളായി എഴുതിയിരിക്കുന്നു. ഒരു ഫംഗ്ഷൻ കോൾ അല്ലെങ്കിൽ വാക്യഘടന ഫോം ആദ്യം ഫംഗ്ഷന്റെയോ ഓപ്പറേറ്ററുടെയോ പേരോടുകൂടിയ ഒരു ലിസ്റ്റായി എഴുതുന്നു, കൂടാതെ ഇനിപ്പറയുന്ന ആർഗ്യുമെന്റുകൾ; ഉദാഹരണത്തിന്, മൂന്ന് ആർഗ്യുമെന്റുകൾ എടുക്കുന്ന ഒരു ഫംഗ്ഷനെ (f arg1 arg2 arg3)എന്ന് വിളിക്കും.
ചരിത്രം

ജോൺ മക്കാർത്തി 1958 ൽ മസാച്ചുസെറ്റ്സ് ഇൻസ്റ്റിറ്റ്യൂട്ട് ഓഫ് ടെക്നോളജിയിൽ (എംഐടി) പഠിക്കുമ്പോൾ ലിസ്പ് വികസിപ്പിച്ചു. 1960 ൽ കമ്മ്യൂണിക്കേഷൻസ് ഓഫ് എസി‌എമ്മിൽ ഒരു പ്രബന്ധത്തിൽ മക്കാർത്തി അതിന്റെ പേപ്പർ പ്രസിദ്ധീകരിച്ചു, "സിംബോളിക് എക്സ്പ്രഷനുകളുടെ ആവർത്തന പ്രവർത്തനങ്ങൾ, മെഷീൻ, ഭാഗം I ഉം അവയുടെ കണക്കുകൂട്ടലും"കുറച്ച് ലളിതമായ ഓപ്പറേറ്റഴസും ചർച്ചിൽ(Church) നിന്ന് കടമെടുത്ത അനോണിമസ് ഫങ്ഷനായിട്ടുള്ള ഒരു നൊട്ടേഷനും ഉപയോഗിച്ച് ഒരാൾക്ക് അൽഗോരിതംസിനായി ട്യൂറിംഗ്-കംപ്ലീറ്റ് ഭാഷ നിർമ്മിക്കാൻ കഴിയുമെന്ന് അദ്ദേഹം കാണിച്ചു.

ഇൻഫർമേഷൻ പ്രോസസ്സിംഗ് ലാംഗ്വേജ് 1955 മുതൽ 1956 വരെയുള്ള ആദ്യത്തെ എഐ ഭാഷയായിരുന്നു, കൂടാതെ ലിസ്റ്റ്-പ്രോസസ്സിംഗ്, റിക്കർഷൻ എന്നിവ പോലുള്ള നിരവധി ആശയങ്ങൾ ഇതിനകം ഉൾപ്പെടുത്തിയിട്ടുണ്ട്, അവ ലിസ്പിൽ ഉപയോഗിച്ചു.

മക്കാർത്തിയുടെ യഥാർത്ഥ നൊട്ടേഷൻ ബ്രാക്കറ്റുചെയ്‌ത "എം-എക്‌സ്‌പ്രഷനുകൾ" ഉപയോഗിച്ചു, അത് എസ്-എക്‌സ്‌പ്രഷനുകളിലേക്ക് വിവർത്തനം ചെയ്യും. ഒരു ഉദാഹരണമായി, എം-എക്സ്പ്രഷൻ car[cons[A,B]]എസ്-എക്സ്പ്രഷന് തുല്യമാണ്(car (cons A B))ലിസ്പ് നടപ്പിലാക്കാൻ വേണ്ടി പ്രോഗ്രാമർമാർ അതിവേഗം എസ്-എക്സ്പ്രഷനുകൾ ഉപയോഗിക്കുകയും, എം-എക്സ്പ്രഷനുകൾ ഉപേക്ഷിക്കുകയും ചെയ്തു. എം-എക്സ്പ്രഷനുകൾ വീണ്ടും പ്രത്യക്ഷപ്പെട്ടു, ഹോറസ് എനിയ സി‌ജി‌ഒ‌എല്ലിനു(CGOL)വേണ്ടിയും വോൺ‌ പ്രാറ്റ് എം‌ലിസ്പിന്(MLisp)വേണ്ടിയും ഹ്രസ്വകാല ശ്രമങ്ങൾ നടത്തി 

പഞ്ച് കാർഡുകൾ ഉപയോഗിച്ച് ഐബിഎം 704 കമ്പ്യൂട്ടറിൽ സ്റ്റീവ് റസ്സൽ ആണ് ലിസ്പ് ആദ്യമായി നടപ്പിലാക്കിയത്.  റസ്സൽ മക്കാർത്തിയുടെ പ്രബന്ധം വായിക്കുകയും (മക്കാർത്തിയുടെ സർപ്രൈസ്) ലിസ്പ് ഇവാൾ ഫംഗ്ഷൻ മെഷീൻ കോഡിൽ നടപ്പിലാക്കാമെന്ന് മനസ്സിലാക്കി. According to what reported by Paul Graham in Hackers & Painters, p. 185, McCarthy said: "Steve Russell said, look, why don't I program this eval ... and I said to him, ho, ho, you're confusing theory with practice, this eval is intended for reading, not for computing. But he went ahead and did it. That is, he compiled the eval in my paper into IBM 704 machine code, fixing bug, and then advertised this as a Lisp interpreter, which it certainly was. So at that point Lisp had essentially the form that it has today ..." ലിസ്പ് പ്രോഗ്രാമുകൾ പ്രവർത്തിപ്പിക്കുന്നതിനോ അല്ലെങ്കിൽ കൂടുതൽ ശരിയായി "ലിസ്പ് എക്സ്പ്രഷനുകൾ വിലയിരുത്തുന്നതിനോ" ഉപയോഗിക്കാവുന്ന ഒരു വർക്കിംഗ് ലിസ്പ് ഇന്റർപ്രെറ്ററായിരുന്നു അതിന്റെ റിസൾട്ട്.

അവലംബം

വർഗ്ഗം:പ്രോഗ്രാമിങ് ഭാഷകൾ