--- Brent Dax [EMAIL PROTECTED] wrote:
Austin Hastings:
# Let's support separable verbs.
#
# Here's how:
#
# # Note my arbitrary selection of _ as separation indicator.
# Feel free to replace this with something more appropriate:
#
# sub if($test, block)
# _ elsif ($test, block) is optional is floating is multi
# _ elsunless ($test, block) is optional is floating is multi
# _ else (block) is optional is fixed
How do you name one of these suckers?
%::{'if'} #Incomplete, and is there an %::{'elsif'}?
%::{'if_elsif_elsunless_else'}#Could conflict with other symbols
%::{'if _ elsif _ elsunless _ else'} #Depends on ordering
Remember, this also has bearing on importing them from a module.
Full name, with full signature. if_elsif_elsunless_else($c,b,$c,b,
$c, b, b);
Maybe a special widget in the arglist to denote separability? This
could be important for varargs multimethods.
# {
# while (!$args[0].test) shift;
1. Where did this $args come from?
2. The while syntax is way wrong.
3. How does else's test default to 1?
# args[0].block();
From this, it's obvious you forgot about sigil invariance.
I can't even spell sigil invariance. And I'm nowhere close to sure that
it would be valid to use while when in the middle of trying to define
if.
I was backfilling the innards after writing the 'outards'. Just a
competence fault on my part.
# }
#
# Where:
#
# 1: I'm hacking real hard on the implementation. Better Ideas
Welcome.
# 2: space-underscore-space means separable bit. Negotiable. BIW.
# 3: is optional/[dflt: required] means doesn't have to appear.
# 4: is floating/[dflt: fixed] means can appear in any order.
# 5: is multi/[dflt: single] means can appear more than once.
5 conflicts with multimethods.
s/multi/repeatable/ or whatever. BIW.
# I think this is one of those p6-ish generalizations:
#
# try/catch/finally
# do/while
# if/elsif/elsunless/else
# repeat/until
# (arguably: switch/case/default)
Except that none of the other ones exist in Perl 6. :^)
Because we have not heretofore had a cool syntax for separable verbs.
Now we do. Now it can be possible to say use pascal; and get extra
syntax overhead. Rejoice. :-/
try {
...
CATCH {
...
}
}
loop {
...
last unless cond;
}
loop {
...
last if cond;
}
given(topic) {
when cond {
...
}
default {
}
}
IMHO, separable keywords are in general a bad design, so perhaps they
should be grammar-munge hard. We really don't need anything but else
(and possibly its friends) for our purposes, but we want them
everywhere, so I don't see why we shouldn't do it this way.
Go us. One step closer to total world domination.
=Austin