[Generale] Re: [Tecnica] Perl e strutture dati multidimensionali

Alex M4DC4T alex71si a hotmail.com
Gio 23 Nov 2006 00:18:25 GMT


Oh.... grazie.... =))))
... ma la frase
"
Quindi l'array esterno è un array di references e l'array interno è
"puntato" dagli elementi di quello interno.
"
forse doveva essere
"
Quindi l'array esterno è un array di references e l'array interno è
"puntato" dagli elementi di quello ESTERNO.
"
?????

Ma praticamente il fatto che non si possano in perl fare array multi 
dimensionali (oltre i due dimensionali, tramite "trucco" dei references, che 
poi non mi sembrano ugualmente bidimensionali, ma solo con una 
reference....) significa che difficilmente si possono fare matrici 
multidimensionali?
E comunque anche nell'ultimo aggiornamento del programma rimangono le cose 
in questo modo?
Grazie
=)))

>On Wednesday 22 November 2006 15:16, Alex M4DC4T wrote:
> > In questi giorni mi sto' facendo una cultura su Perl. Sono arrivato a
> > studiare le strutture di dati multidimensionali (implementabili tramite 
>le
> > references). Purtroppo non e' che ho capito benissimo, e il testo si
> > dilunga poco.
> > Richiesta:
> > c'e' qualche anima pia che ha tempo da perdere (il meno possibile, 
>ovvio)
> > che mi puo' dare una mano a parole?
>
>Premesso il fatto che è un topic da "tecnica" e tra un pò ci cacciano
>da qui ecco la risposta :D
>
>Dal punto di vista di strutture multidimensionali il libro (e il perl)
>ti complica la vita. Prima di tutti sappi che PUOI usare una sintassi
>come:
>
>	$pippo[10][3] = 5;
>	print $pippo[10][3];
>
>Questa sintassi manipola un array multidimensionale (in particolare a due
>dimensioni).
>Lo stesso si può fare per i hash
>
>	$hash{"test"}{"prova"} = 5;
>	print $hash{"test"}{"prova"};
>
>Se ti basta fare questo non leggere oltre: fermati e vivi felice.
>
>Se sei curioso di cosa succede sotto allora eccoti una spiegazione.
>
>Il perl di base NON supporta strutture dati multidimensionali.
>Se vuoi, è un suo difetto (anche se ci si può girare tranquillamente 
>intorno).
>
>In sostanza il perl manegga i seguenti tipi di dati:
>
>- scalari (un numero, una stringa)
>- array ad una dimensione di _scalari_ (quindi array di numeri o di 
>stringhe)
>- hash ad una dimensione di _scalari_ (quindi array di numeri o di 
>stringhe)
>
>Questo significa che un array multidimensionale non lo puoi fare
>e non puoi fare nemmeno un "array di array".
>
>...Che poi, fra parentesi, è interessante notare che in questo tipo di
>linguaggi un array multidimensionale e un array di array (di array...) NON
>sono la stessa cosa mentre in C, in generale, si... vabbeh.
>
>Allora ecco la "magia" (o la menata, dipende da come la vedi) delle
>references.
>
>Dato una variabile qualunque (scalare, array o hash), mediante una
>particolare sintassi (__contorta__) si può ottenere un riferimento
>ad essa, che per definizione è sempre scalare. Il reference è in sostanza 
>una
>sorta di puntatore nascosto.
>
>	perl -e '$scalare = 10; $ref = \$scalare; print $ref; print $$ref;'
>
>Nota che nell'esempio sopra la sintassi $$ref fa il dereferenziamento.
>Il '$' più interno accede al reference contenuto dentro la variabile $ref
>mentre quello più esterno accede al contenuto della variabile referenziata.
>Il doppio $, quindi, è l'operatore di dereferenziamento per scalari.
>
>Questo significa che si può ottenere il reference di un array e dato
>che il reference è scalare si può fare un array di reference ad array.
>
>In sostanza si tratta di fare:
>
>	$ausiliario[3] = 5;          # creo array "interno"
>	$pippo[10] = \@ausiliario;   # all'array esterno assegno il reference
>                                      # a quello interno: nota l'operatore
>	                             # '\' che prende il reference di un array
>	print $pippo[10]->[3];       # accedo tramite reference: nota
>	                             # l'operatore '->' di dereferencing
>                                      # per array e hash
>
>Quindi l'array esterno è un array di references e l'array interno è
>"puntato" dagli elementi di quello interno.
>
>             0   1   2   3   4   5   6   7   8   9   10
>   @pippo = | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |ref|
>                                                      |
>          +-------------------------------------------+
>          |
>          |       0   1   2   3
>   @ausiliario = | ? | ? | ? | 5 |
>
>
>Poi, per rendere le cose usabili ai comuni mortali, la sintassi
>$pippo[10][20] è uno shortcut sintattico per scrivere la roba esposta 
>sopra.
>
>
>	man perlref
>
>	http://www.ifarm.nl/erikt/perl/ln05.html
>
>--
>
>Szymon Stefanek
>
>------------------------------------------------------------------------------
>-
>- Segmentation fault. Brain dumped.
>-
>------------------------------------------------------------------------------


><< attach4 >>




>_______________________________________________
>Generale mailing list
>Generale a liste.siena.linux.it
>http://liste.siena.linux.it/cgi-bin/mailman/listinfo/generale

_________________________________________________________________
Aggiungi i tuoi nuovi contatti di Hotmail anche in Messenger.Con un click! 
http://join.msn.com/hotmail/features-std#6



Maggiori informazioni sulla lista Generale