Lisp

Straipsnis iš Vikipedijos, laisvosios enciklopedijos.
Peršokti į: navigaciją, paiešką

Lisp (angl. LISP, iš angl. List Processing 'sąrašų apdorojimas') – programavimo kalbų šeima. Sukurta praeito amžiaus šešto dešimtmečio gale kaip abstrakti rekursinių funkcijų užrašymo forma, kalba vis dar naudojama įvairiose srityse, taip pat ir kompiuterių mokslo studijose. Šiuo metu populiariausi Lisp dialektas yra Common Lisp ir Scheme.

Pagrindinė duomenų struktūra Lisp kalboje – sąrašas. Lisp kalba parašytos programos lengvai atpažįstamos iš unikalaus skliaustelių naudojimo bei prefiksinės formos.

Istorija[taisyti | redaguoti kodą]

1956 metais Masačiusetso technologinio instituto profesorius John McCarthy bei studentų grupė, siekdami realizuoti analizuojančio bei tyrinėjančio anglų kalbą dirbtinio intelekto projektą, sukūrė kalbą LISP (LISt Processing). Iš pradžių tai buvo versija skirta pirmiesiems kompiuteriams IBM ir DEC. O pirmas visiškai baigtas variantas LISP 1.5 buvo išleistas 1965 metais. Pirmą kartą aprašyta 1958 metais, kalba yra antra pagal senumą iš aukšto lygio programavimo kalbų – tik Fortran kalba yra senesnė.

Savybės[taisyti | redaguoti kodą]

Lisp kalboje viskas užrašoma išraiškomis, tiek kodas, tiek ir duomenys. Kiekviena išraiška sukuria rezultatą (ar rezultatų sąrašą), kuris gali būti naudojamas kitose išraiškose. Kadangi funkcijos užrašomos kaip sąrašai, jas galima keisti kaip duomenis, todėl labai paprasta programos veikimo metu keisti programą ar dinamiškai kurti algoritmus.

Lisp naudojama prefiksinė užrašymo forma, todėl išraiška 1+2+3+4 Lisp kalboje atrodytų taip:

(+ 1 2 3 4)

Daugumoje Lisp dialektų, funkcijos yra pirmos klasės objektai, kas reiškia, kad jas galima vartoti ten pat, kaip ir kitus objektus. Pavyzdžiui, funkciniame programavime esminės funkcijos yra „map“ ir „filter“. Funkcijos „map“ argumentai yra funkcija bei sąrašas. Ji kiekvienam sąrašo elementui pritaiko funkciją, ir grąžina naują sąrašą. Pavyzdys:

(defun twice (x)
  (* x 2))
 
(map #'twice '(1 2 3 4 5))
=> (2 4 6 8 10)

Ypač naudinga tai, kad galima kurti anonimines funkcijas („lambda“). Pavyzdžiui, ankstesnį pavyzdį galima būtų parašyti taip:

(map #'(lambda (x)
         (* x 2))
     '(1 2 3 4 5))

Dauguma šiuolaikinių Lisp sistemų turi gausias bibliotekas (pvz., Common Lisp). Kitos, kaip kad Scheme pasirinko kitą kelią -- joms svarbiau sintaksės paprastumas ir aiškumas.

Pavyzdys[taisyti | redaguoti kodą]

Rekursinis faktorialo skaičiavimo algoritmas:

(defun factorial (n)
  (if (<= n 1)
      1
      (* n (factorial (- n 1)))))