Práctica: La Función memoize

El siguiente código muestra una forma de obtener un ''memoizador'' de propósito general:

sub memoize {
  my $func = shift;

  my %cache;
  my $stub = sub {
    my $key = join ',', @_;
    $cache{$key} = $func->(@_) unless exists $cache{$key};
    return $cache{$key};
  }
  return $stub;
}
En las secciones 4.15.9 y 4.15.10 vimos como usando typeglobs selectivos podemos instalar en la tabla de símbolos un wrapper de una función dada. Nótese que la funcionalidad del módulo Memoize cae dentro de la categoría del wrapping. Utilice la misma técnica para sustituir una función por su memoizada.

Casiano Rodríguez León
2009-10-04