Proměné
                                   -=-=-=-=-

                        I'm a Lisp variable -- bind me!

          Několikrát  jsem se tu zmínil o tom,  že  symboly  jsou  vlastně
      jména pro proměné.  Proměné v Lispu  jsou  dost  odlišné od těch v C
      a jiných  jazycích.  Vznikají a zanikají  automaticky. Lisp  provádí
      tzv.  sbírání  smetí  (garbage  collection). V případě,  že paměť je
      příliš plná, zjistí, které proměné se již nepoužívají (program na ně
      nijak neukazuje) a ty uvolní z paměti. Toto je velká  výhoda  oproti
      většině jazyků, kde se o to člověk musí starat sám.

          Další  rozdíl je v tom, že  proměné  jsou  netypové.  Nejsou  tu
      deklarace a proměná může držet hodnotu libovolného typu.

          Poslední  rozdíl  je, že proměná a její  jméno  spolu  tak  úzce
      nesouvisí.  Běžně tu jsou  anonymní  proměné. Těch jsme už vytvořili
      víc, než dost.  Například  konstrukce (10 20). Vytvoří  hned několik
      anonymních proměných - dvě obsahující cons a dvě pro každou hodnotu.
      Tedy celkem tři proměné.

          My ale proměným  můžeme  přiřadit  jméno. K tomu  slouží  funkce
      define:

      ==> (define ahoj 1)

      ahoj

          Nadefinuje  proměnou  ahoj a přiřadí ji  hodnotu  jedna.  (spojí
      anonymní  proměnou s hodnotou  jedna,  která  vznikla při  provádění
      funkce read z jménem ahoj). Nyní se na ni můžeme normálně odkazovat:

      ==> ahoj

      1
      ==> (write ahoj)
      1
      ()

      K nastavování proměných slouží funkce set!. Například:

      ==> (set! ahoj (+ 1 1))

      2
      ==> (write ahoj)
      2
      ()
      ==> (set! nazdar 1)

      Error: 'nazdar' is undefined; you can't assign to it.


            výheň