You are on page 1of 4

Programacin Lisp en espaol

Con la tecnologa de

Traductor de Google

sbado, 9 de febrero de 2013

rboles binarios en Lisp


En lisp, todos los datos en memoria se estructuran de a pares, conocidos como nodos:

En la notacin antigua de lisp, se escriba con puntos as: > '(23 . 99) > (23 . 99) 23 es el elemento de la izquierda y 99 el de la derecha

Para acceder al elemento de la izquierda usamos CAR, y para acceder al elemento de la derecha usamos CDR. > (car '(23 . 99)) 23 > (cdr '(23 . 99)) 99 De esta manera todos los tipos de datos se estructuran a partir de nodos, solo que actualmente se omite el punto. As las listas son nodos encadenados:

Del mismo modo las funciones, tienen estructura de lista, solo que estas se evalan. Revista Mundo Linux n 85 - Articulo sobre lisp

Arboles binarios
Para crear rboles usamos los nodos. La figura siguiente es un rbol binario:

Para hacerlo mediante nodos:

Es fcil construirlo en Lisp, (voy a usar la notacion con puntos, pues me resulta mas cmodo) Las ramas van separadas por puntos y entre parntesis > (set 'arbol '(1 . ((2 . nil) . (3 . nil)))) (1 (2) 3)

;;; a la variable arbol le asignamos el arbol binario Por convencin el elemento de la izquierda del nodo tendr el valor y el elemento de la derecha apuntar hacia otro nodo, o bien apunta a NIL. Para acceder a la raz usamos CAR: > (car arbol) 1 Para acceder al nodo 2, por ejemplo, primero usamos un (CDR arbol), que nos situa en el nodo que contiene las direcciones de los nodos (2 . nil) y (3 . nil). Luego un CAR (que lo envuelve) nos lleva al nodo (2 . nil). Por ltimo un CAR devolver el elemento 2, si usramos CDR aca, nos devolvera NIL.

> (car (car (cdr arbol))) 2 Dejo al lector como ejercicio, que intente acceder al elemento 3. Debido a que los valores estn a la izquierda, siempre que queramos acceder un dato, habr un CAR que envuelva a toda la expresin. Veamos un rbol con mas hojas:

En Lisp, se ve as:

Se guarda as: > (set 'arbol '(1 . ((2 . ((4 . nil) . (5 . nil))) . (3 . ((6 . nil) . (7 . nil)))))) (1 (2 (4) 5) 3 (6) 7) Para recorrer este rbol usamos CAR y CDR, como vimos anteriormente. Para acceder a 5 sera asi: > (car (cdr (cdr (car (cdr arbol))))) 5 Dejo al lector que intente acceder a los dems elementos. Bien de esta manera, podemos crear cualquier tipo de estructura que se nos ocurra. Las funciones para recorrerlas y agregar elementos no seran muy complicadas. Nos evitamos el hecho de tener que manejar punteros y/o variables de tipo puntero.