Paul Rubin wrote:

I don't know what a furphy is, but I don't accept that "somethingness"
vs. "nothingness" is the same distinction as truth vs falsehood.  True
and False are values in a specific datatype (namely bool), not
abstract qualities of arbitrary data structures.  The idea that the
"if" statement selects between "somethingness" and "nothingness"
rather than between True and False is a bogus re-imagining of the
traditional function of an "if" statement and has been an endless
source of bugs in Python code.  Look how much confusion it causes here
in the newsgroup all the time.

You appear to be confusing a specific interpretation of an abstraction with the abstraction itself. Or perhaps better, you seem to be confusing a specific example of a general process with the general process.

A boolean variable is a variable that is in one of two states -- a binary variable -- a variable that carries one bit of information. The two states are the marked state and the unmarked or default state. Which is to say, when we draw a distinction to distinguish two states, we mark one of them to distinguish one from the other. The if statement tests whether an object is in the marked state (or not).

Truth and falsity of propositions are one possible interpretation of marked and unmarked, giving us propositional logic. But they are only one of many. So are in and out of a particular class and member or not of a set or subclass or not of a set, giving us class and set logic. So are closed and open, said of gates or switches, or on and off, giving us switching logic. So are non-zero and zero, said of numbers. Or done and not done, said of an algorithmic process.

Counts 0 and 1, and their representations '0' and '1', taken in themselves, are as good as any distinct pair as a pair of labels for the two distinct states. They have some computational advantages, including making it easy to count the number of objects in a collection in the marked state (and, given the total number, the number in the unmarked state). They have one disadvantage, though. If I say 'x = 1', do I mean 1 versus 0 or 1 versus all possible ints? Similarly, If 'print(x)' prints 1, does it mean 1 versus 0 or 1 versus all other ints? Recognizing this, Guido decided to subclass them and give them alternate names. He could have chosen 'Marked' and 'Unmarked', or any of several other pairs, but did choose the conventional 'True' and 'False', referring to the common propositional interpretation. However, he specifically disclaimed any intention to restrict 'if' to testing specific logic propositions, as opposed to the general proposition 'object is in the marked state'.

Terry Jan Reedy

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to