Boolean values: Difference between revisions

m
imported>Tromp
 
(34 intermediate revisions by 19 users not shown)
Line 1:
{{task|Basic language learning}}
[[Category:Simple]]
{{task|Basic language learning}}
 
;Task:
Line 11:
*   [[Logical operations]]
<br><br>
=={{header|8th}}==
 
In 8th, any non-zero number is true, as is the specific boolean value 'true'. Everything else evaluates as 'false' (including the boolean value, 'false')
=={{header|11l}}==
11l defines a built-in data type <code>Bool</code>, which has two values represented by the constants <code>0B</code> and <code>1B</code>.
 
=={{header|360 Assembly}}==
The are no TRUE or FALSE constants in 360 Assembly; but an often used convention is :
<langsyntaxhighlight lang="360asm">FALSE DC X'00'
TRUE DC X'FF'</langsyntaxhighlight>
=={{header|6502 Assembly}}==
There are no built-in true or false constants, but the functionality can be easily replicated with zero or nonzero values (or any two values which can cause a mutually exclusive branch condition, such as with <code>#$7f</code> and <code>#$80</code> and using <code>BMI</code>/<code>BPL</code>)
 
=={{header|68000 Assembly}}==
There are no built-in true or false constants, but the functionality can be easily replicated with zero or nonzero values (or any two values which can cause a mutually exclusive branch condition, such as with <code>#$7f</code> and <code>#$80</code> and using <code>BMI</code>/<code>BPL</code>)
 
=={{header|8051 Assembly}}==
A single bit represents true or false. By convention, 0 (cleared) is false, 1 (set) is true.
In the following, "bit" represents the direct address of any of the 256 directly accessible bits.
<langsyntaxhighlight lang="asm">clr bit ; clears
setb bit ; sets</langsyntaxhighlight>
=={{header|68000 Assembly}}==
 
There are no built-in true or false constants, but the functionality can be easily replicated with zero or nonzero values (or any two values which can cause a mutually exclusive branch condition, such as with <code>#$7f</code> and <code>#$80</code> and using <code>BMI</code>/<code>BPL</code>)
=={{header|8th}}==
In 8th, any non-zero number is true, as is the specific boolean value 'true'. Everything else evaluates as 'false' (including the boolean value, 'false')
 
=={{header|AArch64 Assembly}}==
{{works with|as|Raspberry Pi 3B version Buster 64 bits}}
<syntaxhighlight lang="aarch64 assembly">
<lang AArch64 Assembly>
/* ARM assembly AARCH64 Raspberry PI 3B */
/* program boolean.s */
Line 87 ⟶ 81:
/* for this file see task include a file in language AArch64 assembly */
.include "../includeARM64.inc"
</syntaxhighlight>
</lang>
 
=={{header|ACL2}}==
Same as [[Common Lisp|Boolean Values#Common Lisp]].
 
=={{header|Action!}}==
<langsyntaxhighlight Actionlang="action!">PROC Test(BYTE v)
PrintF("Variable v has value %B%E",v)
IF v THEN
Line 122 ⟶ 114:
Test(1)
Test(86)
RETURN</langsyntaxhighlight>
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Boolean_values.png Screenshot from Atari 8-bit computer]
Line 144 ⟶ 136:
Condition IF v#0 is satisfied.
</pre>
 
=={{header|Ada}}==
[[Ada]] has a predefined discrete type with the specification:
<langsyntaxhighlight Adalang="ada"> type Boolean is (False, True);</langsyntaxhighlight>
with Boolean lattice and relational operations defined on it. See [http://www.adaic.org/standards/1zrm/html/RM-A-1.html RM A.1].
 
=={{header|ALGOL 68}}==
{{trans|python}}
Line 158 ⟶ 148:
{{wont work with|ELLA ALGOL 68|Any (with appropriate job cards) - note: null char is missing, AND the C generated is won't compile, so some conversions are missing from RS}}
ALGOL 68 Enforces strong typing and so has few default coercions. The appropriate operators must be used to convert to and from '''bool'''[ean] and the following code demonstrates principle conversions:
<langsyntaxhighlight lang="algol68">BOOL f = FALSE, t = TRUE;
[]BOOL ft = (f, t);
STRING or = " or ";
Line 187 ⟶ 177:
print(("string: """, string , """ => ", string /= "", or, UPB string /= 0, new line));
print((new line))
OD</langsyntaxhighlight>
 
{{out}}
Line 215 ⟶ 205:
</pre>
Note: The '''string''' '''repr'''[esentation] of '''false''' and '''true''' are defined by the variables ''flop'' and ''flip'' respectively.
 
=={{header|ALGOL W}}==
The boolean type is called logical in Algol W - the values are represented by the keywords true and false. Numbers, strings etc. cannot be used where logical values are required.
 
=={{header|APL}}==
0 and 1 are used for boolean types in APL (as in J below).
<syntaxhighlight lang="apl">
<lang APL>
1 ^ 1
1
1 ^ 0
0
</syntaxhighlight>
</lang>
 
=={{header|AppleScript}}==
AppleScript has built-in boolean keywords <code>true</code> and <code>false</code>. Numbers do not work in place of boolean expressions, but they do coerce to and from.
 
<langsyntaxhighlight AppleScriptlang="applescript">1 > 2 --> false
not false --> true
 
Line 237 ⟶ 224:
--> {1, 0, true, false}
 
true = 1 --> false</langsyntaxhighlight>
 
AppleScript also has constants <code>yes</code> and <code>no</code>, which coerce easily to boolean values. They have little practical value in AppleScript except if one wishes to use them as arguments in place of boolean values for novelty's sake. They are interchangeable with boolean values as parameters in AppleScriptObjC (not demonstrated here).
 
<langsyntaxhighlight AppleScriptlang="applescript">{yes as boolean, no as boolean}
--> {true, false}</langsyntaxhighlight>
 
<code>yes</code> and <code>no</code> do not coerce to integer values.
Line 248 ⟶ 235:
Finally, AppleScript also includes keywords <code>with</code> and <code>without</code>, used in declaring parameters for and sending parameters of boolean nature to handlers. They are synonymous with <code>true</code> and <code>false</code>, respectively, and the compiler will sometimes perform the substitution at compile time.
 
<langsyntaxhighlight AppleScriptlang="applescript">sortItems from L given reversal : true</langsyntaxhighlight>
 
gets compiled immediately to become:
 
<syntaxhighlight lang AppleScript="applescript">sortItems from L with reversal</langsyntaxhighlight>
 
However, the equivalent call to the handler utilising <code>yes</code>, whilst accepted readily in place of its boolean counterpart, is left alone by the compiler:
 
<syntaxhighlight lang AppleScript="applescript">sortItems from L given reversal:yes</langsyntaxhighlight>
 
=={{header|ARM Assembly}}==
{{works with|as|Raspberry Pi}}
<syntaxhighlight lang="arm assembly">
<lang ARM Assembly>
/* ARM assembly Raspberry PI */
/* program areaString.s */
Line 327 ⟶ 313:
 
 
</syntaxhighlight>
</lang>
 
=={{header|Arturo}}==
<langsyntaxhighlight lang="rebol">a: true
b: false
 
Line 336 ⟶ 321:
 
if? b -> print "nope"
else -> print "yep"</langsyntaxhighlight>
{{out}}
Line 342 ⟶ 327:
<pre>yep
yep</pre>
 
=={{header|AutoHotkey}}==
When an expression is required to evaluate to true or false (such as an <code>IF</code>-statement), a blank or zero result is considered false and all other results are considered true. Operators such as <code>NOT</code>/<code>AND</code>/<code>OR</code>/<code>></code>/<code>=</code>/<code><</code> automatically produce a true or false value: they yield 1 for true and 0 for false. A variable can be used to hold a false value simply by making it blank or assigning 0 to it. The words 'true' and 'false' are built-in variables containing 1 and 0. They can be used to make a script more readable.
 
=={{header|Avail}}==
 
While Avail has many methods for handling booleans, <code>boolean</code> itself is simply an enumeration type of the atoms <code>true</code> and <code>false</code>. This enumeration and these atoms are only special ''by convention'' of being used for the logical operations provided by the standard library. It would be perfectly possible to define an entirely new boolean system with new types and atoms (or values).
 
=={{header|AWK}}==
 
Line 358 ⟶ 340:
In the following example we use zero for false, and one for true to assign boolean values. However, this is just a convention, so other values may also have been used:
 
<langsyntaxhighlight lang="awk">BEGIN {
# Do not put quotes round the numeric values, or the tests will fail
a = 1 # True
Line 375 ⟶ 357:
if (b != 0) { print "eighth test b is true" } # This should not print
 
}</langsyntaxhighlight>
 
=={{header|Axe}}==
In Axe, there are no keywords for true and false. Any expression that evaluates to zero is considered false, and any expression that evaluates to non-zero is considered true. Unlike other languages, there is no canonical value for true (e.g. 1).
 
=={{header|BASIC}}==
Most BASICs have no keywords for true and false. Boolean expressions evaluate to 0 when false, and a non-zero value (traditional versions of basic use a value of one, although some variants use a value of negative one) when true. Numbers also work in place of boolean expressions following those rules.
 
<langsyntaxhighlight gwbasiclang="basic">10 LET A%=0
20 LET B%=NOT(A%)
30 PRINT "THIS VERSION OF BASIC USES"
Line 393 ⟶ 373:
90 IF A%<>0 THEN PRINT "TEST FIVE (TRUE BY COMPARISON) DOES NOT PRINT"
100 IF B%<>0 THEN PRINT "TEST SIX (TRUE BY COMPARISON) DOES PRINT"
110 END</langsyntaxhighlight>
 
==={{header|Applesoft BASIC}}===
IF statement condition treats any non-zero numeric value as true. Comparison operators evaluate to 1 (true) or 0 (false).
Examples:<langsyntaxhighlight ApplesoftBASIClang="basic">? 2 = 3
? 2 = 2
IF 7 THEN ?"HELLO"</langsyntaxhighlight>
 
{{out}}
Line 407 ⟶ 387:
 
==={{header|BaCon}}===
<langsyntaxhighlight qbasiclang="basic">' Boolean TRUE and FALSE are non-zero and zero constants
a = TRUE
b = FALSE
Line 414 ⟶ 394:
IF 0 THEN PRINT "TRUE" : ELSE PRINT "FALSE"
IF 1 THEN PRINT "TRUE"
IF 2 THEN PRINT "TRUE"</langsyntaxhighlight>
 
{{out}}
Line 430 ⟶ 410:
 
==={{header|BASIC256}}===
<syntaxhighlight lang="basic">
<lang basic256>
' BASIC256 used numbers to represent true and false
' values. Zero is false and anything else is true.
Line 438 ⟶ 418:
print false
print true
</syntaxhighlight>
</lang>
 
==={{header|BBC BASIC}}===
<langsyntaxhighlight bbcbasiclang="basic"> REM BBC BASIC uses integers to represent Booleans; the keywords
REM FALSE and TRUE equate to 0 and -1 (&FFFFFFFF) respectively:
PRINT FALSE
PRINT TRUE</langsyntaxhighlight>
 
==={{header|Cherrycake}}===
The boolean value of true in Cherrycake is represented with a 'true' keyword, and the boolean value of false in Cherrycake is represented with a 'false' keyword. Booleans can also be represented with other types, such as binary and integers. In binary types, 0x01 and 0b01 represent true, and 0x00 and 0b00 represent false. In integer types, 1 represents true and 0 represents false.
 
==={{header|Commodore BASIC}}===
Commodore BASIC evaluates any non-zero number for TRUE&mdash;but is typically represented as 16-bit signed integer value of -1 or $FFFF&mdash;and zero evaluates to FALSE.
 
<langsyntaxhighlight gwbasiclang="basic">10 f%=("z"="a") : t%=not f% : rem capture a boolean evaluation
15 print chr$(147);chr$(14);
20 print "True is evaulated as:";t%
Line 460 ⟶ 443:
80 if i then print "True":goto 100
90 print "False"
100 next</langsyntaxhighlight>
 
{{out}}
Line 493 ⟶ 476:
 
Sample code:
<langsyntaxhighlight freebasiclang="basic">' FB 1.05.0 Win64
 
Dim i As Integer = 23
Line 506 ⟶ 489:
i = CInt(true)
Print i
Sleep</langsyntaxhighlight>
 
{{out}}
Line 522 ⟶ 505:
==={{header|Microsoft Small Basic}}===
Microsoft Small Basic has two constants: <code>"True"</code> and <code>"False"</code>.<br>
<langsyntaxhighlight smallbasiclang="basic">If c Then
notc = "False"
Else
notc = "True"
EndIf</langsyntaxhighlight>
 
==={{header|PowerBASIC}}===
Line 532 ⟶ 515:
In addition to what's noted above under [[#BASIC|BASIC]], [[PowerBASIC for Windows]] and [[PowerBASIC Console Compiler]] have the <code>ISTRUE</code> and <code>ISFALSE</code> functions. According to the help file, they "return the logical truth or falsity of a given expression". ([[PowerBASIC]] lacks a boolean data type, so the usual practice is to use integers in [[PB/DOS]], and longs in [[PB/CC]] and [[PB/Win]].)
 
<langsyntaxhighlight powerbasiclang="basic">DIM x AS LONG
x = ISTRUE(1 = 1) ' returns -1
x = ISTRUE(1 = 0) ' returns 0
x = ISFALSE(1 = 1) ' returns 0
x = ISFALSE(1 = 0) ' returns -1</langsyntaxhighlight>
 
==={{header|PureBasic}}===
Line 544 ⟶ 527:
QBasic, QuickBASIC, VB-DOS and GW-BASIC doesn't have a Boolean type. What it does is to take 0 as False, and any other value as True. The easiest way in QBASIC, QuickBASIC and VB-DOS is to create False and True constants of type Integer and, then, use them as needed:
 
<syntaxhighlight lang="basic">
<lang QBASIC>
CONST FALSE=0
CONST TRUE = Not FALSE
Print FALSE
Print TRUE
</syntaxhighlight>
</Lang>
 
In GW-BASIC you can create a variable called FALSE% and other called TRUE% and do the same. Nevertheless, is more sure to create functions in order to avoid the value to be manipulated:
 
<syntaxhighlight lang="basic">
<lang QBASIC>
10 DEF FNFALSE = 0
20 DEF FNTRUE = NOT FNFALSE
30 Print FNFALSE
40 Print NFTRUE
</syntaxhighlight>
</Lang>
 
==={{header|Run BASIC}}===
Basically 0 is false and 1 is true
<langsyntaxhighlight runbasiclang="basic">if 1 then print "1 is true"
if not(0) then print "0 is false"
if 1 < 2 then print "1 < 2 TRUE"
if 2 > 1 then print "2 > 1 TRUE"
if not(2 < 1) then print "2 not < 1"
if not(1 = 0) then print "1 not = 0"</langsyntaxhighlight>
 
==={{header|SmallBASIC}}===
<syntaxhighlight lang="basic">
a = true
b = false
</syntaxhighlight>
 
==={{header|smart BASIC}}===
Line 580 ⟶ 569:
 
==={{header|True BASIC}}===
<langsyntaxhighlight lang="basic">
!True BASIC maneja correctamente las expresiones booleanas,
!Pero no tiene un tipo booleano.
Line 596 ⟶ 585:
 
END
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 607 ⟶ 596:
==={{header|uBasic/4tH}}===
In conditionals, zero is false, non-zero is true. Note that '''=''' is not only used for assignment, it is also a fully qualified logical operator, so it is easy to assign a true boolean to a variable.
<syntaxhighlight lang="basic">t = 1 = 1
f = 0 = 1
 
Print "False = ";f;", True = ";t</langsyntaxhighlight>
{{out}}
<pre>False = 0, True = 1
Line 617 ⟶ 606:
 
==={{header|Yabasic}}===
<syntaxhighlight lang="basic">
<lang Yabasic>
// Yabasic usa números para representar los valores true y false
// Las constantes incorporadas true y false representan uno y cero respectivamente.
Line 627 ⟶ 616:
print true
end
</syntaxhighlight>
</lang>
 
==={{header|Visual Basic}}===
Line 633 ⟶ 622:
<br>When converting an integer to a boolean, <code>0</code> is <code>False</code> and anything not equal to <code>0</code> is
 
<langsyntaxhighlight vblang="basic">Dim x As Boolean
x = IIf(Int(Rnd * 2), True, False)
MsgBox x</langsyntaxhighlight>
 
=={{header|Batch File}}==
Line 643 ⟶ 632:
You can make a variable false by clearing its value <code>set "var="</code>.
 
<langsyntaxhighlight lang="dos">
@echo off
 
Line 663 ⟶ 652:
 
pause>nul
</syntaxhighlight>
</lang>
 
'''Output:'''
Line 670 ⟶ 659:
b is false
</pre>
 
=={{header|bc}}==
POSIX bc doesn't define Boolean values (i.e. it's up to the programmer which values represent false and true).
 
In GNU bc, 0 is false and any other value is true (but the result of a boolean expression will always be 1 if it is true).
 
=={{header|Befunge}}==
Zero is false, non-zero is true. This is only used by the horizontal and vertical switch operators (<code>_</code> and <code>|</code>).
 
=={{header|Binary Lambda Calculus}}==
 
The standard representations for the booleans in lambda calculus are true = \then. \else. then, false = \then. \else. else, which correspond to BLC programs <code>00 00 110</code> and <code>00 00 10</code>.
 
=={{header|BQN}}==
Line 695 ⟶ 686:
!0
ERROR</pre>
 
=={{header|Bracmat}}==
Bracmat operates with success and failure instead of true and false. Success and failure play the same role as true and false in conditional tests, but they are not values like true and false. Instead, success and failure are properties of expressions in addition to values. The simplest failing expression is the atomic expression <code>~</code>. The simplest succeeding atomic expression is the empty string <code>""</code> (or <code>()</code>). A slightly more complex failing expression is <code>1+1:3</code>, which postulates that <code>3</code> matches the result of adding <code>1</code> and <code>1</code>, while <code>1+1:2</code> of course succeeds.
 
=={{header|Brainf***}}==
Zero is false, non-zero is true. This is only used by the loop brackets (<code>[</code> and <code>]</code>).
 
=={{header|C}}==
In C, a value which is equal to 0 is false, while a value which is not equal to 0 is true. Relational and logical operators evaluate to 0 for false and 1 for true. Any of the following can be used:
Line 710 ⟶ 698:
* in C99, the boolean type <code>bool</code> (defined in header <tt><stdbool.h></tt>), where <code>true</code> gives true and <code>false</code> gives false
* in C99, any [[Complex numbers|complex number]] type, where 0 (0 real and 0 imaginary) gives false, anything else gives true
 
=={{header|C sharp|C#}}==
In C#, there are the reserved keywords <code>true</code> and <code>false</code>. Variables to hold these values are declared as either <code>bool</code> or <code>Boolean</code>. These types are identical, as <code>bool</code> is just shorthand for <code>Boolean</code>. The collection type <code>BitArray</code> returns its values as <code>Boolean</code>, packing 8 values into each byte (In contrast, the <code>Boolean</code> type uses the entire byte for one value).
Line 717 ⟶ 704:
So, when applied to <code>bool</code>, we have a <code>bool?</code> type that supports 3 values: <code>true</code>, <code>false</code> and <code>null</code>. This can be useful for some applications where the value can be undefined or missing.
 
<langsyntaxhighlight lang="csharp">bool? value = null</langsyntaxhighlight>
 
Unlike C/C++, there is no conversion in C# between other types and <code>Boolean</code>.
 
=={{header|C++}}==
In C++, there are the constants <code>true</code> and <code>false</code> to represent those values. However, there are numerous implicit conversions to <code>bool</code>, therefore in conditions (and other contexts expecting boolean values), any of the following can be used:
Line 728 ⟶ 714:
* any pointer type, where the null pointer gives false and any other pointer gives true
* any user-defined type with an implicit conversion operator either to <code>bool</code> or to a built-in type which itself can be converted to <code>bool</code> (i.e. any of the above). The C++ standard library contains one such implicit conversion: the implicit conversion of a stream <code>s</code> to <code>bool</code> gives <code>!s.fail()</code>
 
=={{header|Clean}}==
 
The standard library defines a data type <code>Bool</code>, which has exactly two members:
 
<langsyntaxhighlight lang="clean">::Bool = False | True</langsyntaxhighlight>
 
In addition to all the functionality of any other Clean algebraic data type (e.g. [[pattern matching]]), and the specified derived typeclass instances, the built-in guard (“<code>|</code>”) and <code>if</code> syntaxes use Bool.
 
As with any other Clean data type, there are no automatic conversions of other types to Bool.
 
=={{header|Clojure}}==
The boolean constants are ''true'' and ''false''. In a conditional context, the only false values are ''false'' and ''nil'' -- every other value is true.
 
=={{header|CMake}}==
<langsyntaxhighlight lang="cmake">foreach(var 1 42 ON yes True y Princess
0 OFF no False n Princess-NOTFOUND)
if(var)
Line 750 ⟶ 733:
message(STATUS "${var} is false.")
endif()
endforeach(var)</langsyntaxhighlight>
 
<pre>-- 1 is true.
Line 769 ⟶ 752:
 
Scripts that want <code>if(TRUE)</code> should require CMake 2.8; do refer to [http://www.cmake.org/cmake/help/cmake-2-8-docs.html#policy:CMP0012 cmake --help-policy CMP0012].
 
=={{header|COBOL}}==
===Booleans===
Booleans are defined as any data item having a <code>PICTURE</code> made up of ones.
<langsyntaxhighlight lang="cobol"> 01 some-bool PIC 1 BIT.</langsyntaxhighlight>
 
The boolean literals <code>B"1"</code> and <code>B"0"</code> represent true and false, respectively.
Line 779 ⟶ 761:
===Conditions===
Prior to COBOL 2002, there was no boolean data type, only ''condition names'' which could be used in conditional expressions. Condition names are subordinate to another data item, have the level-number 88, and are defined with the value(s) which their parent data item must have for them to be set to true. They can be defined like so:
<langsyntaxhighlight lang="cobol"> 01 X PIC 9.
88 X-Is-One VALUE 1.
88 X-Is-Even VALUE 0 2 4 6 8.
88 X-Larger-Than-5 VALUE 6 THRU 9.</langsyntaxhighlight>
 
Conditions can be <code>SET</code> to <code>TRUE</code> or <code>FALSE</code>. Setting a condition to <code>TRUE</code> will move the (first) value in the <code>VALUE</code> clause to the parent data item. In COBOL 2002, an optional <code>FALSE</code> clause was added which allowed the condition to be <code>SET</code> to <code>FALSE</code> and consequently set the parent data item to the specified value in the clause. A <code>FALSE</code> clause can only have one value. An example of conditions in action:
<langsyntaxhighlight lang="cobol"> PROGRAM-ID. Condition-Example.
 
DATA DIVISION.
Line 812 ⟶ 794:
DISPLAY "Foo is zero."
END-IF
.</langsyntaxhighlight>
 
{{out}}
Line 820 ⟶ 802:
Foo is not zero, it is 1.
</pre>
 
=={{header|CoffeeScript}}==
CoffeeScript is largely based on JavaScript, but that may only serve to confuse you. Your best bet is to learn all the cases:
 
<langsyntaxhighlight lang="coffeescript">
h1 = {foo: "bar"}
h2 = {foo: "bar"}
Line 853 ⟶ 834:
false and true
]
</syntaxhighlight>
</lang>
 
=={{header|Common Lisp}}==
The only value in Common Lisp that is false is the symbol <code>nil</code>; all other values are true. The symbol <code>t</code> is the canonical true value.
Line 861 ⟶ 841:
 
For more information, follow the links from [http://www.lispworks.com/documentation/HyperSpec/Body/t_ban.htm CLHS: Type BOOLEAN].
 
=={{header|Component Pascal}}==
<langsyntaxhighlight lang="oberon2">
VAR
b,c: BOOLEAN;
Line 870 ⟶ 849:
c := FALSE;
...
</syntaxhighlight>
</lang>
 
=={{header|Crystal}}==
Crystal uses the "truthiness" of a value to determine whether or not to execute the body of an <code>if</code>, <code>unless</code>, <code>while</code>, or <code>until</code> block.
Line 877 ⟶ 855:
As mentioned in the [https://crystal-lang.org/reference/syntax_and_semantics/truthy_and_falsey_values.html language reference], the values <code>nil</code> and <code>false</code>, as well as null pointers are "falsey", all other values are truthy
 
<langsyntaxhighlight lang="ruby">if false
puts "false"
elsif nil
Line 885 ⟶ 863:
elsif true && "any other value"
puts "finally true!"
end</langsyntaxhighlight>
 
=={{header|D}}==
In D, there are constants <code>false</code> and <code>true</code> to represent their respective values (that also implicitly convert to 0 and 1).
Line 896 ⟶ 873:
* Any class reference type, using the "is" operator, the null reference gives false and any other reference gives true;
* Any user-defined type with an implicit conversion operator (opCast) either to bool or to a built-in type which itself can be converted to bool.
 
=={{header|Dc}}==
In dc there are no built in boolean values or functions.
Adopting the way C codes them appears to be a good idea: <code>0=FALSE</code> and <code>1=TRUE</code>.
 
=={{header|Delphi}}==
In addition to the types defined by [[#Object Pascal|Object Pascal]], Delphi defines the type <code>Bool</code>.
 
=={{header|DWScript}}==
The standard <code>Boolean</code> type has two values: <code>True</code> and <code>False</code>, with <code>Ord(False) = 0</code> and <code>Ord(True) = 1</code>.
 
=={{header|Dyalect}}==
 
Dyalect has a standard <code>Bool</code> type with two values: <code>true</code> and <code>false</code>. Other types in Dyalect support implicit conversion to booleans. All values except <code>false</code> and <code>nil</code> are converted to <code>true</code>.
 
=={{header|Dylan}}==
<langsyntaxhighlight Dylanlang="dylan">#t // <boolean> true
#f // <boolean> false</langsyntaxhighlight>
For the purpose of conditional statements, all objects other than <tt>#f</tt> evaluate to true.
 
=={{header|Déjà Vu}}==
 
Déjà Vu has <code>true</code> and <code>false</code>, two numbers that are equal to 1 and 0 respectively. Every object has a truth value. The only falsy things are numbers equal to zero, empty lists and dictionaries, and zero-length strings and blobs.
 
=={{header|E}}==
 
E defines two basic objects <code>true</code> and <code>false</code>, and the <code>boolean</code> [http://wiki.erights.org/wiki/Guard guard] which accepts them. All builtin operations which take booleans (e.g. the <code>if</code> control structure) coerce the input to boolean.
 
<langsyntaxhighlight lang="e">? if (true) { "a" } else { "b" }
# value: "a"
 
Line 931 ⟶ 901:
 
? if (90) { "a" } else { "b" }
# problem: the int 90 doesn't coerce to a boolean</langsyntaxhighlight>
 
No objects in the standard library coerce to boolean, but user-written objects may choose to do so; they can then be used in place of booleans.
 
<langsyntaxhighlight lang="e">? def bowlian {
> to __conformTo(guard) {
> if (guard == boolean) { return true }
Line 941 ⟶ 911:
> }
> if (bowlian) { "a" } else { "b" }
# value: "a"</langsyntaxhighlight>
 
=={{header|EasyLang}}==
EasyLang does not have built-in boolean types or constants. Operators that "return" a boolean type (e.g. >, <=) cannot be used outside of conditional statements and loops.
 
You can use 1 or 0 in place of true and false.
 
<syntaxhighlight lang="easylang">
boolNumber = 1
if boolNumber = 1
print "True"
else
print "False"
.
</syntaxhighlight>
 
=={{header|EchoLisp}}==
"All that which is not false is true" - Attribué à L. Wittgenstein - The only false value is the boolean #f. '''All''' other objects, including the empty list or null or 0 ..- evaluate to #t = true.
<langsyntaxhighlight lang="scheme">
(not #t) → #f
(not #f) → #t
(not null) → #f
(not 0) → #f
</syntaxhighlight>
</lang>
 
=={{header|Ecstasy}}==
Ecstasy's defines [https://github.com/xtclang/xvm/blob/master/lib_ecstasy/src/main/x/ecstasy/Boolean.x an enumeration named Boolean], which contains the values <span style="background-color: #e5e4e2"><tt>&nbsp;False&nbsp;</tt></span> and <span style="background-color: #e5e4e2"><tt>&nbsp;True&nbsp;</tt></span>.
<syntaxhighlight lang="java">
module GeorgeBoole {
@Inject Console console;
 
void run() {
Boolean f = False;
assert !f == True;
 
// methods like "and", "or", "xor", and "not" are the same as
// the operators "&"/"&&", "|"/"||", "^"/"^^", and the unary "~"
assert True.and(False) == True & False == False;
assert True.or(False) == True | False == True;
assert True.xor(False) == True ^ False == True;
assert True.not() == ~True == False;
 
console.print($"0==1 = {0==1}");
console.print($"!False = {!False}");
}
}
</syntaxhighlight>
 
{{out}}
<pre>
0==1 = False
!False = True
</pre>
 
=={{header|EGL}}==
Line 956 ⟶ 969:
A boolean can be converted to a string ("true" or "false") using StrLib.booleanAsString(boolean);
 
<syntaxhighlight lang="egl">
<lang EGL>
myBool boolean = 0;
SysLib.writeStdout("myBool: " + StrLib.booleanAsString(myBool));
Line 977 ⟶ 990:
myInt = true;
SysLib.writeStdout("myInt: " + StrLib.booleanAsString(myInt));
</syntaxhighlight>
</lang>
 
{{out}}
Line 992 ⟶ 1,005:
myInt: true
</pre>
 
=={{header|Elena}}==
ELENA uses the system'BaseBoolValue class, which has two singleton sub-classes: system'true and system'false. E.g. an expression like 5 == 5 returns system'true.
There is a Boolean variable : system'Boolean.
 
=={{header|Elixir}}==
Elixir utilizes Erlang's definition of boolean types; they're defined as the atoms <tt>:true</tt> and <tt>:false</tt>. No other type is equal to true or false.
<syntaxhighlight lang="elixir">
<lang Elixir>
iex(1)> true === :true
true
Line 1,006 ⟶ 1,017:
iex(3)> true === 1
false
</syntaxhighlight>
</lang>
 
nil (also defined as an atom, <tt>:nil</tt>) is not equal to false.
<syntaxhighlight lang="elixir">
<lang Elixir>
iex(4)> nil === :nil
true
iex(5)> nil === false
false
</syntaxhighlight>
</lang>
 
=={{header|Elm}}==
<syntaxhighlight lang="elm">
<lang Elm>
--True and False directly represent Boolean values in Elm
--For eg to show yes for true and no for false
Line 1,061 ⟶ 1,071:
display expr=
div [] [ text ( toString expr ++ "-->" ++ toString(evaluate expr) ) ]
--END</langsyntaxhighlight>
 
=={{header|Emacs Lisp}}==
Symbol <code>nil</code> is false and symbol <code>t</code> is true. Both are self-evaluating, being variables whose value is their own symbol. See [http://www.gnu.org/software/emacs/manual/html_node/elisp/nil-and-t.html the elisp manual] for more.
 
In an <code>if</code> and similar, <code>nil</code> is false and anything else is true. To make that clear docstrings etc say "non-nil" for true. (See last item in [http://www.gnu.org/software/emacs/manual/html_node/elisp/Documentation-Tips.html elisp manual documentation tips].)
 
=={{header|EMal}}==
<syntaxhighlight lang="emal">
^|EMal has a dedicated Logical type expressed by the logic keyword.
|It's not nullable and holds the two values false and true.
|There are no implicit conversions, but explicit conversions
|from/to int (0,1) or text ("⊥", "⊤") are allowed.
|^
logic booleanTrue = true
logic booleanFalse = false
if 2 > 1 and true and not false
writeLine("true: " + true + ", false: " + false)
end
if false == logic!0
writeLine("explicit conversion from integer")
end
if true == logic!"⊤"
writeLine("explicit conversion from text")
end
writeLine(int!true) # is one
writeLine(text!false) # is "⊥"
</syntaxhighlight>
{{out}}
<pre>
true: ⊤, false: ⊥
explicit conversion from integer
explicit conversion from text
1
</pre>
 
=={{header|Erlang}}==
Erlang doesn't technically define boolean types. Instead, the atoms <tt>true</tt> and <tt>false</tt> are used. However, they are integrated well enough into the language there should be no problem with that as long as you don't expect false and true to mean anything but literal false and true.
 
<langsyntaxhighlight lang="erlang">1> 1 < 2.
true
2> 1 < 1.
false
3> 0 == false.
false</langsyntaxhighlight>
 
=={{header|Excel}}==
The Logical category of functions includes the constants TRUE() and FALSE() which are displayed without the parantheses in cells. There are logical functions such as AND and OR too. For an AND truth table of two variables, take 3 cells, say A1,B1 and C1. In C1 type in :
 
<langsyntaxhighlight lang="excel">=AND(A1;B1)</langsyntaxhighlight>
 
Copy this until C4. Now as values are filled in from A1-A4 and B1-B4, C1-C4 gets updated.
 
<syntaxhighlight lang="text">0 0 FALSE
0 1 FALSE
1 0 FALSE
1 1 TRUE</langsyntaxhighlight>
 
=={{header|F_Sharp|F#}}==
The type bool is an abbreviation for the .NET framework type <code>System.Boolean</code>.
<langsyntaxhighlight lang="fsharp">type bool = System.Boolean</langsyntaxhighlight>
Instances of this type have values of either <code>true</code> or <code>false</code>.
 
=={{header|Factor}}==
In Factor any value except <code>f</code> is true, with <code>t</code> being the canonical true value.
 
=={{header|FALSE}}==
Zero is false and non-zero is true. This is used by the if and while operators ('''?''' and '''#'''). Comparators ('''=''' and '''<''') yield -1 for true and 0 for false.
 
=={{header|Fantom}}==
 
Conditional statements must return a <code>sys::Bool</code>, and the only two values are <code>true</code> and <code>false</code>.
 
=={{header|Forth}}==
In conditionals, zero is false, non-zero is true. There are predefined constants for the canonical forms. For FORTH-83 or later, FALSE is zero and TRUE is -1 (all bits set). For earlier FORTH standards, FALSE is zero and TRUE is 1.
<langsyntaxhighlight lang="forth">TRUE . \ -1
FALSE . \ 0</langsyntaxhighlight>
 
=={{header|Fortran}}==
Fortran started off in 1957 with only floating-point and fixed-point variables, so any calculations in the style of Boolean arithmetic would be done with integer values such as zero and not-zero, using multiplication and addition for '''and''' and '''or'''.
Line 1,115 ⟶ 1,147:
Fortran 66 introduced a '''logical''' data type which can be set to either '''.true.''' or '''.false.''' or be generated via logical expressions such as <=, etc. Such variables cannot be used in normal arithmetic with operators such as +-*/ but only with logical operators such as .OR. and so on. If via the EQUIVALENCE statement their numerical values (or, bit patterns) are inspected as say an integer, the values may well not be as anticipated and differ between computers and compilers. For instance, on the Burroughs 6700 an '''integer''' variable equivalenced to a '''logical''' variable would appear as '''.true.''' if odd, '''.false.''' if even.
 
The default storage size of a LOGICAL variable is the same as the default storage size of an INTEGER variable, which for many systems is 32 bits. This is done to simplify calculations of record sizes, or the alignment of variables in COMMON storage areas. It is usually possible to declare variables with certain byte sizes (normally only powers of two) so that LOGICAL*1 or similar declarations may be available. If used however there may arise alignment issues with adjacent variables of other types (such as REAL) that may require padding to even word boundaries for best access. Consider <langsyntaxhighlight Fortranlang="fortran"> TYPE MIXED
LOGICAL*1 LIVE
REAL*8 VALUE
END TYPE MIXED
TYPE(MIXED) STUFF(100)</langsyntaxhighlight>
The array STUFF might occupy 900 bytes, or, 1600 bytes if each double-precision value has to be aligned to an eight-byte boundary. In the latter case, it may be better to declare LIVE and VALUE to be separate hundred-element arrays as in <langsyntaxhighlight Fortranlang="fortran"> TYPE MIXED
LOGICAL*1 LIVE(100)
REAL*8 VALUE(100)
END TYPE MIXED
TYPE(MIXED) STUFF</langsyntaxhighlight>
Except that now only hundred-element variables of type MIXED can be declared. Either way, the record size needed for a disc file holding such items will need careful thought.
 
=={{header|Free Pascal}}==
In addition to the types defined by [[#Object Pascal|Object Pascal]], free Pascal defines the <code>qWordBool</code>, that has a <code>sizeOf</code> eight.<br>
Furthermore, True and False are not keywords from FPC v3.0.0. It is possible to assign any value to true and false, like strings but even objects.<br>
<langsyntaxhighlight lang="pascal">{$mode objfpc}{$ifdef mswindows}{$apptype console}{$endif}
const
true = 'true';
Line 1,154 ⟶ 1,185:
END;
 
</syntaxhighlight>
</lang>
JPD 2022/08/02
 
=={{header|Frink}}==
The literal boolean values are called <CODE>true</CODE> and <CODE>false</CODE>. In addition, in conditional expressions, the following are treated as true:
Line 1,167 ⟶ 1,197:
* The empty string
* The special value <CODE>undef</CODE>
 
=={{header|Futhark}}==
 
Futhark has a <code>bool</code> type, with the two values <code>True</code> and <code>False</code>. They are used for branching.
 
 
=={{header|FutureBasic}}==
FB recognizes two types for boolean truth values: BOOL and boolean. There is a subtle difference between the two. A BOOL will accept without complaint the macros YES, and NO, the equivalent native FB constants, _true, and _false, and, of course, 0 and 1. However, although a BOOL can be assigned other values, it will throw a clang (FB"s native compiler) warning as with this example:
<syntaxhighlight lang="futurebasic">
window 1
BOOL boolTest
boolTest = -1
print boolTest
HandleEvents
</syntaxhighlight>
When compiled this code generates this warning:
<syntaxhighlight lang="futurebasic">
implicit conversion from constant value -1 to 'BOOL'; the only well defined values for 'BOOL' are YES and NO [-Wobjc-bool-constant-conversion]
</syntaxhighlight>
On the other hand, a Boolean can be assigned not only YES, NO, _true, or _false, and 0 or 1, but also other values, such as the common -1, and compile without complaint.
 
Since FB can also work with objects, native BOOLs and booleans need to be converted to objects as demonstrated in the code below.
 
Trivia: Because NULL and _nil zero values in FB, they evaluate to "NO" or “_false” in conditional expressions.
<syntaxhighlight lang="futurebasic">
void local fn BooleanExercise
BOOL areEqual = (1 == 1) // areEqual is YES
BOOL areNotEqual = not areEqual /* areNotEqual is converted to: areEqual = (-(1 == 1)). -1 throws a clang warning.
NOTE: FB does not accept the "!" shorthand for "not", i.e. !areEqual, common in other languages. */
print "areEqual == "; areEqual
print "areNotEqual == "; areNotEqual
print
// Boolean types assigned values outside YES or NO compile without complaint.
boolean minusOneTest = -1
print "minusOneTest == "; minusOneTest
// Typical boolean value is use
BOOL flatterRosettaReader = YES
if (flatterRosettaReader)
print
print @"Rosetta Code programmers understand booleans."
print
end if
// Defined Core Foundation boolean values
print "kCFBooleanTrue == "; kCFBooleanTrue
print "kCFBooleanFalse == "; kCFBooleanFalse
print
// Number object assigned literal value
CFNumberRef booleanObject = @(YES)
print "booleanObject == "; booleanObject
print
// Number object created programmatically
booleanObject = NO
print "booleanObject variable reassigned as N0 == "; fn NumberWithBool( booleanObject )
print
end fn
 
window 1
 
fn BooleanExercise
 
HandleEvents
</syntaxhighlight>
{{output}}
<pre>
areEqual == 1
areNotEqual == 0
 
minusOneTest == -1
 
Rosetta Code programmers understand booleans.
 
kCFBooleanTrue == 1
kCFBooleanFalse == 0
 
booleanObject == 1
 
booleanObject variable reassigned as N0 == 0
</pre>
 
=={{header|Gambas}}==
'''[https://gambas-playground.proko.eu/?gist=65324112fde86d51937b9cfcca0c51f9 Click this link to run this code]'''
<langsyntaxhighlight lang="gambas">Public Sub Main()
Dim bX As Boolean
 
Line 1,181 ⟶ 1,290:
Print bX
 
End</langsyntaxhighlight>
Output:
<pre>
Line 1,187 ⟶ 1,296:
True
</pre>
 
=={{header|GAP}}==
<langsyntaxhighlight lang="gap">1 < 2;
# true
 
Line 1,201 ⟶ 1,309:
 
fail = fail;
# true</langsyntaxhighlight>
 
=={{header|Go}}==
Go defines a built-in data type <code>bool</code>, which has exactly two values, represented by the keywords <code>true</code> and <code>false</code>. There is no conversion between booleans and other data types. Conditionals require a boolean value, so if i is a numeric type, for example, you must spell out <tt>if i != 0 {</tt> if you wish to interpret it as boolean.
Line 1,208 ⟶ 1,315:
The template package however, uses a different rule for <tt>if</tt> actions. There, it is testing if a "pipeline" is "empty" where the empty values are false, 0, any nil pointer or interface value, and any array, slice, map, or string of length zero.
 
<langsyntaxhighlight lang="go">
package main
 
Line 1,234 ⟶ 1,341:
bolStr, _ := strconv.ParseBool(str1)
fmt.Println("After :", reflect.TypeOf(bolStr)) // prt After : bool
}</langsyntaxhighlight>
 
=={{header|Groovy}}==
[[Groovy]] has a boolean "primitive" type and a Boolean "object wrapper" type directly derived from [[Java]]. See the Java solution to this task for more details.
 
Unlike Java, any null reference converts to a boolean "false", while any non-null object reference converts to a boolean "true"... EXCEPT if that object has a specific defined conversion to boolean "false". For example, for any numeric type, any zero value representation converts to "false" and any non-zero value converts to "true". For any collection type, non-empty converts to "true" and empty converts to "false".
 
=={{header|Haskell}}==
 
The Haskell standard [http://haskell.org/haskellwiki/Prelude Prelude] defines a data type <code>Bool</code>, which has exactly two members:
 
<langsyntaxhighlight lang="haskell">data Bool = False | True deriving (Eq, Ord, Enum, Read, Show, Bounded)</langsyntaxhighlight>
 
In addition to all the functionality of any other Haskell algebraic data type (e.g. [[pattern matching]]), and the specified derived typeclass instances (e.g. <code>False == False</code>, <code>succ False == True</code>, <code>(maxBound :: Bool) == True</code>, etc.), the built-in guard (“<code>|</code>”) and <code>if</code> syntaxes use Bool.
 
As with any other Haskell data type, there are no automatic conversions of other types to Bool.
 
=={{header|HicEst}}==
Zero is false, non-zero is true. Numbers also work in place of boolean expressions following this rule.
 
=={{header|HolyC}}==
In HolyC, there are the reserved keywords `TRUE` and `FALSE`. Variables to hold these values are declared as `Bool`.
Line 1,262 ⟶ 1,365:
* Any floating point type, where again, 0 gives false and everything else gives true.
* Any pointer type, where the null pointer gives false and any other pointer gives true.
 
=={{header|i}}==
Any non-zero number is true in 'i'.
<langsyntaxhighlight lang="i">main
//Bits aka Booleans.
b $= bit()
Line 1,285 ⟶ 1,387:
b $= 0
print(b)
}</langsyntaxhighlight>
 
=={{header|Icon}} and {{header|Unicon}}==
Icon and Unicon do not use Boolean values for flow control. Rather they use success (returning a result, any result even a null) or failure (a signal) for this purpose. Built-in controls support not, and (&), and or (|). For an example of how this works, see [[Short-circuit_evaluation#Icon_and_Unicon|Short Circuit Evaluation]]. Icon and Unicon do support bit operations on integers which could be used to record Boolean state. See also [[Logical_operations#Icon_and_Unicon|Logical Operations]] for an example of how and when Boolean values might be implemented.
 
=={{header|Idris}}==
<langsyntaxhighlight lang="idris">Idris> :doc Bool
Data type Prelude.Bool.Bool : Type
Boolean Data Type
Line 1,300 ⟶ 1,400:
 
True : Bool
</syntaxhighlight>
</lang>
 
=={{header|Inform 6}}==
Inform 6 has the constants <code>true</code> and <code>false</code>, which are identical to <code>1</code> and <code>0</code> respectively. One of these values will always be yielded by a condition operator (an operator that yields a boolean value). In addition, any non-zero value is considered to be true.
 
=={{header|Inform 7}}==
The Boolean type is called "truth state" and has the values "true" and "false".
 
However, Inform 7 distinguishes between Boolean values and conditions. Comparison expressions do not return truth states, and truth state expressions cannot be used directly in conditional statements. There is a conversion from condition to truth state:
<langsyntaxhighlight lang="inform7">let B be whether or not 123 is greater than 100;</langsyntaxhighlight>
And truth states can be used in conditions by adding an explicit comparison:
<langsyntaxhighlight lang="inform7">if B is true, say "123 is greater than 100."</langsyntaxhighlight>
 
Phrases (functions) cannot be defined to return a truth state directly. Instead, they are defined using "to decide whether" (or "to decide if") and can then be used as conditions:
<langsyntaxhighlight lang="inform7">To decide whether the CPU is working correctly:
if 123 is greater than 100, decide yes;
otherwise decide no.
Line 1,322 ⟶ 1,420:
let B be whether or not the CPU is working correctly;
[...or use as a condition]
if the CPU is working correctly, say "Whew."</langsyntaxhighlight>
 
=={{Header|Insitux}}==
 
Simply <code>true</code> and <code>false</code>, however, anything which is not <code>false</code> or <code>null</code> is considered truthy.
 
=={{header|J}}==
 
False is <tt>0</tt>, true is <tt>1</tt>. This is an [http://web.archive.org/web/20080703182354/http://keiapl.info/anec/#Maple advantage (search for Maple)].
 
This approach also works well with [[wp:Bayes'_theorem|Bayes' theorem]], as false matches 0% probability and true matches 100% probability.
 
=={{header|Java}}==
<p>
Java has <tt>true</tt> and <tt>false</tt> keywords, representing the only values of type <tt>boolean</tt>. There are also object wrappers <tt>Boolean.TRUE</tt> and <tt>Boolean.FALSE</tt>, of type <tt>Boolean</tt> which may be un-boxed into <tt>boolean</tt>s (auto-unboxed in Java 1.5+). There are no automatic conversions from any other types into <tt>boolean</tt>, and it is a compile-time error to use any type other than <tt>boolean</tt> or <tt>Boolean</tt> in a place that expects a <tt>boolean</tt> (e.g. if-statement condition, while-statement condition, operand of a logical operator, etc.).
In Java, <code>true</code> and <code>false</code> are used to reference a <code>boolean</code> value.<br />
There is no use of <kbd>0</kbd> and <kbd>1</kbd>, or <kbd>undefined</kbd> vs. <kbd>defined</kbd>.
</p>
<p>
As with the other primitive data-types, <code>boolean</code> has a wrapper class, <code>Boolean</code>, which includes a
set of valuable <kbd>boolean</kbd> operations.
</p>
<syntaxhighlight lang="java">
boolean valueA = true;
boolean valueB = false;
</syntaxhighlight>
<p>
Or.
</p>
<syntaxhighlight lang="java">
Boolean valueA = Boolean.TRUE;
Boolean valueB = Boolean.FALSE;
</syntaxhighlight>
<p>
Additionally.
</p>
<syntaxhighlight lang="java">
Boolean valueA = Boolean.valueOf(true);
Boolean valueB = Boolean.valueOf(false);
</syntaxhighlight>
 
=={{header|JavaScript}}==
Line 1,344 ⟶ 1,470:
 
(source: [http://www.ecma-international.org/publications/standards/Ecma-262.htm ECMAScript Language Reference])
 
=={{header|Joy}}==
The truth literals are <code>true</code> and <code>false</code>. In a conditional context, <code>false</code>, numerical values (including characters) of zero, empty lists and empty sets are evaluated as false.
 
=={{header|jq}}==
Line 1,364 ⟶ 1,493:
 
Other objects do not represent boolean values and cannot be used in conditional expressions, for example:
<langsyntaxhighlight lang="julia">julia> if 1
println("true")
end
ERROR: type: non-boolean (Int64) used in boolean context</langsyntaxhighlight>
However, integers can be converted to boolean types with the <code>bool()</code> function (which treats nonzero values as <code>true</code>)
<langsyntaxhighlight lang="julia">julia> bool(-2:2)
5-element Bool Array:
true
Line 1,375 ⟶ 1,504:
false
true
true</langsyntaxhighlight>
 
=={{header|KonsolScript}}==
The Boolean type has two values: <code>true</code> and <code>false</code>
Line 1,384 ⟶ 1,512:
* String: the empty (zero-length) string is <code>false</code>; otherwise <code>true</code>
`
 
=={{header|Kotlin}}==
Booleans in Kotlin are given by the literals true and false, case sensitive, which are the only instances of the class Boolean.
 
=={{header|LabVIEW}}==
{{VI solution|LabVIEW_Boolean_values.png}}
 
=={{header|Lambdatalk}}==
Predefined constants are true and false:
<langsyntaxhighlight lang="scheme">
{if true then YES else NO}
-> YES
{if false then YES else NO}
-> NO
</syntaxhighlight>
</lang>
Following the lambda calculus user defined booleans can be built
<langsyntaxhighlight lang="scheme">
{def TRUE {lambda {:a :b} :a}}
-> TRUE
Line 1,413 ⟶ 1,538:
-> no
 
</syntaxhighlight>
</lang>
 
=={{header|Lasso}}==
Comparisons are evaluated in Lasso as either true of false, so "1 == 2" will evaluate as true, and "1 == 1" will evaluate as true.
Line 1,420 ⟶ 1,544:
A variable can also be assigned a boolean type, and as such then holds either true of false states.
 
<langsyntaxhighlight Lassolang="lasso ">!true
// => false
 
Line 1,430 ⟶ 1,554:
 
$x = false
$x // => false</langsyntaxhighlight>
 
In a conditional, if the result is the integer 0, it is also evaluated as boolean false.
If the conditional results in an integer greater than zero, it is evaluated as boolean true.
 
<langsyntaxhighlight Lassolang="lasso ">local(x = string)
// size is 0
#x->size ? 'yes' | 'no'
Line 1,441 ⟶ 1,565:
local(x = '123fsfsd')
// size is 8
#x->size ? 'yes' | 'no'</langsyntaxhighlight>
 
{{out}}
<pre>no
yes</pre>
 
=={{header|Latitude}}==
 
Line 1,452 ⟶ 1,575:
 
By convention, objects which are used to represent failure are considered falsy. For instance, the standard library <code>'unit-test</code> module provides the <code>FailedTest</code> object, which is returned when a unit test fails. This object (and its children) test falsy when used as a conditional.
 
=={{header|LFE}}==
<langsyntaxhighlight lang="lisp">
> 'true
true
Line 1,463 ⟶ 1,585:
> (or 'false 'true)
true
</syntaxhighlight>
</lang>
 
 
=={{header|Lingo}}==
Lingo has the constants TRUE and FALSE. In numerical context they have the values 1 and 0. In boolean context any nonzero integer evaluates to TRUE.
<langsyntaxhighlight lang="lingo">put TRUE
-- 1
put FALSE
-- 0
if 23 then put "Hello"
-- "Hello"</langsyntaxhighlight>
 
=={{header|Little}}==
For conditionals, numeric variables (including poly variables
Line 1,486 ⟶ 1,605:
 
 
<langsyntaxhighlight Clang="c">int a = 0;
int b = 1;
int c;
Line 1,497 ⟶ 1,616:
if (!defined(c)) {puts("fourth test is true");} // This should print
if (str1) {puts("fifth test str1 is true");} // This should print
if (str2) {puts("sixth test str2 is false");} // This should not print</langsyntaxhighlight>
 
=={{header|LiveCode}}==
true and the string "true" are both logical true, similarly for false and "false" being logical false.
 
=={{header|Logo}}==
Logo has predefined symbols for true and false (<code>"true</code> and <code>"false</code>), which are the values returned by predicates and required by logical operators and conditionals.
<langsyntaxhighlight lang="logo">print 1 < 0 ; false
print 1 > 0 ; true
if "true [print "yes] ; yes
if not "false [print "no] ; no</langsyntaxhighlight>
Unlike other lispy languages, there are no other implicit conversions.
You must test explicitly for zero or empty collections.
<langsyntaxhighlight lang="logo">if equal? 0 ln 1 [print "zero]
if empty? [] [print "empty] ; empty list
if empty? "|| [print "empty] ; empty word</langsyntaxhighlight>
 
=={{header|Lua}}==
All values in Lua other than <code>false</code> or <code>nil</code> are considered <code>true</code>:
<langsyntaxhighlight lang="lua">if 0 then print "0" end -- This prints
if "" then print"empty string" end -- This prints
if {} then print"empty table" end -- This prints
if nil then print"this won't print" end
if true then print"true" end
if false then print"false" end -- This does not print</langsyntaxhighlight>
 
=={{header|M2000 Interpreter}}==
True is -1 and False is 0 (double type), but any comparison return boolean. We can define boolean type variables.
Line 1,537 ⟶ 1,652:
 
 
<syntaxhighlight lang="m2000 interpreter">
<lang M2000 Interpreter>
Module CheckBoolean {
A=True
Line 1,568 ⟶ 1,683:
Print str$(2, "\t\r\u\e;\t\r\u\e;\f\a\l\s\e")="true"
 
</syntaxhighlight>
</lang>
 
=={{header|Maple}}==
The keywords "true" and "false" are the default boolean values.
Line 1,575 ⟶ 1,689:
Expressions under assumptions may be evaluated logically using the <code>is</code> command.
Types may be tested, resulting in boolean values, using the <code>type</code> command.
 
=={{header|Mathematica}}/{{header|Wolfram Language}}==
True and False are the default boolean values.
To make any expression a boolean use the Boole[] function.
 
=={{header|MATLAB}}==
The keywords "true" and "false" are the default boolean values.
Line 1,588 ⟶ 1,700:
Sample Usage: (islogical() is a function that returns a boolean "1" if the input is a boolean, "0" otherwise)
 
<langsyntaxhighlight MATLABlang="matlab">>> islogical(true)
 
ans =
Line 1,622 ⟶ 1,734:
ans =
 
0</langsyntaxhighlight>
 
=={{header|Maxima}}==
<langsyntaxhighlight lang="maxima">is(1 < 2);
/* true */
 
Line 1,635 ⟶ 1,746:
 
not false;
/* true */</langsyntaxhighlight>
 
=={{header|Metafont}}==
Metafont has the type <tt>boolean</tt>; a boolean variable can be <tt>true</tt> or <tt>false</tt>.
Using non boolean values (or expressions that do not evaluate to a boolean value) results in a recoverable error; by default, any non-boolean value is interpreted as false.
 
=={{header|min}}==
{{works with|min|0.19.3}}
Line 1,651 ⟶ 1,760:
*empty string: <code>false</code>
*boolean: no conversion performed
 
=={{header|MiniScript}}==
In MiniScript, numbers represent boolean values, with additional fuzzy logic for degrees of truth. Built-in constants `true` and `false` are simply aliases for 1 and 0, respectively.
 
<langsyntaxhighlight MiniScriptlang="miniscript">boolTrue = true
boolFalse = false
 
Line 1,665 ⟶ 1,773:
kindaTrue = 0.4
print "mostlyTrue AND kindaTrue: " + (mostlyTrue and kindaTrue)
print "mostlyTrue OR kindaTrue: " + (mostlyTrue or kindaTrue)</langsyntaxhighlight>
{{out}}
<pre>boolTrue is true, and its value is: 1
Line 1,671 ⟶ 1,779:
mostlyTrue AND kindaTrue: 0.32
mostlyTrue OR kindaTrue: 0.88</pre>
 
=={{header|Mirah}}==
<langsyntaxhighlight lang="mirah">import java.util.ArrayList
import java.util.HashMap
 
Line 1,702 ⟶ 1,809:
#puts 'FALSE is false' if !FALSE # ==> FALSE does not exist
 
</syntaxhighlight>
</lang>
 
=={{header|Modula-2}}==
<langsyntaxhighlight lang="modula2">MODULE boo;
 
IMPORT InOut;
Line 1,721 ⟶ 1,827:
done := A > B
UNTIL done
END boo.</langsyntaxhighlight>
 
=={{header|Modula-3}}==
Similar to [[Ada]], Modula-3 has a built-in <tt>BOOLEAN</tt> type defined as
<langsyntaxhighlight lang="modula3">TYPE BOOLEAN = {FALSE, TRUE}</langsyntaxhighlight>
 
=={{header|Monte}}==
 
Much like [[E]], Monte has built-in objects <tt>true</tt> and <tt>false</tt>, and a boolean [http://wiki.erights.org/wiki/Guard guard].
 
<syntaxhighlight lang="monte">
<lang Monte>
def example(input :boolean):
if input:
return "Input was true!"
return "Input was false."
</syntaxhighlight>
</lang>
 
=={{header|MUMPS}}==
 
Line 1,757 ⟶ 1,860:
Newer implementations of the language may also support !! (exclusve or).
There is one unary boolean operator: ' (not).</p>
 
=={{header|Nanoquery}}==
<langsyntaxhighlight lang="nanoquery">a = true
b = false
 
Line 1,766 ⟶ 1,868:
else if b
println "b is true"
end</langsyntaxhighlight>
{{out}}
<pre>a is true</pre>
 
=={{header|Neko}}==
 
Line 1,777 ⟶ 1,878:
is false, 0 or null. $istrue returning true if value is not false, not 0 and not null.
 
<langsyntaxhighlight lang="neko">/* boolean values */
$print(true, "\n");
$print(false, "\n");
Line 1,803 ⟶ 1,904:
} else {
$print("$istrue(1) tests false\n");
}</langsyntaxhighlight>
 
{{out}}
Line 1,815 ⟶ 1,916:
$istrue(0) tests false
$istrue(1) tests true</pre>
 
=={{header|Nemerle}}==
In Nemerle, boolean values are held in variables of type '''bool''', and can be either '''true''' or '''false'''. Comparison expressions evaluate to boolean values as well.
 
=={{header|NetRexx}}==
NetRexx inherits boolean functionality directly from the [[Java]] virtual machine with the exception that the <code>true</code> and <code>false</code> keywords are not defined to the language.
Defining <code>true</code> and <code>false</code> variables can lead to name collisions during compilation so a simple expedient is to define boolean functions <code>isTrue</code>
and <code>isFalse</code> to return the appropriate values.
<langsyntaxhighlight NetRexxlang="netrexx">/* NetRexx */
options replace format comments java crossref savelog symbols nobinary
 
Line 1,841 ⟶ 1,940:
method isFalse public static returns boolean
return \isTrue
</syntaxhighlight>
</lang>
 
{{out}}
Line 1,854 ⟶ 1,953:
0 is false
</pre>
 
=={{header|Nim}}==
<langsyntaxhighlight lang="nim">if true: echo "yes"
if false: echo "no"
 
# Other objects never represent true or false:
if 2: echo "compile error"</langsyntaxhighlight>
 
=={{header|Oberon-2}}==
<langsyntaxhighlight lang="oberon2">
VAR
a,b,c: BOOLEAN;
Line 1,870 ⟶ 1,967:
b := FALSE;
c := 1 > 2;
</syntaxhighlight>
</lang>
 
=={{header|Objeck}}==
Objeck has a <tt>Bool</tt> type that is set to either <tt>true</tt> or <tt>false</tt>. By default boolean types are initialized to <tt>false</tt>. The boolean type also allows methods to be invoked, which perform simple conversions or print given values.
 
=={{header|Object Pascal}}==
In addition to the <code>Boolean</code> type defined by standard [[#Pascal|Pascal]], object Pascal defines the types <code>byteBool</code>, <code>wordBool</code> and <code>longBool</code>, having a <code>sizeOf</code> one, two, or four bytes respectively.
Line 1,883 ⟶ 1,978:
 
''See also [[#Delphi|Delphi]] and [[#Free Pascal|Free Pascal]]''
 
=={{header|Objective-C}}==
Objective-C follows pretty much the same rules as C. In addition to C, Objective-C has a <code>BOOL</code> boolean type, with values <code>YES</code> for true and <code>NO</code> for false. Objective-C also adds several special types of pointers; for pointers to objects (values of type <code>id</code>), the <code>nil</code> pointer is false, everything else is true; for pointers to classes (values of type <code>Class</code>), the <code>Nil</code> pointer is false, everything else is true.
 
=={{header|OCaml}}==
 
OCaml defines a built-in data type <code>bool</code>, which has exactly two members, represented by the keywords <code>true</code> and <code>false</code>:
 
<langsyntaxhighlight lang="ocaml">type bool = false | true</langsyntaxhighlight>
 
In addition to all the functionality of any other OCaml algebraic data type (e.g. [[pattern matching]]), and the functionality of any other OCaml data type (e.g. comparisons <code>false = false</code>, <code>false < true</code>, etc.), <code>bool</code> is also used in the guards in pattern matching (“<code>when</code>”) and <code>if</code> and <code>while</code> syntaxes.
 
As with any other OCaml data type, there are no automatic conversions of other types to <code>bool</code>.
 
=={{header|Octave}}==
Octave uses <tt>true</tt> (1) and <tt>false</tt> (0). The class of a variable holding a boolean value is ''logical'', which however can be casted to a numeric class, so that <code>r = true; r * 2</code> gives 2 as result. Any non-zero value is interpreted as true, and 0 as false.
 
=={{header|Oforth}}==
Oforth uses <tt>true</tt> (1) and <tt>false</tt> (0)
 
Any non-zero value is interpreted as true, and 0 as false.
 
=={{header|Ol}}==
 
Line 1,912 ⟶ 2,002:
 
p.s. Empty lists - '() - in conditionals is True.
 
=={{header|ooRexx}}==
 
<tt>.true</tt> or <tt>1</tt> are true, <tt>.false</tt> or <tt>0</tt> are false
 
=={{header|Order}}==
Order supplies the keywords <code>8true</code> and <code>8false</code>. Other types are not supposed to automatically convert to any boolean value (in practice some may do so due to implementation quirks, but this is not reliable).
 
=={{header|Oz}}==
<tt>true</tt> and <tt>false</tt> are the only boolean values. No other values are automatically converted to bool.
 
=={{header|PARI/GP}}==
Generally, false is 0 and true is nonzero. Certain other values also behave as false, like the vector [0]. Built-in boolean functions use 0 and 1 (but note that some functions like <code>ispower</code> are not boolean!).
Line 1,933 ⟶ 2,019:
* A vector (t_VEC), column vector (t_COL), or matrix (t_MAT) is false if and only if all of its components are 0. Note that <code>[]</code> is thus false.
* t_QUAD, t_POLMOD, t_RFRAC
 
=={{header|Pascal}}==
Pascal defines the type <code>Boolean</code> as a “special” enumeration type with exactly two elements:
Line 1,943 ⟶ 2,028:
 
''See also [[#Delphi|Delphi]], [[#Free Pascal|Free Pascal]], and [[#Object Pascal|Object Pascal]]''
 
=={{header|Perl}}==
 
<langsyntaxhighlight lang="perl">my $x = 0.0;
my $true_or_false = $x ? 'true' : 'false'; # false</langsyntaxhighlight>
or
<langsyntaxhighlight lang="perl">my $x = 1; # true
 
my $true_or_false;
Line 1,958 ⟶ 2,042:
else {
$true_or_false = 'false';
}</langsyntaxhighlight>
The values in Perl that are false are: <tt>0</tt> (as a number (including <tt>0.0</tt>), or as the string <tt>'0'</tt>, but '''not''' the string <tt>'0.0'</tt>), the empty string <tt><nowiki>''</nowiki></tt>, the empty list <tt>()</tt>, and <tt>undef</tt>. Everything else is true. See [http://perldoc.perl.org/perlsyn.html#Truth-and-Falsehood perlsyn].
 
Line 1,965 ⟶ 2,049:
Boolean comparison of zero against itself gives a value of one, but Perl uses short circuit evaluations, so any true or false value may be returned from a boolean expression:
 
<langsyntaxhighlight lang="perl">print (7 && 2); # 2, rather than 1(true)
print (2 && 7); # 7, rather than 1(true)
print (7 xor 2); # empty string, rather than 0(false)
print ('apples' && 'pears'); # pears, rather than 1(true)
print ('apples' xor 'pears'); # empty string, rather than 0(false)</langsyntaxhighlight>
 
=== Objects ===
Line 1,977 ⟶ 2,061:
=== There are no keywords for true and false ===
 
Perl has no builtin "true" or "false" keywords. ThisAn isold atrick caveat,of becauseusing truethem and false areas bareword strings andis strongly discouraged evaluatein tomodern true:Perl.
 
<lang perl># This does not work
# true and false are not special so will be treated as bareword strings
if (true) { print "true is true\n" }; # This prints
if (false) { print "false is true\n" }; # So does this
if (spongebob) { print "spongebob is true\n" }; # A bareword string</lang>
 
=== Special cases ===
 
As a special case, literal <tt>1</tt>s and <tt>0</tt>s will never cause a "Useless use of a constant in void context" warning. Another special case worth pointing out here is that the string <tt>'0 but true'</tt> won't provoke a warning if it's used as a number.
 
=={{header|Phix}}==
Zero is false, any other number is true. Attempting to use a string or sequence as a boolean is assumed to be a programming logic blunder and causes a fatal run-time error.
Line 2,000 ⟶ 2,077:
 
The following example illustrates, and also emphasies the subtlety of the issue (no difference whatsoever if c, d, e, f are defined as bool):
<!--<langsyntaxhighlight Phixlang="phix">(phixonline)-->
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">3</span> <span style="color: #008080;">do</span>
Line 2,019 ⟶ 2,096:
-- 3==2:false(0) ==1:false, eq1:false, ==true:false
--</span>
<!--</langsyntaxhighlight>-->
 
=={{header|PHP}}==
The values in PHP that are false are: <tt>FALSE</tt>, <tt>NULL</tt>, the number <tt>0</tt> (as an integer <tt>0</tt>, float <tt>0.0</tt>, or string <tt>'0'</tt>, but '''not''' the string <tt>"0.0"</tt>), the empty string <tt>""</tt>, the empty array <tt>array()</tt>, and "SimpleXML objects created from empty tags"(?).
Line 2,026 ⟶ 2,102:
Everything else is true. The keyword <tt>TRUE</tt> exists.
[http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting]
 
=={{header|Picat}}==
Picat has the built-in <code>true/0</code> for true (it always succeeds) and <code>false/0</code> (or <code>fail/0</code>) for false. <code>false/0</code> (/<code>fail/0</code>) can be used to generate other solutions through backtracking.
 
<langsyntaxhighlight Picatlang="picat">go ?=>
member(N,1..5),
println(N),
fail, % or false/0 to get other solutions
nl.
go => true.</langsyntaxhighlight>
 
{{out}}
Line 2,052 ⟶ 2,127:
 
no</pre>
 
 
=={{header|PicoLisp}}==
Like in all Lisps, the symbol 'NIL' denotes "false", any other value "true". PicoLisp also uses NIL as the empty list, so the empty list is false.
Line 2,060 ⟶ 2,133:
value is available in the given context. Note that 'NIL' and 'T' are written in
uppercase letters (PicoLisp is case-sensitive).
 
=={{header|Pike}}==
<langsyntaxhighlight lang="pike">
> 0;
(3) Result: 0
Line 2,076 ⟶ 2,148:
(9) Result: 1
>
</syntaxhighlight>
</lang>
 
=={{header|PL/I}}==
True is <code>'1'b</code> and false is <code>'0'b</code>.
<langsyntaxhighlight lang="pli">Declare x bit(1);
x='1'b; /* True */
x='0'b; /* False */</langsyntaxhighlight>
Using the macro facility one can define reasonable symbols for true and false
<langsyntaxhighlight lang="pli">*process source attributes xref macro or(!);
tf: proc options(main);
%Dcl true char; %true='''1''b';
Line 2,094 ⟶ 2,165:
Else
Put Skip List('false was recognized');
End;</langsyntaxhighlight>
{{out}}
<pre>That's true
false was recognized</pre>
 
=={{header|PL/M}}==
 
In PL/M, even numbers are falsy and odd numbers are truthy. That is to say, conditional expressions test only the low bit of the value.
 
<langsyntaxhighlight lang="pli">IF 0 THEN /* THIS WON'T RUN */;
IF 1 THEN /* THIS WILL */;
IF 2 THEN /* THIS WON'T */;
IF 3 THEN /* THIS WILL */;</langsyntaxhighlight>
 
Canonically, false is represented by <code>0</code> (all bits clear), and true by <code>0FFH</code> (all bits set). These are the values that conditional operators (like <code>=</code>) return.
 
<langsyntaxhighlight lang="pli">DECLARE A BYTE;
A = 4 < 5;
/* A IS NOW 0FFH */</langsyntaxhighlight>
 
Boolean literals are not included by default, but it is not uncommon for programmers to define them by hand:
 
<langsyntaxhighlight lang="pli">DECLARE FALSE LITERALLY '0', TRUE LITERALLY '0FFH';</langsyntaxhighlight>
 
=={{header|Plain English}}==
Boolean values are called flags. The flag literals are <code>yes</code> and <code>no</code>. You can <code>set</code> and <code>clear</code> flags.
 
=={{header|Pony}}==
Boolean values are <code>true</code> and <code>false</code>. Conditions must have type Bool, i.e. they are always true or false.
 
=={{header|PostScript}}==
 
Predefined constants are:
<langsyntaxhighlight lang="postscript">true
false</langsyntaxhighlight>
 
=={{header|PowerShell}}==
Two automatic variables exist for this purpose:
<langsyntaxhighlight lang="powershell">$true
$false</langsyntaxhighlight>
However, nearly everything can be converted to a boolean value, as detailed in the following list:
* any non-zero number evaluates to '''true''', zero evaluates to '''false'''
Line 2,141 ⟶ 2,207:
* any array with more than one item evaluates to '''true'''
* a reference to any object evaluates to '''true''', <code>$null</code> evaluates to '''false'''
 
=={{header|Python}}==
Python has a boolean data type with the only two possible values denoted by <code>True</code> and <code>False</code>.
Line 2,154 ⟶ 2,219:
 
'''Some examples:'''
<langsyntaxhighlight lang="python">>>> True
True
>>> not True
Line 2,192 ⟶ 2,257:
False
>>> bool("False")
True</langsyntaxhighlight>
 
=={{header|Quackery}}==
{{trans|Forth}}
In conditionals, zero is false, non-zero is true. There are predefined words for the canonical forms, <code>false</code> returns zero and <code>true</code> returns 1.
 
=={{header|R}}==
Similarly to Octave, R uses <tt>TRUE</tt> and <tt>FALSE</tt>, kept in variable of class logical, which is silently casted to 1 (TRUE) or 0 (FALSE) if used as numeric value. The opposite is also true: the value 0 can be used as FALSE, and non-zero numbers as TRUE.
 
The values T and F are given the values TRUE and FALSE respectively (for compatibility with S-Plus), though these may be changed to other values by the user.
 
=={{header|Racket}}==
 
Racket has the standard Scheme Boolean values <tt>#t</tt> and <tt>#f</tt>, and will also accept <tt>#true</tt> and <tt>#false</tt>. This is a literal syntax, so it can be used anywhere including in quoted positions. There are also bindings for <tt>true</tt> and <tt>false</tt> (but of course when these are quoted, the result is plain symbols). Like other Scheme descendants, many conditional constructs treat any non-false value as "truthy." So, for instance,
 
<langsyntaxhighlight Racketlang="racket">(cond ([(< 4 3) 'apple]
['bloggle 'pear]
[else 'nectarine])</langsyntaxhighlight>
 
... evaluates to <tt>'pear</tt>, because <tt>'bloggle</tt> is not false.
 
=={{header|Raku}}==
(formerly Perl 6)
Line 2,219 ⟶ 2,280:
Raku provides an enumeration <code>Bool</code> with two values, <code>True</code> and <code>False</code>. Values of enumerations can be used as ordinary values or as mixins:
 
<syntaxhighlight lang="raku" perl6line>my Bool $crashed = False;
my $val = 0 but True;</langsyntaxhighlight>
 
For a discussion of Boolean context (how Raku decides whether something is True or False): https://docs.raku.org/language/contexts#index-entry-Boolean_context.
 
=={{header|Raven}}==
Raven considers 0 as <code>FALSE</code>, -1 as <code>TRUE</code>
<langsyntaxhighlight Ravenlang="raven">TRUE print
FALSE print
2 1 > print # TRUE (-1)
3 2 < print # FALSE (0)
42 FALSE != # TRUE (-1)</langsyntaxhighlight>
 
=={{header|REBOL}}==
REBOL uses values of type '''logic!''' to represent boolean values. A boolean value can be 'true' or 'false', which also happen to be understood as predefined constants. Other constants are also provided to improve program readability:
Line 2,249 ⟶ 2,308:
 
As the last true value implies, pretty much any other type will evaluate to true. This is important to remember if you're used to a language where the value "0" is considered to be false -- in REBOL, it's true.
 
=={{header|ReScript}}==
 
Line 2,255 ⟶ 2,313:
 
ReScript's true/false compiles into a JavaScript true/false.
 
=={{header|Retro}}==
Zero is false and non-zero is true. Comparison functions return '''-1''' for true and '''0''' for false.
 
=={{header|REXX}}==
The REXX language enforces the values for &nbsp; ''true'' &nbsp; and &nbsp; ''false'', &nbsp; only the two values are valid:
Line 2,277 ⟶ 2,333:
 
===simplistic===
<langsyntaxhighlight lang="rexx"> true = 1
false = 0</langsyntaxhighlight>
 
===spruced up===
Some programmers like to "spruce up" such a simple assignment:
<langsyntaxhighlight lang="rexx">true = (1=1)
false = (1=0)</langsyntaxhighlight>
 
===more exactitudeness===
<langsyntaxhighlight lang="rexx">true = (1==1)
false = (1==0)</langsyntaxhighlight>
 
===oblique===
<langsyntaxhighlight lang="rexx">true = (1==1)
false = \true</langsyntaxhighlight>
[The parentheses aren't necessary in all of the above versions.]
<br><br>Some REXX interpreters allow the &nbsp; ''NOT'' &nbsp; (<code>¬</code>) character for negation:
<langsyntaxhighlight lang="rexx">false = ¬true</langsyntaxhighlight>
 
===esoteric===
<langsyntaxhighlight lang="rexx">true = 1984 = 1984
false = 'war' = 'peace'
false = 'freedom' = 'slavery'
false = 'ignorance' = 'strength'</langsyntaxhighlight>
Of course, in Orwellian terms, the above &nbsp; '''false''' &nbsp; statements are &nbsp; '''true''', &nbsp; but REXX isn't an Eric Arthur Blair reader.
<br><br>
 
=={{header|Ring}}==
<langsyntaxhighlight lang="ring">
x = True
y = False
Line 2,311 ⟶ 2,366:
see "x or y : " + (x or y) + nl
see "not x : " + (not x) + nl
</syntaxhighlight>
</lang>
=={{header|Rockstar}}==
There are several synonyms for true and false. These include yes and no, or right and wrong. Therefore, to make a variable called Alice true and a variable called Bob false, you can write this.
<syntaxhighlight lang="rockstar">Alice was right.
Bob was wrong.</syntaxhighlight>
 
=={{header|RPL}}==
There is no boolean variable type in RPL. Boolean values are real numbers, zero meaning 'FALSE' and any other value meaning 'TRUE'; built-in boolean operators and functions always return 1 for TRUE.
RPL users have also access to boolean registers named flags, identified by a number, that can be cleared, set or tested.
{{works with|Halcyon Calc|4.2.7}}
1 == 1
1 == 2
≪ IF 42 THEN "TRUE" ELSE "FALSE" END ≫ EVAL
14 CF 14 FS?
14 SF 14 FS?
{{out}}
<pre>
5: 1
4: 0
3: "TRUE"
2: 0
1: 1
</pre>
 
=={{header|Ruby}}==
Line 2,322 ⟶ 2,399:
 
=={{header|Rust}}==
<langsyntaxhighlight lang="rust">
fn main() {
// Rust contains a single boolean type: `bool`, represented by the keywords `true` and `false`.
Line 2,338 ⟶ 2,415:
}
}
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 2,344 ⟶ 2,421:
bar is false.
</pre>
 
=={{header|Sather}}==
The BOOL type can be <code>true</code> or <code>false</code>. Sather never implicitly does casting of a type in another, so numeric value or other types cannot be used (implicitly) as boolean value; nonetheless an explicit "cast" can be done:
 
<langsyntaxhighlight lang="sather">v:BOOL := true; -- ok
i:INT := 1;
v := 1; -- wrong
Line 2,354 ⟶ 2,430:
-- BUT
v := 1.bool; -- ok
if i.bool then ... end; -- ok</langsyntaxhighlight>
 
In this case, <code>0.bool</code> is false, and <code>n.bool</code> with n not equal to 0 is true.
 
=={{header|S-BASIC}}==
Although S-BASIC has no explicit boolean data type, it allows integer,
real, fixed, string, and character variables to hold the results of boolean operations and to represent true and false conditions in IF, WHILE, and REPEAT statements. For types real.double, real, and fixed, a value of zero is false, and any non-zero value is true. For integers, the value 0 is treated as false, while -1 (or FFFFH), the bit-wise negation of zero, is treated as true.
For characters and strings, 'Y', 'y', 'T', and 't' are treated as true,
while 'N', 'n', 'F', and 'f' are treated as false. (For strings, only the first character is considered.) For convenience, the $CONSTANT compiler directive can be used to provide values for "true" and "false".
<syntaxhighlight lang = "BASIC">
$constant true = 0FFFFH
$constant false = 0
 
var a, another = char
var b, adult, age = integer
var c = real
 
repeat
begin
input "Applicant's age in years"; age
adult = (age >= 18)
if adult then
print "Applicant has full access"
else
print "Applicant has restricted access"
input "Do another (y/n)"; another
end
until not another
 
a = (2 > 3)
b = (2 > 3)
c = (2 > 3)
print "2 > 3 as char: "; a
print "2 > 3 as int : "; b
print "not (2 > 3) : "; not b
print "2 > 3 as real: "; c
print "not (2 > 3) : "; not c
end
</syntaxhighlight>
{{out}}
<pre>
Applicant's age in years? 19
Applicant has full access
Do another (y/n)? n
2 > 3 as char: F
2 > 3 as int : 0
not (2 > 3) :-1
2 > 3 as real: 0
not (2 > 3) :-1
</pre>
 
=={{header|Scala}}==
Booleans in Scala are given by the literals <code>true</code> and <code>false</code>, case sensitive, which are the only instances of the class <code>Boolean</code>.
 
=={{header|Scheme}}==
The only value in Scheme that is false is <tt>#f</tt>.
 
Everything else (including the empty list, unlike Lisp) is true. The constant <tt>#t</tt> represents the canonical true value.
 
=={{header|Seed7}}==
Seed7 defines the type <tt>boolean</tt>. The only values of <tt>boolean</tt> are <tt>TRUE</tt> and <tt>FALSE</tt>. There are no automatic conversions from any other types into <tt>boolean</tt>, and it is a compile-time error to use any type other than <tt>boolean</tt> in a place that expects a <tt>boolean</tt> (e.g. if-statement condition, while-statement condition, operand of a logical operator, etc.).
 
=={{header|Self}}==
 
Self has two objects, ''true'' and ''false''.
 
=={{header|SenseTalk}}==
True, Yes, and On are true; False, No, Off and Empty (an empty string) are false.
<langsyntaxhighlight lang="sensetalk">repeat with each item of [True, False, Yes, No, On, Off, ""]
put it & " is " & (it is true)
end repeat
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 2,392 ⟶ 2,511:
=={{header|Sidef}}==
Sidef defines the ''true'' and ''false'' boolean values, which are part of the ''Bool'' type.
<langsyntaxhighlight lang="ruby">var t = true;
var f = false;</langsyntaxhighlight>
 
In conditional expressions, anything that evaluates to zero or nothing is considered ''false'', including empty arrays and empty hashes.
<langsyntaxhighlight lang="ruby">if (0 || "0" || false || nil || "" || [] || :()) {
say "true"
} else {
say "false";
}</langsyntaxhighlight>
{{out}}
<pre>false</pre>
 
=={{header|Simula}}==
Simula has <tt>true</tt> and <tt>false</tt> keywords, representing the only values of type <tt>boolean</tt>. There are no automatic conversions from any other types into <tt>boolean</tt>, and it is a compile-time error to use any type other than <tt>boolean</tt> in a place that expects a <tt>boolean</tt> (e.g. if-statement condition, while-statement condition, operand of a logical operator, etc.).
 
=={{header|Slate}}==
Use <tt>True</tt> or <tt>False</tt>.
 
=={{header|Smalltalk}}==
Use "true" and "false".
<br>Smalltalk uses the Boolean class, which has two subclasses (True and False). <tt>true</tt> and <tt>false</tt> are singleton instances of those classes. E.g. an expression like <tt>5 = 5</tt> returns <tt>true</tt>.
 
=={{header|SNUSP}}==
Zero is false and non-zero is true, as used by the sole skip-if-zero operator ('''?''').
<langsyntaxhighlight lang="snusp">$!/?\=false= + =true=#
\-/</langsyntaxhighlight>
 
=={{header|SPL}}==
In SPL zero is false, any other value is true.
 
=={{header|Standard ML}}==
 
Standard ML defines a top-level data type <code>bool</code>, which has exactly two members, <code>true</code> and <code>false</code>:
 
<langsyntaxhighlight lang="sml">datatype bool = false | true</langsyntaxhighlight>
 
In addition to all the functionality of any other Standard ML algebraic data type (e.g. [[pattern matching]], equality <code>false = false</code>), <code>bool</code> is also used in <code>if</code> and <code>while</code> syntaxes.
 
As with any other Standard ML data type, there are no automatic conversions of other types to bool.
 
=={{header|Stata}}==
Stata uses the values 0 for "false" and 1 for "true". In expressions involving boolean operators, any nonzero numeric value (including missing values) is considered true.
 
=={{header|Swift}}==
Swift defines a built-in data type <code>Bool</code>, which has two values, represented by the keywords <code>true</code> and <code>false</code>. There is no conversion between booleans and other data types. Conditionals require a type that conforms to the <code>BooleanType</code> protocol, which provides a conversion to <code>Bool</code> for that type; types that conform include <code>Bool</code> and some other types.
 
=={{header|Tcl}}==
;True values:
Line 2,445 ⟶ 2,555:
Any of these values may be abbreviated, and mixed-case spellings are also acceptable. [http://www.tcl.tk/man/tcl8.5/TclLib/GetInt.htm]
Any other value gives an error. In an interactive tclsh session:
<langsyntaxhighlight lang="tcl">% if {""} then {puts true} else {puts false}
expected boolean value but got ""</langsyntaxhighlight>
 
Test for the boolean value of a string can be stuff like
<langsyntaxhighlight lang="tcl">if {[string is false -strict $string]} ...</langsyntaxhighlight>
which will test for "no" or "NO" or "0" or "False" or ...
 
=={{header|Trith}}==
The boolean constants are ''true'' and ''false''. In a conditional context, the only false values are ''false'' and ''nil'' -- every other value is true.
 
 
 
=={{header|UNIX Shell}}==
 
Line 2,470 ⟶ 2,576:
In the following example, after running the test command, the then syntactical component runs the optional branch if an exitcode is of zero determined:
 
<langsyntaxhighlight lang="sh">if
echo 'Looking for file' # This is the evaluation block
test -e foobar.fil # The exit code from this statement determines whether the branch runs
Line 2,477 ⟶ 2,583:
echo 'I am going to delete it'
rm foobar.fil
fi</langsyntaxhighlight>
 
In some later shells, the values ''true'' and ''false'' are defined, respectively, as a return code of 0 and a return code of greater-than zero. While there are built-in functions for each of these values, booleans are most commonly the result of a test or a process termination.
Line 2,484 ⟶ 2,590:
{{works with|ksh}}
 
<langsyntaxhighlight Bashlang="bash">true && echo "true" || echo "false"</langsyntaxhighlight>
 
=={{header|Ursa}}==
Ursa has the boolean data type which can be declared using the declare (or decl) function.
<syntaxhighlight lang ="ursa">decl boolean bool</langsyntaxhighlight>
Boolean values can be set to either true or false, or the result of an expression.
<langsyntaxhighlight lang="ursa">set bool true
# same as
set bool (= 2 2)
</syntaxhighlight>
</lang>
or
<langsyntaxhighlight lang="ursa">set bool false
# same as
set bool (not (= 2 2))
</syntaxhighlight>
</lang>
 
=={{header|VBA}}==
VBA has a boolean type. As an integer False is 0 and anything else is True. However True converts to -1. Booleans are False by default.
<langsyntaxhighlight lang="vb">Dim a As Integer
Dim b As Boolean
Debug.Print b
Line 2,510 ⟶ 2,614:
Debug.Print b
a = b
Debug.Print a</langsyntaxhighlight>
{{out}}
Output of above lines:<pre>
Line 2,517 ⟶ 2,621:
True
-1</pre>
 
=={{header|VBScript}}==
VBScript has the boolean subdatatype and also the two constants <code>True</code> and <code>False</code>.
When converting an integer to a boolean, <code>0</code> is <code>False</code> and anything not equal to <code>0</code> is <code>True</code>.
<syntaxhighlight lang="vb">
<lang vb>
a = True
b = False
Line 2,527 ⟶ 2,630:
x = Int(Rnd * 2) <> 0
y = Int(Rnd * 2) = 0
MsgBox a & " " & b & " " & x & " " & y</langsyntaxhighlight>
{{out}}
<pre>
True False True False
</pre>
 
=={{header|Vim Script}}==
A non-zero <code>Number</code> is true, 0 is false.
 
Since a <code>String</code> is converted automatically to a <code>Number</code> when necessary, the following will print "false" because "foo" is converted to 0:
<langsyntaxhighlight lang="vim">if "foo"
echo "true"
else
echo "false"
endif</langsyntaxhighlight>
=={{header|V (Vlang)}}==
 
=={{header|Vlang}}==
V has a ''bool'' type, with literal values for ''true'' and ''false''. Numeric values are not used in conditional statements. 0 is not treated as false, and non-zero does not mean true, in V.
 
<langsyntaxhighlight lang="go">// Boolean Value, in V
// Tectonics: v run boolean-value.v
module main
Line 2,563 ⟶ 2,664:
 
if 0 == 1 { println("bad result") } else { println(f) }
}</langsyntaxhighlight>
 
{{out}}
Line 2,574 ⟶ 2,675:
WDTE has a built-in boolean type, the two values of which are exposed by the <code>std</code> package's <code>true</code> and <code>false</code> functions. In general, however, built-in conditional functionality, such as <code>switch</code> expressions, considers any value that is not <code>true</code> to be <code>false</code>.
 
<langsyntaxhighlight lang="wdte">let io => import 'io';
let ex => switch 'this is irrelevant for this example' {
false => 'This is, obviously, not returned.';
Line 2,580 ⟶ 2,681:
true => 'This is returned.';
};
ex -- io.writeln io.stdout;</langsyntaxhighlight>
 
The above prints "This is returned."
 
=={{header|Wren}}==
Wren has a core class, Bool, which has two instances ''true'' and ''false'' which are also ''reserved words'' in the language.
 
This class has two methods: the operator ''!'' which returns the logical complement of its receiver and ''toString'' which returns its string representation.
<langsyntaxhighlight ecmascriptlang="wren">var embed = true
System.printAll([embed, ", ", !embed, ", ", "Is Wren embeddable? " + embed.toString])</langsyntaxhighlight>
 
{{out}}
Line 2,598 ⟶ 2,698:
=={{header|XLISP}}==
Boolean "false" may be represented by <tt>#F</tt>, <tt>#!FALSE</tt>, <tt>NIL</tt>, or the empty list; any other value is counted as true in conditional expressions, but it is also possible to represent the Boolean value "true" using your choice of the symbols <tt>#T</tt>, <tt>#!TRUE</tt>, and <tt>T</tt>. All these symbols are case-insensitive. Note that <tt>T</tt>, unlike the others, is a variable: it is bound by default to the constant <tt>#T</tt>, but you can (although you shouldn't) assign it any other value including "false" (by doing something like <tt>(setq t nil)</tt>). Boolean values are printed as <tt>#T</tt> and <tt>()</tt>.
 
=={{header|XPL0}}==
An integer value equal to 0 is false, and a value not equal to 0 is true.
Relational operations evaluate to 0 for false and -1 for true. The
command word 'true' equals -1, and 'false' equals 0.
 
=={{header|XSLT}}==
<langsyntaxhighlight lang="xml"><xsl:if test="true() or false()">
True and false are returned by built-in XPath functions.
</xsl:if>
Line 2,613 ⟶ 2,711:
<xsl:if test="@myAttribute or not($nodeSet)">
Test an attribute for its presence (empty or not), or whether a node set is empty.
</xsl:if></langsyntaxhighlight>
 
=={{header|Z80 Assembly}}==
There are no official constants for True or False, however the common convention is to use 0 for false and nonzero for true. In reality, any mutually exclusive condition will work. True/False can be tested using a variety of instructions. The most common are <code>CP</code> and <code>BIT</code> but in certain cases it can be done faster using <code>AND</code> or even <code>RRCA</code>.
 
All of the following can be used to test if the rightmost bit of a byte is 1.
<langsyntaxhighlight Z80lang="z80">BIT 0,A
jr nz,true
;;;;;;;;;;;;;;;;
Line 2,626 ⟶ 2,723:
;;;;;;;;;;;;;;;;
RRCA
jr c,true</langsyntaxhighlight>
 
Of these three methods, the last one is the fastest and takes the least amount of bytes to encode. However, it does destroy the variable, which may not be an option depending on what you need to do with that data later. <code>BIT</code> is slower than the rest but doesn't alter registers or memory, just the flags, which is sometimes exactly what you need.
 
 
 
=={{header|zkl}}==
<langsyntaxhighlight lang="zkl">a:=True;
b:=False;
True.dir();</langsyntaxhighlight>
{{out}}
<pre>
Line 2,647 ⟶ 2,741:
name numObjects oID otype properties size type typeID vaultPath
</pre>
 
=={{header|zonnon}}==
<langsyntaxhighlight lang="zonnon">
 
var
Line 2,658 ⟶ 2,751:
c := 1 > 2;
...
</syntaxhighlight>
</lang>
{{omit from|ML/I}}
Anonymous user