(       (((((    (((    ((((
                           )        )     (        )  )
                          (        (       (((    ((((
                           )        )         )    )
                          (((((   (((((    (((    (

        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ň