Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Re^3: howto map/grep a complex structure

by AnomalousMonk (Archbishop)
on Aug 27, 2015 at 14:03 UTC ( [id://1140208]=note: print w/replies, xml ) Need Help??


in reply to Re^2: howto map/grep a complex structure
in thread howto map/grep a complex structure

I can't say I agree with the overall approach of trippledubs here, but I think the use of prototypes therein can be said to have a constructive and well understood purpose.

As written,  collectLeaves() is recursive, and within the function the calls such as
    &collectLeaves( $_, $leaves ) for ( @{$ds} );
serve the purpose of suppressing prototype checking so the  $leaves reference can be passed in recursive calls.

Outside the function, prototyping allows calls like
    my @wanted = grep { $_ == 7 } collectLeaves $hashref1, collectLeaves $hashref2;
to be made, while
    ... collectLeaves($hashref1, $hashref2) ...
will fail to compile.

c:\@Work\Perl\monks>perl -wMstrict -le "sub S ($) { return $_[0] + print 0+@{$_[0]}, ' elements in ', 0+$_[0] +; } ;; print S [], S [42], 33; " 0 elements in 7450732 1 elements in 30219348 74507333021934933
(But  S([],[42]) will not compile.)

Again, I don't say I necessarily agree with the approach, but I cannot agree that prototyping has been sprinkled thoughtlessly onto the code as a kind of magical correctness dust, as we have often seen. OTOH, I agree with you that the response of future maintainers to this code (or recursive functions in general) is a valid concern.


Give a man a fish:  <%-{-{-{-<

Replies are listed 'Best First'.
Re^4: howto map/grep a complex structure
by trippledubs (Deacon) on Aug 27, 2015 at 21:50 UTC
    Hi Anomalous! Thank you for discerning that it is not on accident! Why do you not necessarily agree with this approach? The nihilist in me says I shouldn't care yet the objectivist wants to improve..

      Anonymonk originally posted a for-loop approach to processing a data structure, then asked for ways to make it more "elegant" with map and grep. Several Monks opined that, for several reasons, the for-loop code was perfectly good as it was and needed no ornamentation. I strongly agree.

      Anon then replied "Ok, point taken, but I'd still appreciate some map/grep examples." The implication I took was that approaches other than map/grep would also be of interest. Several Monks responded with examples, including your recursive approach. I strongly approve these efforts; this is a teaching/learning site, after all.

      So we come down to two questions that are somewhat at cross-purposes: "What's the best code for this specific application?" and "What other sorts of algorithmic approaches might be used in similar situations?" The answer to the first question is "The code we started with." The answer to the second is "There are lots of approaches that might be used with profit, including the one posted by trippledubs here!" I hope the divergence of the two questions helps explain the half-hearted nature of my approval.


      Give a man a fish:  <%-{-{-{-<

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others goofing around in the Monastery: (2)
As of 2024-04-19 19:34 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found