Comparisons and sorting of a numeric class....
rgaddi at technologyhighland.invalid
Thu Jan 15 18:54:52 CET 2015
On Wed, 14 Jan 2015 23:23:54 -0800
Andrew Robinson <andrew3 at r3dsolutions.com> wrote:
> > Boolean algebra has two values: true and false, or 1 and 0, or humpty
> > and dumpty, or whatever you like to call them.
> You're speaking to an Electrical engineer. I know there are 10 kinds of
> people, those who know binary and those who don't. But you're way off
> base if you think most industrial quality code for manipulating boolean
> logic uses (or even can be restricted to use) only two values and still
> accomplish their tasks correctly and within a finite amount of time.
Absolutely it does and can. You store anything that's non-boolean in a
non-boolean value, and keep it as fuzzy as you like. But at the end of
the day, an if statement has no "kinda". You do, or you don't. 1 or
0. And so you must ultimately resolve to a Boolean decision.
> > Can you name any other language that *does* allow subclassing of
> > booleans or creation of new boolean values?
> Yes. Several off the top of my head -- and I have mentioned these
> before. They generally come with the extra subclasses pre-created and
> the user doesn't get to create the classes, but only use them; none the
> less -- they have more than two values with which to do logic equations
> VHDL, Verilog, HDL, Silos III, and there are IEEE variants also.
> C/C++ historically allowed you to do it with instances included,
> although I am not sure it still does.
Incorrect, at least in VHDL. If I've got "signal x : boolean;", then x
is defined on the range (true, false). I can ask VHDL "if x then; ...;
What you're talking about is not at all a subclass of boolean, it's a
std_logic. It's a separate enumerated type, with a set of resolution
rules defined in a function the source of which is available in
std_logic_1164.vhd. And according to the strict rules of VHDL (up
until VHDL2008 decided to forfeit some purity for simplicity's), you
can't simply have:
signal x: std_logic
if x then
You have to ask
if x = '1'
if (x = '1') or (x = 'H')
Because you are comparing one value of an enumerated type against
others, the result of that '=' operation being, in fact, a boolean,
defined again on the range (true, false).
> We've discovered that we live in a quantum-mechanical universe -- yet
> people still don't grasp the pragmatic issue that basic logic can be
> indeterminate at least some of the time ?!
But actions can't be. You're not asking the software about it's
feelings, you're telling it to follow a defined sequence of
instructions. Do this, or don't do this.
> I don't know what you mean about composition vs. sub-classing.
> Would you care to show an example of how it would solve the problem and
> still allow hierarchical sorting ?
> I don't see how you can get pre-existing python functions (like sort,
> max, and min) to accept a complex bool value and have that value
> automatically revert to a True or False in an intelligent manner without
> overloading the operators defined in some class -- somewhere -- to
> operate on the data the class contains.
> How do you intend to achieve that with this -- composition -- thing you
> mentioned ?
You'd do it something like this.
"""Represents 'continuous' logic. For any given instance,
there is a threshold value between 0 and 1 that delineates True from
False, with 0 being entirely False and 1 being entirely True.
def __init__(self, value, threshold=0.5):
self.value = value
self.threshold = threshold
return value > threshold
__nonzero__ = __bool__
def __eq__(self, other):
if other in (True, False):
return bool(self) == other
return self.value == other.value
return self.value == other
def __and__(self, other):
def __or__(self, other):
No need to subclass bool, you just use the __bool__ (or __nonzero__)
methods to say "Alright, well when you do finally have to make a
decision on this thing, here's how you make it. And obviously, you can
add on as many additional data members to carry additional information
as your heart desires.
Rob Gaddi, Highland Technology -- www.highlandtechnology.com
Email address domain is currently out of order. See above to fix.
More information about the Python-list