develooper Front page | perl.perl6.language | Postings from June 2005

Re: reduce metaoperator on an empty list

Thread Previous | Thread Next
From:
Edward Cherlin
Date:
June 16, 2005 22:10
Subject:
Re: reduce metaoperator on an empty list
Message ID:
200506162210.57141.cherlin@pacbell.net
On Thursday 09 June 2005 12:21, John Macdonald wrote:
> On Thu, Jun 09, 2005 at 06:41:55PM +0200, "TSa (Thomas Sandla
ß)" wrote:
> > Edward Cherlin wrote:
> > >That means that we have to straighten out the functions
> > > that can return either a Boolean or an item of the
> > > argument type. Comparison functions < > <= >= = != should
> > > return only Booleans,
> >
> > I'm not sure but Perl6 could do better or at least trickier
> > ;) Let's assume that < > <= >= when chained return an
> > accumulated boolean and the least or greatest value where
> > the condition was true. E.g.
> >
> >   0 < 2 < 3   returns  0 but true
> >
> >   1 < 2 < 1   returns  1 but false
> >
> >   4 < 5 < 2   returns  2 but false
> >
> > Then the reduce versions [<] and [<=] naturally come out as
> > min and strict min respectively.
> >
> > Is it correct that [min] won't parse unless min is declared
> > as an infix op, which looks a bit strange?
> >
> > if 3 min 4 { ... }

That's how it was done in APL. In fact, that's how every dyadic 
(two-argument) function was done in APL. It looks strange at 
first, but the syntax is simpler.

"I eat my peas with honey.
I've done it all my life.
It makes them taste real funny,
But it keeps them on the knife."

> The natural method of implementation would imply that the
> final is returned:
>
>     0 < 2 < 3   returns  3 but true
>
>     1 < 2 < 1   returns  1 but false
>
>     4 < 5 < 2   returns  2 but false
>
> The application of each stage of the chain has to remember
> the right hand value (for the next stage of the comparison)
> as well as the accumulated boolean result.  When the boolean
> result is true, that has < and <= returning the max, and > and
>
> >= returning the min - the opposite of what you asked above.

In J one can do (<)/ 0 1 1, evaluated as
0<(1<1)
0<0
0

Then, since 0<0 is 0, and 0<1 is 1, 0 is a left identity of < 
(restricted to Booleans), and </'' is defined to be 0.

I don't suppose anybody here cares, but it turns out that Boolean 
scans have a variety of uses, such as running parity, locating 
transitions, and Gray Code to binary conversion, and Boolean 
identity elements have their uses within these schemes.

-- 
Edward Cherlin
Generalist & activist--Linux, languages, literacy and more
"A knot! Oh, do let me help to undo it!"
--Alice in Wonderland
http://cherlin.blogspot.com

Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About