Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

Re^3: How will you use state declared variables in Perl6?

by TimToady (Parson)
on Nov 05, 2006 at 05:15 UTC ( #582285=note: print w/ replies, xml ) Need Help??


in reply to Re^2: How will you use state declared variables in Perl6?
in thread How will you use state declared variables in Perl6?

Hmm, why a hash? And why not optimize assuming the current value is already in @seen? Also, declarators need not be separate statements. So I'd probably write it like this:

sub fib (Int $n) { return 1 if $n < 2; state @seen[$n] //= fib($n-1) + fib($n-2); }
I think that may be a little clearer as well. If I wanted to golf it just a bit more I'd say:
sub fib (Int $n) { $n < 2 or state @seen[$n] //= fib($n-1) + fib($n-2); }
If I wanted to golf it a lot more I'd say:
my&fib:={$_<2or state@s[$_]//=fib($_-1)+fib $_-2}


Comment on Re^3: How will you use state declared variables in Perl6?
Select or Download Code
Re^4: How will you use state declared variables in Perl6?
by BrowserUk (Pope) on Nov 05, 2006 at 10:39 UTC

    Um. Er...?

    pugs>sub fib (Int $n) { return 1 if $n < 2; state @seen[$n] //= fib($n +-1) + fib($n-2); } Internal error while running expression: *** unexpected "[" expecting word character, "::", "=", ":=", "::=", ";" or "}" at <interactive> line 1, column 52

    Update: This works though

    pugs> sub fib (Int $n) { state @seen; return 1 if $n < 2; @seen[$n] / +/= fib($n-1) + fib($n-2); }; undef pugs> say fib 4; 5 undef pugs> say fib 8; 34 undef pugs> say fib 800; 1121023813016570197539221312040081070329432498024398917379911096096424 +176870242714672419719090010009284331740160122026805305229708722215290 +03044406006693244742562963426 undef

    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.
      You must be running an older pugs. In fact, the current (working) version in the pugs repository (r14657) now reads:
      sub fib (UInt $n) { (state $seen = [0,1,1]).[$n] //= fib($n-1) + fib($n-2); }
      It would also work as state @seen = 0,1,1 except there's a bug with initializing state variables using a list that causes it to reinitialize every time instead of just the first time, which, while it lets it run, kinda defeats the memoization...

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://582285]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others contemplating the Monastery: (5)
As of 2014-07-13 11:11 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    When choosing user names for websites, I prefer to use:








    Results (249 votes), past polls