Vie Jun 10, 2005 8:13 am
|
 |
macgregor
Perlero Frecuente

|
Registrado: 09 Dic 2004
Mensajes: 117
Ubicación: españa
|
|
|
|
|
Hola a todos.
Muchas veces me resulta dificil a veces entender lo que me dicen por las palabras que utilizan.
Por ejemplo cuando PerlUser habla de listas no lo entendia, yo entiendo que @_ es un vector, array, arreglo pero no una lista.
Entiendo que estos pequeños problemas para entendernos es por la forma diferente que tenemos para expresarnos.
(por cierto PerlUser tienes mas razon que un santo, debia haber puesto $_[0] para recoger el valor que recibe la funcion pero utilize el signo @, no fue por ignorancia, simplemente fue un error. De todas formas gracias por tu ultima aclaracion, ahora entiendo lo que decias.)
Para mi una lista es una estructura de nodos, cada nodo contiene un dato o varios, mas un puntero al siguiente elemento.
Si la lista es doblemente enlazada tenemos la estructura con un nodo y dos punteros, uno a siguiente y otro al anterior. (de forma que se puede avanzar y retroceder)
En ambos casos siempre tenemos un puntero al primer elemento y segun la funcionalidad que se desee un puntero al ultimo.
Dependiendo de como la definamos y las operaciones que permitamos hacer, en realidad estaremos creando una lista, una cola, una pila o incluso un buffer circular. (si el puntero a siguiente del ultimo nodo apunta al primer nodo)
Esta estructura en realidad es parecida a un vector o arreglo, es mas lenta a la hora de acceder ya que hay que recorrer nodo a nodo desde el principio hasta el que queremos.
Sin envargo es mucho mas rapida si se necesita una estructura ordenada y se van a realizar muchas inserciones, ya que permite realizar inserciones ordenadas de nuevos nodos sin tener que desplazar elementos (como sucede en un vector).
Despues de esplicar esto (que espero que sirva a alguien con ganas de experimentar programando) me gustaria saber como llamarian ustedes a esta estructura
Un saludo. |
|
|
|

Vie Jun 10, 2005 10:45 am
|
 |
Perl user
Maestro Honorario

|
Registrado: 03 Nov 2004
Mensajes: 385
|
|
|
|
|
| macgregor escribió: | Hola a todos.
Muchas veces me resulta dificil a veces entender lo que me dicen por las palabras que utilizan.
Por ejemplo cuando PerlUser habla de listas no lo entendia, yo entiendo que @_ es un vector, array, arreglo pero no una lista.
|
Es correcto que lo llames de esa manera también( es decir vector, array, arreglo )
| macgregor escribió: |
Para mi una lista es una estructura de nodos, cada nodo contiene un dato o varios, mas un puntero al siguiente elemento.
Si la lista es doblemente enlazada tenemos la estructura con un nodo y dos punteros, uno a siguiente y otro al anterior. (de forma que se puede avanzar y retroceder)
En ambos casos siempre tenemos un puntero al primer elemento y segun la funcionalidad que se desee un puntero al ultimo.
|
No, creo que alli es donde tenemos exactamente el problema, y creo que si es confusión tuya. La estructura que tu mencionas es una LISTA LIGADA ( linked list ), aquí y en China, así se llama, en cualquier paper que te encuentres sobre estructuras de datos ( en especial TDA's ), encontrarás que una lista ligada es una estructura de datos abstracta que contiene nodos, cada nodo esta ligado uno a otro por una o dos ( doubly ) ligas hacia adelante y/o hacía atrás ( circular ) dependiendo de las necesidades. Si son apuntadores o no es lo de menos, aquí la implementación dependen del lenguaje, pero lo que define un tipo de dato son sus operaciones.
Una lista en sí, es un conjunto de elementos, en este caso en Perl, una lista es un conjunto de elementos que pueden o NO ser mutables, al igual que en python, hay listas inmutables. Un array, arreglo en Perl es una lista de elementos ( ojo... lista, no lista ligada ), la cual contiene elementos únicos de valores ( escalares ). Pero.... aquí viene el pero... no forzosamente una lista está siempre en un @, ejemplo:
| Código: |
my @a = ( 1, 2, 3, 4 ); # lista de números, puede ser mutable
( 1, 2, 3, 4 ); # lista inmutable de números
foreach( @a ) .... # iteracion sobre @a
foreach( ( 1, 2, 3, 4 ) ) .... # iteración sobre una lista inmutable
|
Ves la diferencia? Y esto nos lleva a la conclusión de que a un arreglo SIEMPRE le asignas una lista, de esta manera la lista puede ser mutable. Y la mayoría de las operaciones para arreglos son aplicables a listas mutables ( arreglos mismos ) y listas inmutables.
| macgregor escribió: |
Dependiendo de como la definamos y las operaciones que permitamos hacer, en realidad estaremos creando una lista, una cola, una pila o incluso un buffer circular. (si el puntero a siguiente del ultimo nodo apunta al primer nodo)
|
Lo que estas definiendo son tipos de datos abstractos, un arreglo jamás es considerado un tipo de dato abstracto, es un tipo de dato compuesto. Siempre contendrá elementos del mismo tipo.
| macgregor escribió: |
Esta estructura en realidad es parecida a un vector o arreglo, es mas lenta a la hora de acceder ya que hay que recorrer nodo a nodo desde el principio hasta el que queremos.
Sin envargo es mucho mas rapida si se necesita una estructura ordenada y se van a realizar muchas inserciones, ya que permite realizar inserciones ordenadas de nuevos nodos sin tener que desplazar elementos (como sucede en un vector).
|
No se que a que estructura te refieras aquí, pero nuevamente un vector/arreglo es completamente diferente a una lista ligada.
Saludos,
PD. te recomiendo checar un buen libro de Estructuras de Datos, y un libro de compiladores para que cheques el verdadero significacion de un tipo de dato, y sus abstracciones. Ahora bien si quieres ver la implementación de una lista ligada en Perl, escribe lo siguiente:
| Código: |
perldoc -q linked list
perldoc -q circular list
|
|
|

Vie Jun 10, 2005 2:33 pm
|
 |
kidd
Creador de Perl en Español

|
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
|
|
|
|
|
Hola:
Si te interesa realmente saber como funcionan internamente los arrays en perl, te recomiendo que leas el siguiente artículo que se llama "PerlGust Illustrated", en él encontrarás como funcionan las variables en perl, dentro de ello los arreglos:
http://gisle.aas.no/perl/illguts/
Estructura de un AV Array Value
SALUDOS |
|
Vie Jun 10, 2005 3:33 pm
|
 |
Perl user
Maestro Honorario

|
Registrado: 03 Nov 2004
Mensajes: 385
|
|
|
|
|
No creo que realmente le sirva ver Perl internals... lo que es importante recalcar es simplemente qué es un arreglo/lista y cómo se utilizan, y para ello perl internals no ayuda mucho a entenderlo.
Pero bueno, ya hablando de internals, yo recomiendo "Extending and Embedding Perl" de Simon Cozens editorial Manning. Y como lo actual es trabajar con parrot, adelante con parrot internals. ( TODO: Echarle un ojo a Haskell )
Saludos, |
|

Vie Jun 10, 2005 4:10 pm
|
 |
kidd
Creador de Perl en Español

|
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
|
|
|
|
|
Muy bien, es hora de otro corte comercial en el foro de "Perl en Español":
Extending and Embedding Perl de Tim Jenness, Simon Cozens
$$ Comprar Ahora
NOTA: Recuerden que si compran libros por este medio, ayudan al sitio de Perl en Español
P.D: Marco me impresiona la cantidad de libros que has leído. Yo también soy un fan de leer libros para mi aprendizaje, ya llevo varios, aunque todavía me faltan muchos  |
|
Vie Jun 10, 2005 4:19 pm
|
 |
Perl user
Maestro Honorario

|
Registrado: 03 Nov 2004
Mensajes: 385
|
|
|
|
|
No no... claro que no he leído absolutamente todos, muchos son recomendaciones porque a) o conozco a los autores ( en persona o por medios electrónicos ) y/o tengo el libro o b) Recomendaciones de la misma gente.
Pero, es un hecho que si he leído muchos libros, y sigo leyendo. Es un vicio que tengo, comprar/leer.
Saludos, |
|
Jue Jun 15, 2006 1:33 pm
|
 |
ramiro
Perlero Nuevo

|
Registrado: 15 Jun 2006
Mensajes: 1
Ubicación: bolivia
|
|
|
|
|
| ayuda para generara la sucesion de numeros primos de forma recursiva |
|
Jue Jun 15, 2006 3:25 pm
|
 |
creating021
Vive para Perl en Español

|
Registrado: 23 Feb 2006
Mensajes: 486
Ubicación: Frente al monitor
|
|
|
|
Powered by phpBB © 2001, 2005 phpBB Group
|