( ((((( ((( ((((
) ) ( ) )
( ( ((( ((((
) ) ) )
((((( ((((( ((( (
A LISP programmer knows the value of everything, but the cost of
nothing.
-- Alan Perlis
LISP -- Lots of Irritating Superfluous Parentheses
V prvním (čti nultém) číslu Výhně se o této rubrice psalo,
že bude obsahovat programování všeho druhu. Ale pořád tu vidím
jenom C, Pascal, C++, assembler, případně Delphi. Na ostatní jazyky
se úplně zapomíná. A přitom opravdoví programátoři používají LISP!
Možná si teď říkáte, jakou pak vykopávku tu na vás tahám. Ale snad
do konce tohoto článku zjistíte, že je to jazyk v mnoha směrech
dodnes nepřekonaný. Doby, kdy se vyráběly Lispové procesory, Lisp
řídil raketoplány a vyráběl pračky jsou asi definitivně pryč. Přesto
se ale Lisp stále drží a má mnoho svých příznivců a ti mají pro to
své důvody.
Jeho jedninečná vlastnost je to, že je sice naprosto jednoduchý,
ale umožňuje libovolně složité programátorské konsturkce. Například
podpora pro objektové programování nevyžadovala žádné změny
v interpretru, jenom přidání knihovny CLOS.
Trocha historie
O Lispu se nedá říct, že by byl stařeček, ani dinusourus mi
nepřipadá přiliš vystihující, spíše by se dalo mluvit o trilobitu.
Je to neuvěřitelné, ale od roku 1955, kdy byl Lisp vymyšlen,
uběhlo celých 43 let. Vymysleli ho pánové z Laboratoře pro umělou
inteligenci na MIT (tedy z ústavu, kde vzniklo X window, GNU
projekt, Emacs a další) Za svoji dlouholetou historii prošel mnoha
změnami. Podobně jako v BASICu vzniklo mnoho částečně odlišných
verzí (dialektů). Mezi nejznámější patří Common Lisp. Ten popsal
pan Guy L. Steele asi na 1000 stránkách své knihy Common LISP: the
Language z roku 1984. Další známý dialekt je scheme. Ten je mnohem
novější a jednodušší. Interpretr scheme může mít asi 180 KB. Navíc
má scheme mnoho zajímavých vlastností a tak jsem si tento dialekt
vybral.
I Dodnes je dobré Lisp znát. Pro svoji jednoduchost a sílu je
ideální jako jazyk pro rozšiřování různých programů. U free sofwtaru
programy obsahující Lisp jsou například: Emacs, GIMP (GNU Image
Manipulation Program) a další, mezi takové komerční programy patří
například autocad. Dodnes se některé velké projekty programují přímo
v Lispu apod... Přesto, že se to nezdá je lisp dodnes docela živý
jazyk. Je ideální pro různé experimentování.
Free interpretry scheme jsou: guile (od GNU), umb-scheme,
nebo SIOD (scheme in one defun). Interpretry common lispu jsou: gcl,
cmlisp. Gcl navíc je i překladač do C, cmlisp umí překládat do
bytecodu a i pro scheme překladače do C existují.
O co se jedná?
Lisp je funkcionální jazyk. Tedy není založen na instrukcích.
Všechno je volání funkcí, které mají parametry a návratovou hodnotu.
Charaketristické pro funkcionální jazyky je také to, že funkce
nemají vedlejší efekty (nemění žádné proměné vyjma návratové
hodnoty).
Interpretr
Abych mohl vysvětlit, proč je Lisp tak krásným jazykem, je nutné
napřed pochopit základy. Proto mějte trochu trpělivosti...
Klasický je Lisp interpretovaným jazykem. Přesto, že existují
relativně dobré překladače, Lisp má větší možnosti, než C a tak
překlad není 100%.
Interpretr se skládá ze tří funkcí - funkce read, která
převádí textový zápis do proměné (tedy pokud vidí text "100",
dojde k závěru, že se jedná o číslo, a vytvoří číselnou proměnou
z hodnotou 100). Druhá funkce - write funguje opačně. Vezme proměnou
a její hodnotu převede to textové podoby. Třetí funkce eval proměné
vyhodnocuje.
Interpretr běží v nekonečné smyčce a volá funkce read, eval a
write. Takže pokud například na vstup zadáte "100", funkce read
hodnotu načte do paměti, funkce eval číslo nezmění a funkce write
opět vypíše. A tak interpretr odpoví také "100".
- Typy
- Základní funkce
- Proměné
- Funkce a lambda calculus
- Příklad
- Některé zajímavé konstrukce
- HH -
hubicka@freesoft.cz
výheň