[Programación] Re: [Programación] Re: [Programació n] Seguirmos con el perl,,,,

Nicolás Aimetti programacion@lugro.org.ar
Fri, 09 Dec 2005 15:08:32 +0000


> Me respondo a mi mismo... lo resolví al estilo C....
> for($i=0;$i<$NR;$i++){
>     # print "$A[$i] # $S[$i] \n";
>     $C[1][$i]=$A[$i];
>     $C[2][$i]=$S[$i];
> }
> for($i=0;$i<$NR;$i++){
>     print "$C[1][$i] # $C[2][$i] \n";
> }

Bueno, por lo visto llego tarde mi respuesta anterior...


> Ahora bien respecto al uso del comando sort... no
> entiendo un carajo de como funca...


Es muy parecido al qsort de C...

La funcion sort toma como primer parametro una funcion
f: ( $a, $b) -> [ -1 | 0 | 1], o sea una función que toma como argumento 
dos elementos y devuelve -1 si el elemento $a < $b, 0 si $a = $b y 1 si 
$a > $b.
Como segundo argumento toma el arreglo a ordenar.

Luego usando esta función ordena el array.

En perl está función se puede especificar mediante un bloque {}, algo 
parecido a las funcines lambda, o anonimas en los funcionales... pero 
sólo parecido, es un poco bastante menos poderoso... igual en perl hay 
otras formas de generar funciones anonimas...

bueno, sin irno del tema...

cuando uno hace
sort { $a <=> $b } @a;
está todo dicho... faltaría aclarar nomás (y esto si no es obvio) que 
perl hace un binding en la variable $a del primer valor que toma f, y lo 
mismo con $b y el segundo valor. Esto esta predefinido en el lenguaje 
(son $a y $b), y el operador <=> devuelve -1 si $a < $b, 0 si son 
iguales y 1 si $a > $b.


Saludos,
        Nicolás.