Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

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

by TimToady (Parson)
on Nov 05, 2006 at 05:15 UTC ( [id://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}

Replies are listed 'Best First'.
Re^4: How will you use state declared variables in Perl6?
by BrowserUk (Patriarch) 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
Domain Nodelet?
Node Status?
node history
Node Type: note [id://582285]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chilling in the Monastery: (4)
As of 2024-04-18 07:30 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found