17.6. Teorema fundamental de la ambigüedad

Una parte de imprimeAlReves podría habernos sorprendido:

   1: cabeza = lista
   2: cola = lista.siguiente

Después de la primera asignación, la cabeza y la cola tienen el mismo tipo y el mismo valor. Así que, ¿para que hemos creado un nueva variable?


La razón es que las dos variables desempeñan papeles diferentes. Pensamos en la cabeza como una referencia al primer nodo de la lista. Estos “papeles" no forman parte del programa, sino que están en la mente del programador.


En general no podemos decir con solo mirar un programa que papel desempeñara un variable. Esta ambigÄuedad puede ser útil, pero también puede dificultar la lectura del programa. A menudo usaremos nombres para las variables como nodo y lista para explicar como queremos usar una variable y a veces creamos variables adicionales para eliminar ambigüedades.


Podríamos haber escrito imprimeAlReves sin cabeza ni cola, que lo haría mas conciso, pero posiblemente menos claro:




   1: def imprimeAlReves(lista) :
   2:     if lista == None : return
   3:     imprimeAlReves(lista.siguiente)
   4:     print lista,

Mirando esas dos llamadas, hemos de recordar que imprimeAlReves trata sus argumentos como una colección y print los trata como a un solo objeto.


El teorema fundamental de la ambigüedad indica que la ambigüedad que es inherente a una referencia a un nodo:


Una variable que hace apunta a nodo puede tratar a este nodo como un objeto o como el primero de una lista de nodos.

0