Typy
                                     -=-=-=-

                     God is real, unless declared integer.

          Scheme zná několik typů. Nejzákladnější jsou atomické  typy. Jak
      jméno napovídá, jedná se o základní nedělitelné typy. Základní atomy
      ve Scheme jsou:

      číslo
          číslo může být jak celé tak desetiné. (například 27, nebo
          3.14159). Čísla se vždycky vyhodnocují samy do sebe.
      nil
          Zase typ, kerý se vyhodnocuje sám do sebe. Znamená prázdný seznam,
          ale o tom až později
      symbol
          Symbol je libovolná posloupnost znaků (například ahoj). Symboly
          se vyhodnocují do hodnoty proměné, která jim odpovídá.

          Scheme podporuje i další atomy (stringy apod.) ale zatím to není
      důležité.

          Scheme má jediný  důležitý  složený  typ.  Tím je cons.  Není to
      ale žádný  komplikovaný  typ, ale ten  nejjednodušší, co si dokážete
      představit. Jako struktura v C může obsahovat  několik  hodnost. Ale
      narozdíl od C obsahuje  právě dvě hodnoty.  První hodnota se jmenuje
      car,  druhá  cdr. To je z historických  důvodů. Na počítači, kde byl
      Lisp implementován byl registr dělen do dvou části (context  address
      register a context data register).

          Zápis  cons je  násedující: ( první  hodnota . druhá  hodnota ).
      Například:

      (10 . ahoj)

          Je cons obsahující 10 na pozici cdr a symbol ahoj na pozici car.
      První i druhá hodnota může být libovolného typu, tedy i cons. Ale to
      už je další kapitola:


                                     Listy
                                    -=-=-=-

                 A list is only as strong as its weakest link.
                                  -- Don Knuth


          Listy  vznikají  spojením  cons.  Protože  hodnota může být opět
      cons, můžu napsat třeba:

      ((10 . 20) . (50 . 20)

          Ale  to už  nahrává k nejdůležitější  konstrukci  Lispu - listům
      (jednosměrně  vázaným  seznamům).  Pokud  car  bude  vždy  obsahovat
      hodnotu a cdr odkaz na další cons  (další  hodnotu v seznamu),  můžu
      vytvořit  klasický list. Za konec  seznamu se považuje  odkaz na nil
      (prázdný seznam). Tedy například:

      (10 . (20 . (30 . nil)))

          Je seznam  obsahující  hodnoty 10, 20 a 30. Aby se ale  ušetřilo
      závorek, funguje i zkrácený zápis:

      (10 20 30)

          Samozřejmě, že listy mohou obsahovat i další listy:

      (10 (20 20 30) 30)

          apod. No a právě  list je  nejdůležitější  věc  Lispu.  (Lisp se
      podle něj i jmenuje. Název znamená List procesing  language) List má
      totiž speciálně zadefinované vyhodnocování. Pokud se narazí na cons,
      první hodnota se bere jako jméno funkce a další jeko její parametry.
      My zatím známe  pouze funkce  read,  write a eval. Hned si tu můžeme
      vyzkoušet jejich chování:


      ==> (write 50)
      50
      ()


          Co to znamená? No já jsem zadal list  (write 50).  Interpretr si
      ho přebral takto: write - symbol, po vyhodnocení  dostal  funkci, 50
      - číslo, po vyhodnocení  dostal zase číslo.  Zavolal tedy write(50).
      Ta vypsala  hodnotu 50 na obrazovku.  protože ale musí něco  vrátit,
      vrátila nil. Jak jsem už říkal, nil znamená prázdný seznam. (může se
      tedy zapisovat i jako ())


            výheň