On Mon, Dec 09, 2002 at 01:58:11PM -0800, Austin Hastings wrote:
> --- Adam Turoff <[EMAIL PROTECTED]> wrote:
> > I think you're trying to overoptimize something here.  I can't see
> > a benefit to caching only sometimes.  If there is, then you probably
> > want to implement a more sophisticated cache management strategy
> > for your sub, not warp the language for a special case.
> 
> Ahh. This is better. How does one implement a more sophisticated cache
> management strategy?

By memoizing specific cases by hand, of course.  :-)

> That is, what is the mechanism for manipulating the run-time system
> behavior of subs?

Memoization does not have to involve manipulating runtime behavior.
However, manipulating runtime behavior is a simple, generic and
effective way to memoize random subs.

Here's an example of a memoizing only the values for 'feb'. 
Schwern's solution is simpler and easier to read though.

{
    ## start of a lexical scope to hide %feb_cache
    my %feb_cache;
        
    sub days_in_month(Str $month, Int $year) {
      $month = lc $month;
      if $month eq 'feb' {                 
        unless $feb_cache{$year} {
            my $leap = $year % 4 == 0                                         
                && ($year % 100 != 0 || $year % 400 == 0);
            $feb_cache{$year} = $leap ? 29 : 28;
        }
        return $feb_cache{$year};
      } else {   
        return %days{$month};
      }                                                           
    }
}

Z.

Reply via email to