Lisp: Porovnání verzí

Smazaný obsah Přidaný obsah
SieBot (diskuse | příspěvky)
m robot změnil: hr:Lisp
Xqbot (diskuse | příspěvky)
m robot přidal: mn:Lisp; cosmetic changes
Řádek 3:
Z Lispu jsou odvozeny i další jazyky - například [[Tcl]], [[Smalltalk]] nebo [[Scheme]]. Tvůrce jazyka je [[John McCarthy (informatik)|John McCarthy]].
 
== Syntaxe ==
 
Základním zápisem v Lispu je seznam. Zapisuje se tímto způsobem:
Řádek 22:
Co se seznamem Lisp udělá, záleží na okolnostech.
 
=== Příkazy ===
 
Příkazy jazyka Lisp se zapisují také jako seznam, jehož první prvek seznamu je název příkazu.
Řádek 33:
Interpret odpoví '''6'''.
 
== Ukázka kódu ==
 
Program [[hello world]] lze zapsat několika způsoby. Nejjednodušší vypadá takto:
Řádek 64:
Návratovou hodnotou funkce bude hodnota 720.
 
== Makra ==
Lisp má jako jeden z mála jazyků propracovaný systém maker, díky kterým lze velmi výrazným způsobem ovlivnit celý jazyk. Makra jsou nejprve načtena v READ části REPLu, následně je provedena makroexpanze (tu provádí preprocesor) a až poté je celý výraz vyhodnocen běžnou EVAL částí. Nemá smysl uvažovat o aplikaci makra, v době vyhodnocení výrazu již žádné makro neexistuje. Makro pouze přepisuje text/kód předtím, než se předhodí k vlastnímu vyhodnocení. Zásadní rozdíl mezi makrem a funkcí pak je, že makro nevyhodnocuje své argumenty při zavolání funkce.
 
=== Quote, Unquote, Quasiquote ===
Abychom mohli makra vůbec používat, musíme mít nějaké nástroje k transformaci kódu. Běžně se používá speciální operátor <code>quote</code>, který vrátí následný výraz tak jak mu ho předáme — žádnou část nevyhodnotí. Jako syntaktický cukr můžeme použít apostrof <code>'</code>.
 
Řádek 109:
</source>
 
=== Základní práce s makry ===
Makra se vytvářejí pomocí speciálního operátoru <code>defmacro</code>. Nejjednodušší příklad může být definice vlastní podmínky, vlastního ifu. Pomocí makra by to vypadalo následovně:
 
Řádek 157:
</source>
 
=== Problémy spojené s makry ===
Při používání maker si musíme dávat pozor na dva klasické problémy — '''dvojí vyhodnocení''' a '''symbol capture'''. Představme si if, který v true větvi automaticky vrátí výsledek podmínky a ve false větvi vrátí předaný argument. Ukázka, jak by to mělo fungovat:
 
Řádek 228:
</source>
 
== Externí odkazy ==
* [http://www.root.cz/clanky/jemny-uvod-do-lispu/ Jemný úvod do LISPu]
* [http://www.ucw.cz/~hubicka/skolicky/skolicka6.html Hubičkova školička o Lispu]
Řádek 271:
[[lv:Lisp]]
[[ml:ലിസ്പ്]]
[[mn:Lisp]]
[[ms:LISP]]
[[nl:Lisp (programmeertaal)]]