# Re: Amazing Perl 6

```On May 27, 2009 01:52:58 pm Mark J. Reed wrote:
> On Wed, May 27, 2009 at 1:42 PM, Daniel Carrera
>
> <daniel.carr...@theingots.org> wrote:
> > sub postfix:<!> { [*] 1..\$^n }
> > say 5!;
> >
> > WOW!!  That *IS* cool. Can you explain to me how it works? I figured out
> > postfix: myself, but the rest is obscure to me.
>
> Key concepts:
>
> 1. placeholder variables.   The ^ in \$^n means it's a placeholder: no
> predeclaration required, and placeholders in an expression are
> assigned the passed-in arguments in serial order.  (The sub could also
> have been written more traditionally as  sub postfix:<!>(\$n) { [*]
> 1..\$n } .)
>
> 2. the range operator .. :  \$x..\$y for integers \$x and \$y generates,
> in list context, a list of the integers from \$x to \$y, inclusive.
>
> 3. the reduction meta-operator  [...] :   [OP](@list)  collects the
> result of applying OP to the elements of the list in order.  That is,
> assuming foo() is a binary sub,  [foo](1,2,3,4) =
> foo(foo(foo(1,2),3),4).  So [+](@list) generates a sum of the listed
> values, [*] generates their product, etc.
>
> So, given the argument to !:
It might have been implied, but you kind of missed the discussion about the
ability to add new operators (and how they relate to other operators).```
```
To recap (slightly differently) there are several impressive features that are
easier to explain and can be part of the build up to the factorial example:
Placeholder variables: non-declared and descriptive
Ranger operators: not so impressive and inherited from perl5 (etc.)
The reduction meta-operator [...]: nice syntax and no need to provide a
identity/seed element
A side discussion of other interesting meta-operators
User defined operators:  overloading and novel mechanism of declaring
precedence (looser, tighter, etc.)
Finally, a simple slide where the factorial definition takes up the whole slide
and let the audience have a few moments of silence to let them figure it out
and to start to really appreciate the expressiveness/impressiveness of perl6
Henry

>
> 1. create a list of integers from 1 to that value (1..\$^n)
> 2. multiply them all together ([*])
>
> and of course a sub without an explicit return statement returns the
> value of the last expression.
>
> >> I do think captures are inherently impressive, but not easy to
> >> explain...
> >
> > Got a link?
> >
> > Daniel.

--

Henry Baragar
Instantiated Software
416-907-8454 x42
```