On Wed, Feb 16, 2005 at 01:06:22PM +0000, Nigel Sandever wrote:
>
> Any chance that you could provide one or two simple but realistic examples of
> using Junctions and their operators?
I'll give it a shot, but keep in mind that I'm somewhat new to this
also. :-)
First, junctions are an easy way to represent the relationships
"any", "all", "one", or "none". So, where we once had to say:
if ($x==$a or $x==$b or $x==$c or $x==$d) { ... }
we can now say
if $x == any($a, $b, $c, $d) { ... }
Similarly, where we once had to say
if (grep { $x == $^z } @list) { ... }
if (grep { $x == $^z } @list) == 0 { ... }
we can now say
if $x == any(@list) { ... }
if $x == none(@list) { ... }
And for fun, try writing the equivalent of
if $x == one($a, $b, $c, $d) { ... }
without a junction. (Okay, one can cheat with C<grep>.)
A programmer can easily use these without having to worry about the
notions of "autothreading" or "superpositions" or the like, and
their translations to English are fairly obvious. I suspect that
constructs like the above will be the majority of use for junctions.
Things start to get "weirder" when we start storing junctions into
variables, and/or passing those variables/junctions into subroutines.
But I think this is not *too* far removed from the idea of placing a
subroutine or a rule into a scalar -- i.e., using a scalar to represent
something more than a single-valued primitive type. Thus, just as one
can write
$x = new CGI;
$y = rule { \d+ };
$z = sub { ... };
and then use $x, $y, and $z later on for an object, rule, and sub
(which may have a variety of side-effects associated with them), it makes
sense that one can write
$w = any(@list);
and then use $w to refer to the junction later. And a programmer who
does this is taking on some responsibility for understanding that $w
isn't one of the "trivial" scalars anymore (same as for $x, $y, and $z).
However, one difference is that when one typically uses an object, rule,
or subroutine in a scalar there is some syntax that makes their nature
apparent. Some feel that Junctions might be just a bit "too magical"
in this respect (e.g., Luke has made some syntactic suggestions to try
make the existence/threading of a junction more apparent).
Pm