Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Re: Specializing Functions with Currying

by stvn (Monsignor)
on Aug 06, 2004 at 16:30 UTC ( #380621=note: print w/ replies, xml ) Need Help??


in reply to Specializing Functions with Currying

FoxTrotUniform,

Nothing like a good meditation on functional programming to clean out the OOP cobwebs in ones head. Thanks :)

You could make your build_para sub even more Haskell-ish if you removed all assignment statements as well.

sub build_para { return $handlers{'para'}->(join "" => map { $handlers{$_->[0]}->($ +_->[1]) } @{$_[0]}); }
But if we are really gonna get functional, then we might as well make a generic build_HTML sub and use more recursive datastructures.
my @test_data_2 = ( 'para', [ ['none', 'The quick brown '], ['bold', 'fox'], ['none', ' jumped '], ['ital', 'over'], ['none', ' the lazy '], ['bold', 'dog'], ['none', '.'] ] ); sub build_HTML { join "" => map { (ref($_->[1]) eq "ARRAY") ? $handlers{$_->[0]}->(build_HTML(@{$_->[1]})) : $handlers{$_->[0]}->($_->[1]) } ref($_[0]) ? @_ : ([ @_ ]); } print build_HTML(@test_data_2);
We could then actually use build_HTML to compose the build_para subroutine.
*build_para = curry(\&build_HTML, 'para'); print build_para(\@test_data);

-stvn


Comment on Re: Specializing Functions with Currying
Select or Download Code

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (20)
As of 2014-07-11 16:01 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

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








    Results (230 votes), past polls