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ň