r3wp [groups: 83 posts: 189283]
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r3wp

[!REBOL3]

Ladislav
19-Apr-2011
[8018x2]
TRUE? is the "IF compatibility function"
If you want FALSE? just define:

    false?: :not
Geomol
19-Apr-2011
[8020]
yes
Gregg
19-Apr-2011
[8021]
Does anyone see any problem if logic ops support none! values? If 
not, go ahead and suggest it Ladislav.
Ladislav
19-Apr-2011
[8022]
It is not about supporting #[none!], it is more about not supporting 
other operations, that aren't logic-like
Maxim
19-Apr-2011
[8023]
you don't want AND/OR to support   bitwise ops?
Ladislav
19-Apr-2011
[8024x4]
e.g. typeset or typeset is actually a union for me, and therefore 
should be performed using the UNION function preferably
you don't want AND/OR to support bitwise ops?
 - they are logic-incompatible
(in REBOL)
because 0 can be used to represent TRUE in REBOL, not FALSE
Maxim
19-Apr-2011
[8028]
I expect   true == (0 AND 0)   if that is what you mean.

but I think I understand the deeper question you are hinting at.


AND/OR actually are two completely different ops rolled into the 
same wrapper.


on one part they act like a logical comparisons, on the other hand, 
they *also* act as a "bitwise" operators.  

because of this we cannot compare data *with* logical! or none! values.


I would gladly separate both as two sets of ops.   && ||  symbols 
come to mind to use as "bitwise" ops.  

I'd keep AND/OR as logical operations *only* allowing us to compare 
any data as logic comparisons.
Ladislav
19-Apr-2011
[8029]
AND/OR actually are two completely different ops rolled into the 
same wrapper

 - yes, that is the problem. I would even add, that not just two... 
 Such a setup *might* work, if the ranges were disjoint. But, in REBOL, 
 they are not disjoint, because any value can be used as logic by 
 IF.
Maxim
19-Apr-2011
[8030]
yes exactly.   I agree completely now, that I understand the point 
fully.
Ladislav
19-Apr-2011
[8031]
I am glad I asked here before writing something in CC, since now 
I know better how to make my arguments more convincing.
Maxim
19-Apr-2011
[8032]
I think my post above gives a good clear starting point for the CC 
ticket.
Ladislav
19-Apr-2011
[8033x2]
To complete the informations, I should probably perform a user poll 
in here. So, here goes:


*For me, one of the main goal of logic operators like NOT, AND, OR, 
XOR is to yield a value, that is used mainly as the CONDITION argument 
of the IF, UNLESS, EITHER, etc. control functions.


*Taking NOT (which is a unary logic operator) as an example, we see, 
that it is compatible with the above mentioned main purpose. The 
goal is achieved by "delegating" other functionalities NOT does not 
perform to COMPLEMENT. It is not possible for NOT to be both compatible 
with IF and perform the operations COMPLEMENT does.


*Taking OR (which is a binary logic operator) as an example, we see, 
that it is incompatible with the above mentioned main purpose, not 
being able to correctly handle some logic combinations, that would 
be compatible with IF. As an example, see the expression
    0 or true

, which cannot be used to yield an argument for IF, although both 
its arguments *are* compatible with IF. Interestingly, there is not 
a shortage of functions that are meant to perform analogical non-logic 
operations. I would like to specifically mention the UNION function, 
which seems to be related to OR similarly as COMPLEMENT is related 
to NOT.

*The question I am asking you is:

- Do you prefer the "logical" solution used in the case of NOT, and 
apply it to other operators like AND and OR as well, or

- Do you prefer the "non-logical" solution used in case of AND and 
OR and apply it to the NOT operator as well, or
- Do you prefer to keep the current state of affairs for R3?
I am for the first alternative, letting AND, OR and XOR work as "logic" 
operators only, "delegating" other (similar) functionalities to functions 
like UNION, INTERSECT, etc.
Maxim
19-Apr-2011
[8035]
+ 1
Gregg
19-Apr-2011
[8036]
I misunderstood as well. Thanks for clarifying.

+1 for having AND, OR, and XOR work as logic ops only.
Geomol
19-Apr-2011
[8037]
I can see, how it became this way trying to avoid &, | and ^ for 
AND, OR and XOR.
BrianH
19-Apr-2011
[8038]
The main reason the logic operators don't support none is to cut 
down on none propagation. We want those errors triggered, not unintentionally 
ignored.
Ladislav
19-Apr-2011
[8039]
So, which variant do you prefer?
BrianH
19-Apr-2011
[8040]
I don't mind AND, OR and XOR being both logical and bitwise ops. 
If there is a problem with the current behavior, I don't remember 
being tripped up by it.
Ladislav
19-Apr-2011
[8041]
There surely is a problem, why would NOT be implemented differently 
otherwise?
Geomol
19-Apr-2011
[8042]
Atm. I prefer the same as you too (the first one), but I would suggest 
some names for the bitwise and, or and xor in the reporting of this.

I feel, the language would benefit from being a bit more strict.
Maxim
19-Apr-2011
[8043]
I'm tripped by it EVERYTIME I try to use them... none is a valid 
value for all logic control funcs.


so in over 10 years of reboling I've never been able to use them 
to control logic flow... I've used them only as bitwise ops...
Ladislav
19-Apr-2011
[8044]
Yes, Max, I guess, that you are not an exception
BrianH
19-Apr-2011
[8045]
NOT is an action that generates a logic! value. I like the current 
Lisp-like treatment, having none and false being falsey values and 
everything else being truthy values, with explicit conversions already 
available if we need them. Whatever we do, please don't have zero 
values be false without explicit conversion.
Geomol
19-Apr-2011
[8046]
I think, Carl deside these thing by trying to figure out, what makes 
most sense for a new one to programming. Or trying to make a more 
humane less computer technical language.
Maxim
19-Apr-2011
[8047]
(funny thing is that I keep forgetting this detail , and every few 
months I loose an hour trying to debug code until I remember ... 
hehe)
Gregg
19-Apr-2011
[8048x2]
I also only use them as bitwise ops, but I don't remember tripping 
over it very often. I just always use ANY and ALL. NOT was probably 
designed to be friendly, rather than pure, and I do use it a lot.
John, yes, and also supporting things people expect when coming from 
other languages.
BrianH
19-Apr-2011
[8050x2]
I come from languages that either have an explicit boolean type (Pascal-like) 
or act like REBOL (Lisp-like and Smalltalk-like).
C-like languages always trip me up - a mass of design flaws, the 
whole lot of them.
Ladislav
19-Apr-2011
[8052]
Well, but, in this case, C works better by discerning | and ||
BrianH
19-Apr-2011
[8053]
The thing is, C needs to because it doesn't have proper boolean types, 
and REBOL doesn't need to because it has the logic! type.
Geomol
19-Apr-2011
[8054]
Maybe AND, OR and XOR should only be bitwise, and then introduce 
&& and || (and maybe logical xor ^^, but just maybe).
Ladislav
19-Apr-2011
[8055]
REBOL needs to as well, since it (IF, UNLESS, EITHER, etc.) implements 
anything as logic, in fact.
BrianH
19-Apr-2011
[8056]
We can do explicit conversions, and our code becomes easier to understand 
as a result.
Maxim
19-Apr-2011
[8057]
but brian, we cannot use AND/OR for logic comparisons...  #[none] 
breaks them and none *IS* a valid conditional value.
Gregg
19-Apr-2011
[8058]
&& and ||  -- Please NOOOOOOOOO!
Geomol
19-Apr-2011
[8059]
:-D
Gregg
19-Apr-2011
[8060]
:-)
Geomol
19-Apr-2011
[8061]
Yeah, they're ugly!
Maxim
19-Apr-2011
[8062x2]
well, then we should remove   / * - + ^ too.
:-)
Gregg
19-Apr-2011
[8064]
Just vote on Ladislav's proposal, and we'll see where the results 
lead.
Geomol
19-Apr-2011
[8065x2]
But if almost nobody use OR today as logical or, but do as bitwise 
or, then we shouldn't change that.
LOR, LAND and LXOR
;p
Gregg
19-Apr-2011
[8067]
If our goal is not to break things, yes. If our goal is to clean 
things up for the long term, now is the time.