can I overload operators like "=>", "->" or something like that?
Steven W. Orr
steveo at syslang.net
Fri Apr 20 17:34:44 EDT 2012
On 4/19/2012 3:28 PM, dmitrey wrote:
> hi all,
> can I somehow overload operators like "=>", "->" or something like
> that? (I'm searching for appropriate overload for logical implication
> "if a then b")
> Thank you in advance, D.
This tickled a memory from decades back when I worked in PL/I. They have a
bool builtin function that performed bitwise boolean operations. The first two
args were bit strings. The third arg is 4 bits whose value denoted the logical
operation to be performed on the first two args on a bit by bit basis.
The meaning of the four bits are
1st bit of arg3 defines the result of bool if A = '0'B and B = '0'B
2nd bit of arg3 defines the result of bool if A = '0'B and B = '1'B
3rd bit of arg3 defines the result of bool if A = '1'B and B = '0'B
4th bit of arg3 defines the result of bool if A = '1'B and B = '1'B
bool ( A , B , '0001'B ) A AND B logical AND
bool ( A , B , '0111'B ) A OR B logical OR
bool ( A , B , '0110'B ) A XOR B exclusive-OR
bool ( A , B , '1110'B ) A NAND B NOT AND
bool ( A , B , '1000'B ) A NOR B NOT OR
bool ( A , B , '1001'B ) A IFF B equivalence
bool ( A , B , '1101'B ) A -> B implication: if A then B
bool ( A , B , '1011'B ) A <- B implication: if B then A
If A and B are just one bit (like True or False) then the operation basically
becomes logical instead of bitwise. The full explanation is over at
http://tinyurl.com/855dzjm
Also more detail is here
http://tinyurl.com/cdhwgdj
So, if you *really* wanted to, you could define a bunch of constants like
BOP_AND, BOP_OR, BOP_XOR, BOP_NAND, BOP_NOR, BOP_IFF, BOP_IMP and BOP_NIMP.
Then define a class called Bool that redefines things like __rlshift__ and
__rrshift__. That would get >>= and <<= for Implications and nodus tolens.
It's not a total solution. I can't see how you're going to get IFF, NAND and NOR.
But, maybe writing a bool function might be enough. If you implement bool in
python then you can say things like
def condition(A, B, bop):
return bool(A, B, bop)
A = something_boolish_thats_long_and_complex
B = something_boolish_thats_long_and_more_complex
bop = give_me_a_boolean_condition(*xx)
boolVal = do_on_condition() if bool(A, B, bop) else None
I think this might be useful to the right person where you have to calculate
the logical operation at run-time. Passing in a constant operator is probably
less useful.
Is this horrible?
--
Time flies like the wind. Fruit flies like a banana. Stranger things have .0.
happened but none stranger than this. Does your driver's license say Organ ..0
Donor?Black holes are where God divided by zero. Listen to me! We are all- 000
individuals! What if this weren't a hypothetical question?
steveo at syslang.net
More information about the Python-list
mailing list