Note that your solution effects a mapping of x -> y, not from x -> y
-> #t.  That gets the job accomplished correctly, but doesn't reflect
the original Perl code.  For a fair comparison, you have to change the
perl code to match, and then it runs in 1/3 of the memory and 1/2 the
time of the original perl code.

This is what I mean concretely:

print "Filling the array with 250000 entries.\n";
foreach $n (0 .. 250000) {
 $x = int(rand(500000));
 $y = int(rand(500000));
 $a{$x} = $y;                     # change to one-level hash
}

print "Reading from the array 10000 times\n";
$hits=0;
foreach $n (0 .. 10000) {
 $x = int(rand(500000));
 $y = int(rand(500000));
 if (exists $a{$x} and $a{$x} == $y) {  # quell warning on undef
   $hits++;
 }
}

print "Done (hits $hits)\n";

On Sun, Aug 24, 2008 at 5:56 AM, Elf <[EMAIL PROTECTED]> wrote:
>
> for an improvement in time (surprisingly), use
>
> (define a
>    (alist->hash-table
>        (let loop ((i   0)
>                   (r   '()))
>            (if (fx= 250000 i)
>                r
>                (loop (fx+ 1 i)
>                      (cons (cons (random 500000) (random 500000)) r))))
>        =))


_______________________________________________
Chicken-users mailing list
Chicken-users@nongnu.org
http://lists.nongnu.org/mailman/listinfo/chicken-users

Reply via email to