Thoughts:
Your nomenclature makes me think you are coming from an APL background.
!=== is already generated from ===, and compares the identity of any two
objects. It works on binary values since they are value types, but
that's not the "proper" usage, and Perl separates out the concerns.
Some of the things you mention do indeed make sense as a principle form
for an operator, with the current way a digraph. For example, <=. It's
been a digraph approximation for so many decades that we have
forgotten. My editor shows the ≤ when it formats <=.
"exists" has already been changed to an adverb on the lvalue, but I
suppose a macro could still be made to work.
Darren Duncan darren-at-darrenduncan.net |Perl 6| wrote:
I had some thoughts lately about the Perl 6 operators, and wanted to
bounce some ideas.
--------
Firstly, regarding the string replication ops as documented in
Synopsis 3, 'x' and 'xx', I'm wondering whether it might be better to
have something that incorporates a '~', since that operation is about
catenation.
Would perhaps '~*' work better than 'x' to signify better what the
operation is doing; the '~' in this case means catenation and the '*'
is meant to invoke 'multiply', not 'whatever'. So '~*' means
"catenate a multiple of times".
This would then free up 'x' to be used for something else, if anything.
As for a substitution for 'xx', I'm less sure about that.
Thoughts?
Was that operator called 'x' because it was the best or because that
was how Perl 5 did it, and Perl 6 wanted to not change things if it
didn't need to?
--------
Secondly, regarding the Bool type, I think it would be useful for Perl
6 to define the full complement of dyadic logical operators, of which
I count a few that you don't appear to already have. Probably the
best place is in Synopsis 32.
Note that all the dyadic ops I am discussing are meant to be read as
infix ops only.
These are the boolean/logical ops you already have:
Niladic ops aka value literals / constants:
* Bool::False
* Bool::True
Monadic:
* not aka !, but ¬ alias could be added
Dyadic:
* and aka &&, but ∧ alias could be added
* or aka ||, but ∨ alias could be added
* xor aka ^^ aka !===, but ⊻, ↮ aliases could be added
* ===, but xnor, ↔ aliases could be added
Now I'm not sure whether or not [also, andthen, orelse] have the
desired semantics of any others or not, or whether [if, unless] could
be used as a value-resulting infix operator or not.
But here are a few more dyadic:
* nand aka ⊼ aka ↑
* nor aka ⊽ aka ↓
* implies aka imp aka →
* nimp aka ↛
* if aka ←
* nif aka ↚
For that matter, as you know, every single boolean/logical operator
could also have a bitwise analogue, if people were so inclined.
--------
Thirdly, there are I'm sure a number of other aliases that could be
added to other ops, such as ≤ and ≥ for <= and >=, and ≠ for one of
the inequality operators, although that last one would probably make
more sense if = was the equality test operator, so maybe best to avoid
≠ then.
Lots of the other ones I can think of apply to sets, and the
ext/Set.pm bundled with Pugs already documents them quite well.
However, I think some set ops could also be used with hashes. For
example, an alternate way of spelling "exists %foo{$bar}" is "$bar ∈
%foo" or "%foo ∋ $bar".
So, any thoughts?
-- Darren Duncan