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ň