Mentre passavo attraverso il libro "Intermediate Perl", ho notato una sezione su Schwartzian Transforms e ho provato l'esempio nell'esercizio (9.9.2), ma ho notato che più esecuzioni hanno portato la trasformazione a impiegare più tempo del normale. Il codice qui esegue una semplice sorta di file nella cartella Windows \ system32 dipende dalla sua dimensione -Quando sono utili le Trasformazioni di Schwartz?
#!/usr/bin/perl
use strict;
use warnings;
use Benchmark;
my $time = timethese(10, {
testA => sub { map $_->[0],
sort {$a->[1] <=> $b->[1]}
map [$_, -s $_],
glob "C:\\Windows\\System32\\*";
},
testB => sub { sort { -s $a <=> -s $b } glob "C:\\Windows\\System32\\*";
},
}
);
L'uscita è -
Benchmark: timing 10 iterations of testA, testB...
testA: 11 wallclock secs (1.89 usr + 8.38 sys = 10.27 CPU) @ 0.97/s (n=10)
testB: 5 wallclock secs (0.89 usr + 4.11 sys = 5.00 CPU) @ 2.00/s (n=10)
La mia comprensione è che, poiché l'operazione di file (-s) deve essere ripetuto più volte nel caso di testB dovrebbe funzionare molto più lentamente di testA. L'output però si discosta da quell'osservazione. Cosa mi manca qui?
Il problema era con sort restituendo un valore scalare come si menziona. La modifica ha risolto il problema. Potresti verificare se l'espressione della mappa è "sbagliata"? Il manuale indica che la mappa funziona come mappa ELENCO BLOCCHI // mappa ESPR, LISTA. Nel mio caso, entrambi funzionano perfettamente. – aks
Pensavo che gli avvertimenti che ho ricevuto fossero stati provocati da quell'uso della mappa. Controllerò. – innaM
Hai ragione. Ma dove sono andati quegli avvertimenti ?? – innaM