> From: [EMAIL PROTECTED] (Karl M. Hegbloom)
> Date: 25 Dec 2002 14:39:40 -0800
> 
> [I'm not on the list; please CC.]
> 
> In Scheme, I can say:
> 
> (cond
>  ((predicate-expression) => (lambda (r) ...))
>  (...))
> 
> ... and the value returned by (predicate-expression) is passed as an
> argument to the lambda expression in the rhs.  Sometimes this is very
> handy, since then I don't have to call on (predicate-expression)
> again, or create a (let ...) around it all to cause
> (predicate-expression) to only be computed once!
> 
> I'd like to do the similar in Perl 6, where, for instance:
> 
>     if ($self->{obsoletes})
>       {
>         foreach (@{$self->{obsoletes}})
>           {
>             # do something with this $_
>           }
>       }

You mean, of course:

    if $self{obsoletes}  
      {
        for $self{obsoletes} 
          {
            # Do something with $_
          }
      }

Just getting people used to P6 syntax. :)

> ... could become something more like:
> 
>     if ($self->{obsoletes}) =>
>       {
>         # $_ is now the value of "$self->{obsoletes}" as returned
>         # above, never computed (or typed in) twice.
>         #
>         foreach (@{$_}})
>           {
>             # do something with this inner $_
>           }
>       }

I think this'll do it:

    given $self{obsoletes}
      {
        # $_ is aliased to $self{obsoletes} now
        when true 
          {
            # This only executes if $_ is true
          }
      }

It's not the most concise thing in the world, but (since you were
referring to a C<cond> anyway) it will probably do.

I'm not sure if you can make C<if> topicalize using a pointy sub, but
if you can:

    if $self{obsoletes} -> $_
      {
        # $_ is now aliased to $self{obsoletes}
        # And this only executes if it's true
      }

That would indeed be handy.

Luke

Reply via email to