The topic has somewhat modified to asking what is a BOOLEAN.
The right answer is that the question is too simple. It is what YOU want it
to be in your situation. And it is also what the LANGUAGE designers and implementers have chosen within their domain.
Mathematically, as part of classical logic, there is a concept of having two sets with the union of the two being a null set. The sets are disjoint and
in some cases, cover all possibilities and in other cases the possibilities
are narrowed so that just two distinct groupings remain. Using 0 and 1 makes sense for a binary bit, albeit in either order for True versus False. No
other numbers can be stored in a single binary digit so this is a trivial
but useful use of Booleans in some languages. In hardware or storage
mediums, there are not literal zeroes or ones. You can have a high or low
value or a magnetic field or spin or whatever you want to implement it, and sometimes it fails anyway and you get indeterminate values or a bit seems to flip. That is an implementation detail but Boolean logic remains a
mathematical concept.
UNIX programs did not return a Boolean value on exit so that discussion is a tad off the point. They returned a STATUS of sorts. Mostly the status was
zero for all forms of success and you could signal many forms of failure
using any other number. But I can imagine designing a program like grep to return 0 if nothing was found but the program did not fail, and a positive number up to some limit that specified how many lines matched and perhaps -1
or other numbers on failure. A return status need not be seen as Boolean, albeit in my made-up example, any non-zero exit status up to the limit would
be in the set of SUCCESS and -1 or whatever would be in the set for FAILURE.
Consider how a Python function can return OR throw an error. Many different errors can be thrown and some propagate up from deeper levels if not caught
and handled. Generally success simply means no errors BUT you can also
design a function that throws various success "errors" and indirectly
returns one of several kinds of values in the payload, as well as errors
meant to be treated as bad. Heck, you can have some errors be warnings and
the caller of the function may have to call it from a "try" and specify what
to catch and how to deal with it. I repeat, not everything must be Boolean
when it comes to status types of things.
As noted, many other schemes have been used to represent a Boolean variable.
And given some implementations, something emerges that can confuse some
people. Grant mentioned even/odd. On most machines this simply means you can safely ignore a longer clustering of bits such as with a 32-bit integer and simply examine the least significant bit which determines if it is even or
odd. Heck, you can even store other useful info in the remaining bits, if
you wish.
As has been said repeatedly, it does not matter what the OP expects, as many implementations are possible including some that do not follow the above suggestions.
Much of my work has included other possibilities often using data that is
not always able to be analyzed in a truly Boolean fashion. Modern
Programming languages have to grapple with items that look like they can
have three or more values. I mean you can have a variable that can be TRUE
or FALSE but also one of many forms of Not Available or more. In a language like R, their version of Boolean can have a value of NA but actually in some contexts you have to specify which kind of NA such as NA_integer_ or NA_character_ so obviously a vector of Booleans cannot be implemented using
a single bit for each. I have seen packages that can import data with many kinds of missing values as there are other programs that allow you to tag missing values to mean things like "missing: child did not show up to take test" or "missing: test not completed, will re-test" or "missing: caught cheating" or "missing: identity of test taker not verified" and so on. I helped with one such package to create a type within R that does not discard the other info so it supports multiple NA variants while at the same time it can be processed as if every NA was the same.
Python has concepts along the same lines such as np.nan so there has to be a way of storing data with perhaps a wrapper around things that can specify if the contents are what is expected, or maybe something else.
And I won't get into fuzzy logic. But just plain classical Boolean logic is
a mathematical concept that can be expressed many ways. Some of the ways in python look compatible with integers but that was a design choice. If they
had chosen to store a character containing either "T" or "F" then perhaps
they would allow Booleans to be treated as characters and let them be concatenated to strings and so on.
-----Original Message-----
From: Python-list <python-list-bounces+avi.e.gross=
gmail.com@python.org <mailto:python-list-bounces+avi.e.gross=
gmail.com@python.org> > On Behalf Of Grant Edwards
Sent: Saturday, January 28, 2023 12:35 AM
To:
python-list@python.org <mailto:
python-list@python.org>
Subject: Re: bool and int
On 2023-01-27, Mark Bourne <
nntp.mbourne@spamgourmet.com <mailto:
nntp.mbourne@spamgourmet.com> > wrote:
So Python is even flexible enough to be made to deal with insane
situations where False is 2!
IIRC, in VMS DCL even numbers were false and odd numbers were true.
In Unix shells, a return code of 0 is true and non-0 is false.
Though that's not really the same environment that Python lives in...
--
Grant
--
https://mail.python.org/mailman/listinfo/python-list
--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)