Lisp

A Programozás Wiki wikiből

A Lisp programozási nyelvet (valójában nyelvcsaládot) eredetileg rekurzív függvények absztrakt ábrázolására tervezték. A Lisp nyelvek fő adatstruktúrája a láncolt lista, maga a Lisp név is az angol "List processing", vagyis listafeldolgozás kifejezésre vezethető vissza. A Lisp nyelvjárásainak közös sajátosságai a listakezelés mellett a futásidejű típusosság, a funkcionális programozásra jellemző jegyek, valamint a programkód adatként való manipulálhatósága.

A Lisp program egymásba ágyazott listákból, ún. S-kifejezésekből (S-expression, sexp) áll. Az egyszerű szintaktikája miatt egyszerű hozzá elemző- és metaprogramokat írni. Az emberi szem ugyanakkor könnyen elveszik a nyitó- és csukózárójelek dzsungelében. Erre utal a Lisp betűszó vicces kifejtése is: Lots of Irritating Superfluous Parentheses - vagyis: sok zavaró felesleges zárójel. Ugyanakkor a zárójeles leírásnak vannak alternatívái: pl. XMLisp.

Történet[szerkesztés]

A Lisp-et John McCarthy alkotta meg a MIT-en, 1958-ban. Eredményeit 1960-ban publikálta.

Az első értelmezőt Steve Russell készítette, mely egy IBM 704 típusú számítógépen futott.

Virágkorát az 1970-es években élte a nyelv, amely rugalmassága okán népszerű lett a mesterséges intelligencia kutatásban. A fokozatosan távolodó nyelvjárások egységesítésére teremtették meg a Common Lisp-et, mely a Scheme nyelvvel együtt a ma legelterjedtebb.

Alapvető szintaxis[szerkesztés]

A Lisp-ben minden adatot és utasítást kifejezések formájában írunk le, ezért a Lisp-et kifejezésorientált nyelvnek nevezzük. Amikor az értelmező egy kifejezést kiértékel, az eredmény egy érték vagy értékek listája, mely egy újabb kifejezésbe ágyazható vagy kifejezésként önmaga is kiértékelhető.

McCarthy cikkében két kifejezést különböztetett meg, a szimbolikus kifejezéseket (S-kifejezéseket) és a metakifejezéseket (M-kifejezéseket). A metakifejezések S-kifejezéseket alakítanak át újabb S-kifejezésekké. A metakifejezések nem nyertek széles támogatottságot, a legtöbb mai nyelvjárás S-kifejezéseket használ az adatok és a kód manipulálásához is.

A függvényeket is listákként definiáljuk, így akként is kezelhetők. Ez lehetővé teszi, hogy egyszerűen készítsünk metaprogramokat, vagyis programokat generáló programokat. Számos Lisp változat teszi lehetővé makrók készítését, melyek tulajdonképpen függvényeket generáló, paraméterezhető függvények.

Az értékek típusa implicit módon adott.

A listát zárójelek határolják, elemeit szóköz választja el egymástól.

    (2 8 "Józsi")

A list függvény visszaadja az argumentumaiból alkotott listát. Alább a list függvényt hívjuk.

    (list 7 18 21 "Katácska", "Béla")

Az operátorokat szintén prefixként írjuk, hasonlít a függvényhíváshoz. Alább három számot adunk össze.

    (+ 17 3 28)

Az üres listát "üresen" írjuk, vagy egyszerűen a nil kulcsszót használjuk.

    ()
    nil

A listák egymásba ágyazhatóak. Az alább látható kifejezés értéke (1 2 (3 4 5)) lesz - egy három elemű lista, melynek a harmadik eleme egy szintén háromelemű lista!

    (list 1 2 list(3 4 5))

Külső hivatkozások[szerkesztés]