( ((((( ((( (((( ) ) ( ) ) ( ( ((( (((( ) ) ) ) ((((( ((((( ((( ( 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ň