In RFC 23, Damian Conway <[EMAIL PROTECTED]> proposes a syntax for
"higher-order functions". One example given is related to a proposed
switch statement (RFC 22). A trimmed version is:
> sub beverage {
> switch (shift) {
> case sub{ $_[0] < 10 } { return 'milk' }
> case sub{ $_[0] < 20 } { return 'coke' }
> else { return 'milk' }
> }
> }
which it is proposed could be re-written as:
> sub beverage {
> switch (shift) {
> case __ < 10 { return 'milk' }
> case __ < 20 { return 'coke' }
> else { return 'milk' }
> }
> }
While I appreciate and applaud the attempt to solve a specific problem
with a generalized mechanism, it occurs to me that another general way to
attack this same problem might be through some sort of macro language.
As a trivial example, using CPP (*not* what I'd propose for perl6),
the switch example could be written
#define arg_lt(X) sub{ $_[0] < (X) }
sub beverage {
switch (shift) {
case arg_lt(10) { return 'milk' }
case arg_lt(20) { return 'coke' }
else { return 'milk' }
}
}
I submit this is at least as clear as the __ version.
So I'd like to encourage folks to consider whether adding some sort of
(optional) macro language (perlpp ?) to perl6 would be worthwhile.
Folks with experience with a variety of macro languages would be more
qualified than I to develop an RFC on the subject, but I think it's
worth pursuing.
--
Andy Dougherty [EMAIL PROTECTED]
Dept. of Physics
Lafayette College, Easton PA 18042