Little Walker wrote:
> I've been looking around to see if there's been any discussion of
> introducing functional programming-style pattern matching for method/
> function dispatch.  Could someone point me to any such discussions?

It's done multi dispatch in Perl 6, and you can find an introduction in
a book chapter which we're writing these days:


> I've seen that perl6 is taking on a lot of ideas from the functional
> world (lazy evaluation for instance).  With multi-method dispatch on
> the agenda pattern matching seems inevitable but I haven't been able
> to find information about this or any related discussions.
> This is a contrived example of what I'm referring to:
> sub traverse([Leaf $a]) {
>   # do something
> }
> sub traverse([Tree $left, Tree $right]) {
>   traverse($left);
>   traverse($right);
> }
> my $t = Tree(...);
> traverse($t);

You got it almost right. The simples approach is to use "normal" matching:

multi traverse(Leaf $a) {
   # do something

multi traverse(Tree $t) {

The latter uses a bit of additional code for unpacking the $t parameter;
you can do that in a signature too (which is not yet covered in the book
chapter; you can find some documentation here:

multi traverse (Tree $t ( $left, $right) ) {

Since you don't actually access $t anywhere, there's no reason to give
it a name, so you can write this actually as

multi traverse (Tree $ ( $left, $right) ) {

Hope that helps,
Moritz Lenz
http://perlgeek.de/ |  http://perl-6.de/ | http://sudokugarden.de/

Reply via email to