Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re^2: Variable number of foreach loops

by abhay180 (Acolyte)
on Nov 27, 2013 at 17:56 UTC ( #1064672=note: print w/ replies, xml ) Need Help??


in reply to Re: Variable number of foreach loops
in thread Variable number of foreach loops

Thanks a lot. BTW what is the third argument($i) nFor( $n-1, @_, $i ) doing here?


Comment on Re^2: Variable number of foreach loops
Re^3: Variable number of foreach loops
by BrowserUk (Pope) on Nov 27, 2013 at 18:04 UTC
    BTW what is the third argument($i) nFor( $n-1, @_, $i ) doing here?

    As the sub recurses, one of the array references is remove from the front of @_ at each level, and the current value being iterated by the for loop at that level is added to the end.

    Once $n == 0, all the array references have been removed and $n has been shifted off, all that is left in @_, is the set of elements to be printed.

    BTW. Here is a cleaner implementation that takes a callback to which the results sets are passed:

    #! perl -slw use strict; sub nForX(&@) { my $code = shift; my $n = shift; return $code->( @_ ) unless $n; for my $i ( @{ shift() } ) { &nForX( $code, $n-1, @_, $i ); } } my @a = 1..10; my @b = 'a'..'z'; my @c = map chr, 33 .. 47; nForX { print join ' ', @_; } 3, \( @a, @b, @c );

    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.
      thanks a lot. yes i get it now. In the same light.....i want to call nfor() with different number of arguments...
      nfor(1,\@a_1); nfor(2,\@a_1,\@a_2); nfor(3,\@a_1,\@a_2,\@a_3);...so on nfor(N,\@a_1,\@a_2,...\@a_N).
      I have a way...but what to check if there is a much crispier way to do it.

        Where will you get the variable number of arrays from? And how will you be storing them?


        With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        "Science is about questioning the status quo. Questioning authority".
        In the absence of evidence, opinion is indistinguishable from prejudice.

        If you store your arrays (more specifically references to your arrays) in an array, you can say

        my @arrayOfArrays = ( \@a_1,\@a_2,...,\@a_20 ); my $n = 10; nfor( $n, @arrayOfArrays[ 0..$n-1 ] );

Log In?
Username:
Password:

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

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

    For retirement, I am banking on:










    Results (221 votes), past polls