Perl: the Markov chain saw PerlMonks

### Re: getting the highest value in a simpler way

by tmoertel (Chaplain)
 on Nov 10, 2004 at 16:21 UTC ( #406707=note: print w/replies, xml ) Need Help??

in reply to getting the highest value in a simpler way

Here's a fun approach. We can encapsulate our maximum-finding logic inside of a closure-based factory function that makes "maximum finders":
```    sub make_max_finder {
my \$max;
sub {
for (@_) { \$max = \$_ if !defined \$max || \$_ > \$max }
\$max;
}
}
Then we can create a new maximum finder whenever we need one by calling the factory function:
```    my \$max_finder = make_max_finder();
We can feed values to our newly made maximum finder, and it will remember the maximum value it has seen:
```    \$max_finder->(0);
print \$max_finder->();    # 0
print \$max_finder->(-1);  # 0
print \$max_finder->(2);   # 2
We can pass it more than one value at a time, too:
```    print \$max_finder->(-1, 3, 0);  # 3
print \$max_finder->(-1, 0, 1);  # 3
With this factory, we can solve your problem like so:
```    my \$max_finder = make_max_finder();

while (my \$next_val = get_next_value()) {
\$max_finder->(\$next_val);
}

\$max_finder->();  # retrieve maximum
Or, if you have the memory to hold all of your values in an array, the "one-shot" option is available:
```    my \$max_value = make_max_finder()->(@values);

Cheers,
Tom

Create A New User
Node Status?
node history
Node Type: note [id://406707]
help
Chatterbox?
 [marto]: good morning all

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (6)
As of 2018-01-19 10:23 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
How did you see in the new year?

Results (217 votes). Check out past polls.

Notices?