<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.visual-prolog.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Joachim+Tilsted+Kristensen</id>
	<title>wiki.visual-prolog.com - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.visual-prolog.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Joachim+Tilsted+Kristensen"/>
	<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Special:Contributions/Joachim_Tilsted_Kristensen"/>
	<updated>2026-04-09T21:37:02Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=Language_Reference/Domains&amp;diff=4765</id>
		<title>Language Reference/Domains</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Language_Reference/Domains&amp;diff=4765"/>
		<updated>2021-01-16T21:25:00Z</updated>

		<summary type="html">&lt;p&gt;Joachim Tilsted Kristensen: /* Domain Definitions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{languageReferenceNavbar|Domains}}&lt;br /&gt;
&lt;br /&gt;
=== Domains Sections ===&lt;br /&gt;
&lt;br /&gt;
A domain section defines a set of domains in the current scope (see {{lang|Interfaces|Interface}}, {{lang|Classes|Class Declaration}}, and {{lang|Implementations|Class Implementation}}).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;DomainsSection&amp;gt;:&lt;br /&gt;
    domains &amp;lt;DomainDefinition&amp;gt;-dot-term-list-opt&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Domain Definitions ===&lt;br /&gt;
&lt;br /&gt;
A domain definition defines a named domain in the current scope.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;DomainDefinition&amp;gt;:&lt;br /&gt;
    &amp;lt;DomainName&amp;gt; &amp;lt;FormalTypeParameterList&amp;gt;-opt = &amp;lt;DomainExpression&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the domain on the right hand side denotes an interface or a compound domain, then the defined domain is synonym (i.e. identical) to the type expression. Otherwise the defined domain becomes a subdomain of the domain denoted by the domain expression. Here a domain name &amp;lt;vpbnf&amp;gt;&amp;lt;DomainName&amp;gt;&amp;lt;/vpbnf&amp;gt; should be a {{lang2|Lexical_Elements|Identifiers|lower case identifier}}.&lt;br /&gt;
&lt;br /&gt;
There are certain places where you must use a domain name rather than a type expression:&lt;br /&gt;
&lt;br /&gt;
*as a declaration of a formal argument type;&lt;br /&gt;
*as a type of a constant or a fact variable;&lt;br /&gt;
*as a type in a list domain.&lt;br /&gt;
&lt;br /&gt;
=== Domain Expressions ===&lt;br /&gt;
&lt;br /&gt;
A domain expression denotes a type in a domain definition:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;DomainExpression&amp;gt;: one of&lt;br /&gt;
    &amp;lt;TypeName&amp;gt;&lt;br /&gt;
    &amp;lt;CompoundDomain&amp;gt;&lt;br /&gt;
    &amp;lt;ListDomain&amp;gt;&lt;br /&gt;
    &amp;lt;PredicateDomain&amp;gt;&lt;br /&gt;
    &amp;lt;IntegralDomain&amp;gt;&lt;br /&gt;
    &amp;lt;RealDomain&amp;gt;&lt;br /&gt;
    &amp;lt;TypeVariable&amp;gt;&lt;br /&gt;
    &amp;lt;ScopeTypeVariable&amp;gt;&lt;br /&gt;
    &amp;lt;TypeApplication&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Type Expressions ====&lt;br /&gt;
&lt;br /&gt;
The full range of &amp;lt;vpbnf&amp;gt;&amp;lt;DomainExpression&amp;gt;&amp;lt;/vpbnf&amp;gt;s can only be used in a domain definition.  &amp;lt;vpbnf&amp;gt;&amp;lt;TypeExpression&amp;gt;&amp;lt;/vpbnf&amp;gt; is a subset of these expressions that are used in other many other contexts.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;TypeExpression&amp;gt;: one of&lt;br /&gt;
    &amp;lt;TypeName&amp;gt;&lt;br /&gt;
    &amp;lt;ListDomain&amp;gt;&lt;br /&gt;
    &amp;lt;TypeVariable&amp;gt;&lt;br /&gt;
    &amp;lt;ScopeTypeVariable&amp;gt;&lt;br /&gt;
    &amp;lt;TypeApplication&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Type Names ====&lt;br /&gt;
&lt;br /&gt;
A type name is either an &amp;#039;&amp;#039;interface&amp;#039;&amp;#039; name or the name of a &amp;#039;&amp;#039;value domain&amp;#039;&amp;#039;. We use the term &amp;#039;&amp;#039;value domain&amp;#039;&amp;#039; to specify domains whose elements are {{lang2|Basic_Concepts|Types|immutable}} (unchangeable). Here we can say that objects, belonging to domains correspondent to &amp;#039;&amp;#039;interface&amp;#039;&amp;#039; names, have mutable state and terms of any other domains are immutable. So actually value types are everything except object types. A type name (obviously) denotes the type corresponding to the name of an existing domain.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;TypeName&amp;gt;: one of&lt;br /&gt;
    &amp;lt;InterfaceName&amp;gt;&lt;br /&gt;
    &amp;lt;DomainName&amp;gt;&lt;br /&gt;
    &amp;lt;ClassQualifiedDomainName&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;InterfaceName&amp;gt;:&lt;br /&gt;
    &amp;lt;LowercaseIdentifier&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;DomainName&amp;gt;:&lt;br /&gt;
    &amp;lt;LowercaseIdentifier&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;ClassQualifiedDomainName&amp;gt;:&lt;br /&gt;
    &amp;lt;ClassName&amp;gt;::&amp;lt;DomainName&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;ClassName&amp;gt;:&lt;br /&gt;
    &amp;lt;LowercaseIdentifier&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here &amp;lt;vpbnf&amp;gt;&amp;lt;InterfaceName&amp;gt;&amp;lt;/vpbnf&amp;gt; is an interface name, &amp;lt;vpbnf&amp;gt;&amp;lt;DomainName&amp;gt;&amp;lt;/vpbnf&amp;gt; is a value domain name, and &amp;lt;vpbnf&amp;gt;&amp;lt;ClassName&amp;gt;&amp;lt;/vpbnf&amp;gt; is a class name.&lt;br /&gt;
&lt;br /&gt;
{{Example|&lt;br /&gt;
&amp;lt;vip&amp;gt;domains&lt;br /&gt;
    newDomain1 = existingDomain.&lt;br /&gt;
    newDomain2 = myInterface.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example the domain name &amp;lt;vp&amp;gt;existingDomain&amp;lt;/vp&amp;gt; and the interface name &amp;lt;vp&amp;gt;myInterface&amp;lt;/vp&amp;gt; are used to define new domains.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Compound Domains ====&lt;br /&gt;
&lt;br /&gt;
Compound domains (also known as algebraic data types) are used to represent lists, trees, and other tree structured values. In its simple forms compound domains are used to represent structures and enumeration values. Compound domains can have a recursive definition. They can also be mutually/indirectly recursive.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;CompoundDomain&amp;gt;:&lt;br /&gt;
   &amp;lt;Alignment&amp;gt;-opt &amp;lt;FunctorAlternative&amp;gt;-semicolon-sep-list&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Alignment&amp;gt;:&lt;br /&gt;
    align &amp;lt;IntegralConstantExpression&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here &amp;lt;vpbnf&amp;gt;&amp;lt;IntegralConstantExpression&amp;gt;&amp;lt;/vpbnf&amp;gt; is an expression, which must be compile time evaluated to an integral value.&lt;br /&gt;
&lt;br /&gt;
A compound domain declaration declares a list of functor alternatives with optional alignment. Alignment must be &amp;lt;vp&amp;gt;1&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;2&amp;lt;/vp&amp;gt; or &amp;lt;vp&amp;gt;4&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If a compound domain consists of one functor alternative, then it is considered as structure and has representation, which is binary compatible with the appropriate structure in language C.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;FunctorAlternative&amp;gt;: &lt;br /&gt;
    &amp;lt;FunctorName&amp;gt; &amp;lt;FunctorName&amp;gt; ( &amp;lt;FormalArgument&amp;gt;-comma-sep-list-opt )&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here &amp;lt;vpbnf&amp;gt;&amp;lt;FunctorName&amp;gt;&amp;lt;/vpbnf&amp;gt; is the name of a functor alternative it should be a {{lang2|Lexical_Elements|Identifiers|lower case identifier}}.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;FormalArgument&amp;gt;:&lt;br /&gt;
    &amp;lt;TypeExpression&amp;gt; &amp;lt;ArgumentName&amp;gt;-opt&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here &amp;lt;vpbnf&amp;gt;&amp;lt;ArgumentName&amp;gt;&amp;lt;/vpbnf&amp;gt; can be any {{lang2|Lexical_Elements|Identifiers|upper case identifier}}. The compiler ignores it.&lt;br /&gt;
&lt;br /&gt;
Compound domains  have no subtype relations to any other domains.&lt;br /&gt;
&lt;br /&gt;
If a domain is defined as being equal to a compound domain, then these two domains are synonym types rather than subtypes. Meaning that they are just two different names for the same type.&lt;br /&gt;
&lt;br /&gt;
{{Example|&lt;br /&gt;
&amp;lt;vip&amp;gt;domains&lt;br /&gt;
    t1 = empty(); cons(integer V, t1 Tail).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vp&amp;gt;t1&amp;lt;/vp&amp;gt; is a compound domain with two alternatives. The first alternative is the null-ary functor &amp;lt;vp&amp;gt;empty()&amp;lt;/vp&amp;gt;, while the second alternative is the two-ary functor &amp;lt;vp&amp;gt;cons&amp;lt;/vp&amp;gt;, which takes an {{lang2|Built-in_entities|integer|integer}} and a term of the domain &amp;lt;vp&amp;gt;t1&amp;lt;/vp&amp;gt; itself as arguments. So the domain &amp;lt;vp&amp;gt;t1&amp;lt;/vp&amp;gt; is recursively defined.&lt;br /&gt;
&lt;br /&gt;
The following expressions are terms of the domain &amp;lt;vp&amp;gt;t1&amp;lt;/vp&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;empty&lt;br /&gt;
cons(77, empty())&lt;br /&gt;
cons(33, cons(44, cons(55, empty())))&amp;lt;/vip&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
In the example above we used parenthesis after the null-ary function &amp;lt;vp&amp;gt;empty&amp;lt;/vp&amp;gt;. Such parenthesis are optional in all situations, &amp;#039;&amp;#039;except&amp;#039;&amp;#039; in a domain definition consisting only of a single null-ary functor. In that case parenthesis are required to distinguish it from a synonym/subtype definition.&lt;br /&gt;
&lt;br /&gt;
{{Example|&lt;br /&gt;
&amp;lt;vp&amp;gt;t1&amp;lt;/vp&amp;gt; is a compound domain with a single null-ary functor, whereas &amp;lt;vp&amp;gt;t2&amp;lt;/vp&amp;gt; is defined to be synonym to &amp;lt;vp&amp;gt;t1&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;domains &lt;br /&gt;
    t1 = f(). &lt;br /&gt;
    t2 = t1.&amp;lt;/vip&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Example|&lt;br /&gt;
&amp;lt;vip&amp;gt;domains &lt;br /&gt;
    t1 = nil; subt2(t2). &lt;br /&gt;
    t2 = hh(t1, t1).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vp&amp;gt;t1&amp;lt;/vp&amp;gt; is a compound domain with two alternatives. The first alternative is the null-ary functor &amp;lt;vp&amp;gt;nil&amp;lt;/vp&amp;gt;, while the second alternative is the unary functor &amp;lt;vp&amp;gt;subt2&amp;lt;/vp&amp;gt;, which takes a term of the domain &amp;lt;vp&amp;gt;t2&amp;lt;/vp&amp;gt; as argument. &amp;lt;vp&amp;gt;t2&amp;lt;/vp&amp;gt; is a compound domain with one alternative the functor &amp;lt;vp&amp;gt;hh&amp;lt;/vp&amp;gt;, which takes two &amp;lt;vp&amp;gt;t1&amp;lt;/vp&amp;gt; terms as argument. So the domains &amp;lt;vp&amp;gt;t1&amp;lt;/vp&amp;gt; and &amp;lt;vp&amp;gt;t2&amp;lt;/vp&amp;gt; are mutually recursive.&lt;br /&gt;
&lt;br /&gt;
The following are terms in the domain &amp;lt;vp&amp;gt;t1&amp;lt;/vp&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;nil &lt;br /&gt;
subt2(hh(nil, nil)) &lt;br /&gt;
subt2(hh(subt2(hh(nil, nil)), nil)) &lt;br /&gt;
consg(hh(nil, g(hh(nil, nil)))) &lt;br /&gt;
subt2(hh(subt2(hh(nil, nil)), subt2(hh(nil, nil))))&amp;lt;/vip&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== List Domains ====&lt;br /&gt;
&lt;br /&gt;
List domains represent sequences of values of a certain domain. Thus, all elements in a &amp;lt;vp&amp;gt;T&amp;lt;/vp&amp;gt; list must be of type &amp;lt;vp&amp;gt;T&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;ListDomain&amp;gt;:&lt;br /&gt;
    &amp;lt;TypeExpression&amp;gt; *&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vp&amp;gt;T*&amp;lt;/vp&amp;gt; is the type of lists of &amp;lt;vp&amp;gt;T&amp;lt;/vp&amp;gt; elements.&lt;br /&gt;
&lt;br /&gt;
The following syntax is used for lists:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;ListExpression&amp;gt;:&lt;br /&gt;
    [ &amp;lt;Term&amp;gt;-comma-sep-list-opt ]&lt;br /&gt;
    [ &amp;lt;Term&amp;gt;-comma-sep-list | &amp;lt;Tail&amp;gt; ]&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Tail&amp;gt;:&lt;br /&gt;
    &amp;lt;Term&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here &amp;lt;vpbnf&amp;gt;&amp;lt;Tail&amp;gt;&amp;lt;/vpbnf&amp;gt; is a term which should have a value of the &amp;lt;vpbnf&amp;gt;&amp;lt;ListDomain&amp;gt;&amp;lt;/vpbnf&amp;gt; type. Each &amp;lt;vpbnf&amp;gt;&amp;lt;Term&amp;gt;&amp;lt;/vpbnf&amp;gt; should be of {{lang2|Domains|Type_Names|typeName}} type.&lt;br /&gt;
&lt;br /&gt;
Actually, lists are just compound domains with two functors: &amp;lt;vp&amp;gt;[]&amp;lt;/vp&amp;gt; denoting the empty list and the mix-fix functor &amp;lt;vp&amp;gt;[HD|TL]&amp;lt;/vp&amp;gt; denoting the list with head &amp;lt;vp&amp;gt;HD&amp;lt;/vp&amp;gt; and tail &amp;lt;vp&amp;gt;TL&amp;lt;/vp&amp;gt;. The head must be of the underlying element type, whereas the tail must be a list of relevant type.&lt;br /&gt;
&lt;br /&gt;
Lists are however syntactically sugared.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vp&amp;gt;[E1, E2, ..., En | L ]&amp;lt;/vp&amp;gt; is shorthand for &amp;lt;vp&amp;gt;[E1 | [ E2 | [ ...[ En | L ]...] ] ]&amp;lt;/vp&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vp&amp;gt;[E1, E2, ..., En]&amp;lt;/vp&amp;gt; is shorthand for &amp;lt;vp&amp;gt;[E1, E2, ..., En | [] ]&amp;lt;/vp&amp;gt;, which in turn is shorthand for &amp;lt;vp&amp;gt;[E1 | [ E2 | [ ...[ En | [] ]...] ] ]&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Predicate Domains ====&lt;br /&gt;
&lt;br /&gt;
Values of a predicate domain are predicates with the same &amp;quot;signature&amp;quot;, i.e. the same argument and return types, the same flow pattern and the same (or stronger) predicate mode.&lt;br /&gt;
&lt;br /&gt;
A predicate that returns a value is called a &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;function&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;, whereas a predicate that does not return a value is sometimes called an &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;ordinary&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; predicate, to stress that it is not a function.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;PredicateDomain&amp;gt;:&lt;br /&gt;
   ( &amp;lt;FormalArgument&amp;gt;-comma-sep-list-opt ) &amp;lt;ReturnArgument&amp;gt;-opt &lt;br /&gt;
   &amp;lt;PredicateModeAndFlow&amp;gt;-list-opt &amp;lt;CallingConvention&amp;gt;-opt&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;FormalArgument&amp;gt;:&lt;br /&gt;
   &amp;lt;TypeExpression&amp;gt; &amp;lt;VariableName&amp;gt;-opt&lt;br /&gt;
   &amp;lt;Ellipsis&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;ReturnArgument&amp;gt;:&lt;br /&gt;
    -&amp;gt; &amp;lt;FormalArgument&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;VariableName&amp;gt;:&lt;br /&gt;
   &amp;lt;UpperCaseIdentifier&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Predicate domains can have &amp;lt;vpbnf&amp;gt;&amp;lt;Ellipsis&amp;gt;&amp;lt;/vpbnf&amp;gt; argument as the last &amp;lt;vpbnf&amp;gt;&amp;lt;FormalArgument&amp;gt;&amp;lt;/vpbnf&amp;gt; in the &amp;lt;vpbnf&amp;gt;&amp;lt;FormalArgument&amp;gt;-comma-sep-list&amp;lt;/vpbnf&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Predicate domains can have &amp;lt;vpbnf&amp;gt;&amp;lt;AnonymousIdentifier&amp;gt;&amp;lt;/vpbnf&amp;gt; as a {{lang2|Domains|Type_Expressions|predicateArgumentType}} to specify that the argument can be of any type.&lt;br /&gt;
&lt;br /&gt;
Currently, predicate domains with ellipsis can only be used in predicate declarations.&lt;br /&gt;
&lt;br /&gt;
Predicate domains that are used in domain definitions can at most state one flow.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;PredicateModeAndFlow&amp;gt;:&lt;br /&gt;
     &amp;lt;PredicateMode&amp;gt;-opt&lt;br /&gt;
     &amp;lt;FlowPattern&amp;gt;-list-opt&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Predicate Mode =====&lt;br /&gt;
&lt;br /&gt;
The specified predicate mode applies for each member of a flow pattern list following it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;PredicateMode&amp;gt;: one of&lt;br /&gt;
   erroneous &lt;br /&gt;
   failure &lt;br /&gt;
   procedure &lt;br /&gt;
   determ &lt;br /&gt;
   multi &lt;br /&gt;
   nondeterm&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Predicate modes can be described by the following sets:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;erroneous = {} &lt;br /&gt;
failure = {Fail} &lt;br /&gt;
procedure = {Succeed} &lt;br /&gt;
determ = {Fail, Succeed} &lt;br /&gt;
multi = {Succeed, BacktrackPoint} &lt;br /&gt;
nondeterm = {Fail, Succeed, BacktrackPoint}&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;#039;&amp;#039;Fail&amp;#039;&amp;#039; is in the set it means that the predicate can fail. If &amp;#039;&amp;#039;succeed&amp;#039;&amp;#039; is in the set it means that the predicate can succeed. If &amp;#039;&amp;#039;BacktrackPoint&amp;#039;&amp;#039; is in the set it means that the predicate can return with an active backtrack point in it.&lt;br /&gt;
&lt;br /&gt;
If such a set, say &amp;lt;vp&amp;gt;failure&amp;lt;/vp&amp;gt;, is a subset of another set, say &amp;lt;vp&amp;gt;nondeterm&amp;lt;/vp&amp;gt;, then we say that the mode is stronger than the other, i.e. &amp;lt;vp&amp;gt;failure&amp;lt;/vp&amp;gt; is stronger than &amp;lt;vp&amp;gt;nondeterm&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A predicate domain actually contain all predicates (with correct type and flow), which have the mode specified or a &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;stronger&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; mode.&lt;br /&gt;
&lt;br /&gt;
It is illegal to state a predicate mode for constructors, they always have the &amp;lt;vp&amp;gt;procedure&amp;lt;/vp&amp;gt; mode.&lt;br /&gt;
&lt;br /&gt;
Omitting of a predicate mode means &amp;lt;vp&amp;gt;procedure&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===== Flow Pattern =====&lt;br /&gt;
&lt;br /&gt;
The flow pattern defines the input/output direction of the arguments, which in combination with functor domains can be structures with parts of a single argument being input and other parts of the same argument being output.&lt;br /&gt;
&lt;br /&gt;
A flow pattern consists of a sequence of flows, each flow corresponds to an argument (fist flow to first argument, etc).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;FlowPattern&amp;gt;:&lt;br /&gt;
     ( &amp;lt;Flow&amp;gt;-comma-sep-list-opt ) AnyFlow&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Flow&amp;gt;: one of&lt;br /&gt;
    i&lt;br /&gt;
    o &lt;br /&gt;
    &amp;lt;FunctorFlow&amp;gt;&lt;br /&gt;
    &amp;lt;ListFlow&amp;gt;&lt;br /&gt;
    &amp;lt;Ellipsis&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ellipsis flow must match an ellipsis argument and can therefore be only the last flow in the flow pattern.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Ellipsis&amp;gt;:&lt;br /&gt;
    ...&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A functor flow &amp;lt;vpbnf&amp;gt;&amp;lt;FunctorFlow&amp;gt;&amp;lt;/vpbnf&amp;gt; states a functor and flows of each of the components of that flow. The functor must of course be in the domain of the corresponding argument.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;FunctorFlow&amp;gt;:&lt;br /&gt;
    &amp;lt;FunctorName&amp;gt; ( &amp;lt;Flow&amp;gt;-comma-sep-list-opt )&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A functor flow declaration cannot contain ellipsis flow.&lt;br /&gt;
&lt;br /&gt;
List flows are just like functor flows, but with the same syntactic sugaring as the list domain.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;ListFlow&amp;gt;:&lt;br /&gt;
    [ &amp;lt;Flow&amp;gt;-comma-sep-list-opt &amp;lt;ListFlowTail&amp;gt;-opt]&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;ListFlowTail&amp;gt;:&lt;br /&gt;
    | &amp;lt;Flow&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A list flow cannot contain ellipsis flow.&lt;br /&gt;
&lt;br /&gt;
When declaring a predicate the flow can be omitted. Inside an implementation (i.e. for a local predicate) the needed flows are derived from the usages of the predicate. Inside an interface or a class declaration (i.e. for a public predicate) omitting flows means that all arguments are input.&lt;br /&gt;
&lt;br /&gt;
The special flow pattern &amp;lt;vp&amp;gt;anyflow&amp;lt;/vp&amp;gt; can be stated only in declarations of local predicates (i.e. in predicate declarations inside the implementation of a class). It means that the exact flow pattern(s) will be evaluated during the compilation.&lt;br /&gt;
&lt;br /&gt;
{{Example|&lt;br /&gt;
&amp;lt;vip&amp;gt;domains&lt;br /&gt;
    pp1 = (integer Argument1).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vp&amp;gt;pp1&amp;lt;/vp&amp;gt; is a predicate domain. The predicates that have type &amp;lt;vp&amp;gt;pp1&amp;lt;/vp&amp;gt; takes one {{lang2|Built-in_entities|integer|integer}} argument. Since no flow-pattern is stated the argument is input, and since no predicate mode is mentioned the predicates are &amp;lt;vp&amp;gt;procedure&amp;lt;/vp&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Example|&lt;br /&gt;
&amp;lt;vip&amp;gt;domains&lt;br /&gt;
    pp2 = (integer Argument1) -&amp;gt; integer ReturnType.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Predicates of type &amp;lt;vp&amp;gt;pp2&amp;lt;/vp&amp;gt; take one {{lang2|Built-in_entities|integer|integer}} argument and returns a value of type {{lang2|Built-in_entities|integer|integer}}. Therefore, &amp;lt;vp&amp;gt;pp2&amp;lt;/vp&amp;gt; is actually a function domain and the predicates that have type &amp;lt;vp&amp;gt;pp2&amp;lt;/vp&amp;gt; are actually functions. Since no flow-pattern is stated the argument is input and since no predicate mode is mentioned the predicates are &amp;lt;vp&amp;gt;procedure&amp;lt;/vp&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Example|&lt;br /&gt;
&amp;lt;vip&amp;gt;predicates&lt;br /&gt;
    ppp : (integer Argument1, integer Argument2) determ (o,i) (i,o) nondeterm (o,o).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The predicate &amp;lt;vp&amp;gt;ppp&amp;lt;/vp&amp;gt; takes two {{lang2|Built-in_entities|integer|integer}} arguments. It exists in three flow variants: &amp;lt;vp&amp;gt;(o,i)&amp;lt;/vp&amp;gt; and &amp;lt;vp&amp;gt;(i,o)&amp;lt;/vp&amp;gt;, which are &amp;lt;vp&amp;gt;determ&amp;lt;/vp&amp;gt;, and &amp;lt;vp&amp;gt;(o,o)&amp;lt;/vp&amp;gt;, which is &amp;lt;vp&amp;gt;nondeterm&amp;lt;/vp&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== Calling Convention =====&lt;br /&gt;
&lt;br /&gt;
The calling convention determines how arguments, etc. are passed to the predicate, it also determines how the link name is derived from a predicate name.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;CallingConvention&amp;gt;:&lt;br /&gt;
     language &amp;lt;CallingConventionKind&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;CallingConventionKind&amp;gt;: one of&lt;br /&gt;
     c thiscall stdcall apicall prolog&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If a calling convention is not stated, then the &amp;lt;vp&amp;gt;prolog&amp;lt;/vp&amp;gt; convention is assumed. The &amp;lt;vp&amp;gt;prolog&amp;lt;/vp&amp;gt; calling convention is the standard convention used for Prolog predicates.&lt;br /&gt;
&lt;br /&gt;
The calling convention &amp;lt;vp&amp;gt;c&amp;lt;/vp&amp;gt; follows the C/C++ standard calling convention. The link name of a predicate is created from the predicate name by adding a leading underscore (&amp;lt;vp&amp;gt;_&amp;lt;/vp&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
The calling convention &amp;lt;vp&amp;gt;thiscall&amp;lt;/vp&amp;gt; follows the C++ standard calling convention for virtual functions. This calling convention uses the &amp;lt;vp&amp;gt;c&amp;lt;/vp&amp;gt; link name strategy but sometimes it may use the different argument and stack handling rules. Calling convention &amp;lt;vp&amp;gt;thiscall&amp;lt;/vp&amp;gt; can be applied to the object predicates only.&lt;br /&gt;
&lt;br /&gt;
The calling convention &amp;lt;vp&amp;gt;stdcall&amp;lt;/vp&amp;gt; uses the &amp;lt;vp&amp;gt;c&amp;lt;/vp&amp;gt; link name strategy but it uses the different argument and stack handling rules. The following table shows the implementation of &amp;lt;vp&amp;gt;stdcall&amp;lt;/vp&amp;gt; calling convention:&lt;br /&gt;
&lt;br /&gt;
{|{{prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
!Feature&lt;br /&gt;
!Implementation&lt;br /&gt;
|-&lt;br /&gt;
|Argument-passing order&lt;br /&gt;
|Right to left.&lt;br /&gt;
|-&lt;br /&gt;
|Argument-passing convention&lt;br /&gt;
|By value, unless a compound domain term is passed. So it cannot be used to predicates with variable number of arguments.&lt;br /&gt;
|-&lt;br /&gt;
|Stack-maintenance responsibility&lt;br /&gt;
|Called predicate pops its own arguments from the stack.&lt;br /&gt;
|-&lt;br /&gt;
|Name-decoration convention&lt;br /&gt;
|An underscore (&amp;lt;vp&amp;gt;_&amp;lt;/vp&amp;gt;) is prefixed to the predicate name.&lt;br /&gt;
|-&lt;br /&gt;
|Case-translation convention&lt;br /&gt;
|No case translation of the predicate name is performed.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The calling convention &amp;lt;vp&amp;gt;apicall&amp;lt;/vp&amp;gt; uses the same argument and stack handling rules as &amp;lt;vp&amp;gt;stdcall&amp;lt;/vp&amp;gt;, but for convenience to call MS Windows API functions &amp;lt;vp&amp;gt;apicall&amp;lt;/vp&amp;gt; uses the naming conventions that are used by most MS Windows API functions. According to &amp;lt;vp&amp;gt;apicall&amp;lt;/vp&amp;gt; naming conventions the link name of a predicate is constructed as follows:&lt;br /&gt;
&lt;br /&gt;
*an leading underscore (&amp;lt;vp&amp;gt;_&amp;lt;/vp&amp;gt;) is prefixed to the predicate name;&lt;br /&gt;
*the predicate name in which the first letter is changed in to a capital letter;&lt;br /&gt;
*the &amp;#039;&amp;lt;vp&amp;gt;A&amp;lt;/vp&amp;gt;&amp;#039;, the &amp;#039;&amp;lt;vp&amp;gt;W&amp;lt;/vp&amp;gt;&amp;#039; or nothing is suffixed, if the arguments and the return type indicate an ANSI, Unicode or neutral predicate, respectively;&lt;br /&gt;
*the &amp;#039;&amp;lt;vp&amp;gt;@&amp;lt;/vp&amp;gt;&amp;#039; is suffixed;&lt;br /&gt;
*the number of bytes pushed on the call stack is suffixed.&lt;br /&gt;
&lt;br /&gt;
{{Example|&lt;br /&gt;
&amp;lt;vip&amp;gt;predicates&lt;br /&gt;
     predicateName : (integer, string) language apicall&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument types of this predicate indicates that it is a Unicode predicate (as {{lang2|Built-in_entities|string|string}} is the domain of Unicode strings). An {{lang2|Built-in_entities|integer|integer}} and a {{lang2|Built-in_entities|string|string}} each occupies 4 bytes on the call stack and, therefore, the link name becomes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;_PredicateNameW@8&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;vp&amp;gt;apicall&amp;lt;/vp&amp;gt; is used together with the &amp;quot;&amp;lt;vp&amp;gt;as&amp;lt;/vp&amp;gt;&amp;quot; construction the name stated in the &amp;quot;&amp;lt;vp&amp;gt;as&amp;lt;/vp&amp;gt;&amp;quot; construction is decorated in the same manner.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vp&amp;gt;apicall&amp;lt;/vp&amp;gt; can only be used directly in a predicate declaration, not in a predicate domain definition. In predicate domain definitions &amp;lt;vp&amp;gt;stdcall&amp;lt;/vp&amp;gt;, must be used instead. A predicate declared with &amp;lt;vp&amp;gt;apicall&amp;lt;/vp&amp;gt; calling convention cannot have clauses and it also cannot be resolved externally without explicit DLL name.&lt;br /&gt;
&lt;br /&gt;
The following table compares implementations of &amp;lt;vp&amp;gt;c&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;apicall&amp;lt;/vp&amp;gt;, and &amp;lt;vp&amp;gt;stdcall&amp;lt;/vp&amp;gt; calling conventions (the &amp;lt;vp&amp;gt;prolog&amp;lt;/vp&amp;gt; calling convention has the special implementation, which is not discussed here):&lt;br /&gt;
&lt;br /&gt;
{|{{prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
!Keyword&lt;br /&gt;
!Stack cleanup&lt;br /&gt;
!Predicate name case-translation&lt;br /&gt;
!Link predicate name decoration convention&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;vp&amp;gt;c&amp;lt;/vp&amp;gt;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Calling&amp;#039;&amp;#039;&amp;#039; predicate pops the arguments from the stack.&lt;br /&gt;
|None.&lt;br /&gt;
|An underscore (&amp;lt;vp&amp;gt;_&amp;lt;/vp&amp;gt;) is prefixed to the predicate name.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;vp&amp;gt;thiscall&amp;lt;/vp&amp;gt;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Calling&amp;#039;&amp;#039;&amp;#039; predicate pops the arguments from the stack except the implicit &amp;#039;&amp;#039;&amp;#039;This&amp;#039;&amp;#039;&amp;#039; argument which is passed in the register.&lt;br /&gt;
|None.&lt;br /&gt;
|&amp;lt;vp&amp;gt;c&amp;lt;/vp&amp;gt; link name strategy is used.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;vp&amp;gt;stdcall&amp;lt;/vp&amp;gt;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Called&amp;#039;&amp;#039;&amp;#039; predicate pops its own arguments from the stack.&lt;br /&gt;
|None.&lt;br /&gt;
|An underscore (&amp;lt;vp&amp;gt;_&amp;lt;/vp&amp;gt;) is prefixed to the predicate name.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;vp&amp;gt;apicall&amp;lt;/vp&amp;gt;&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;Called&amp;#039;&amp;#039;&amp;#039; predicate pops its own arguments from the stack.&lt;br /&gt;
|The first letter of the predicate name is changed to the capital letter.&lt;br /&gt;
|An underscore (&amp;lt;vp&amp;gt;_&amp;lt;/vp&amp;gt;) is prefixed to the name. The first letter is changed to the upper case. The &amp;#039;&amp;lt;vp&amp;gt;A&amp;lt;/vp&amp;gt;&amp;#039;, the &amp;#039;&amp;lt;vp&amp;gt;W&amp;lt;/vp&amp;gt;&amp;#039; or nothing is suffixed. The sign &amp;lt;vp&amp;gt;@&amp;lt;/vp&amp;gt; is suffixed. The (decimal) number of bytes in the argument list is suffixed.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Visual Prolog notion of predicate domains covers both class and object members. Class members are handled straight forward, but the handling of object members requires attention. The invocation of an object predicate will get &amp;quot;back&amp;quot; in the context of the object to which the member belongs.&lt;br /&gt;
&lt;br /&gt;
{{Example| Assume the following declarations:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;interface actionEventSource&lt;br /&gt;
domains&lt;br /&gt;
     actionListener = (actionEventSource Source) procedure (i).&lt;br /&gt;
predicates&lt;br /&gt;
     addActionListener : (actionListener Listener) procedure (i).&lt;br /&gt;
     ... end interface&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also assume a class &amp;lt;vp&amp;gt;button_class&amp;lt;/vp&amp;gt; which supports the &amp;lt;vp&amp;gt;actionEventSource&amp;lt;/vp&amp;gt;. The event is sent when the button is pressed. In &amp;lt;vp&amp;gt;myDialog_class&amp;lt;/vp&amp;gt; class, which implements a dialog, I create a button and I want to listen to its action events, so that I can react on button presses:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;implement myDialog_class &lt;br /&gt;
clauses&lt;br /&gt;
    new() :-&lt;br /&gt;
        OkButton = button_class::new(...),&lt;br /&gt;
        OkButton:addActionListener(onOk),&lt;br /&gt;
        ...&lt;br /&gt;
facts&lt;br /&gt;
    okPressed : () determ.&lt;br /&gt;
predicates&lt;br /&gt;
    onOk : actionListener.&lt;br /&gt;
clauses&lt;br /&gt;
    onOk(Source) :-&lt;br /&gt;
        assert(okPressed()).&lt;br /&gt;
end implement&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The important thing about the example is that &amp;lt;vp&amp;gt;onOk&amp;lt;/vp&amp;gt; is an object member and that, when the button is pressed, the invocation of the registered &amp;lt;vp&amp;gt;onOk&amp;lt;/vp&amp;gt; will bring us back in the object that owns &amp;lt;vp&amp;gt;onOk&amp;lt;/vp&amp;gt;. This means that we have access to the object fact &amp;lt;vp&amp;gt;okPressed&amp;lt;/vp&amp;gt;, so that we can assert it.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== Format Strings =====&lt;br /&gt;
&lt;br /&gt;
A formal parameter to a predicate can be marked as format string using the attribute {{lang2|Attributes|formatString|formatString}}. The format string can contain ordinary characters which are printed without modification, and format fields, that % begins with the percent &amp;#039;%&amp;#039; sign. If the percent sign is followed % by some unknown character (not the format specifier) - then % this character will  be printed without modifications.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;predicates&lt;br /&gt;
     writef : (string Format [formatstring], ...).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The format fields specification is: &lt;br /&gt;
&lt;br /&gt;
[-][0][width][.precision][type] &lt;br /&gt;
&lt;br /&gt;
All fields are optional. &lt;br /&gt;
&lt;br /&gt;
[-] Hyphen indicates that the field is to be left justified; right justified is the default. Having no effect when width value is not set, or the number of characters in the actual value is greater than width value. &lt;br /&gt;
&lt;br /&gt;
[0] Zero before width means for values that zeros will be added until the minimum width is reached. If 0(zero) and -(hyphen) appear, the 0 is ignored &lt;br /&gt;
&lt;br /&gt;
[width] Positive decimal number specifying a minimum field size. If the number of characters in the actual value is less than width value - then the required number of space &amp;#039; &amp;#039; characters will be added before the value (or after it, if &amp;#039;-&amp;#039; field was set). No changes occurs if number of characters in the actual value is greater than the width value. &lt;br /&gt;
&lt;br /&gt;
[.precision] The point &amp;#039;.&amp;#039; with the following unsigned decimal number can specify either the precision of a floating-point image or the maximum number of characters to be printed from a string. &lt;br /&gt;
&lt;br /&gt;
[type] Specifies other format then the default for the given. For example, in the type field, you can give a specifier that says an integer will be formatted as an unsigned. The possible values are: &lt;br /&gt;
&lt;br /&gt;
:{|{{prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
| f || Format real&amp;#039;s in fixed-decimal notation (such as 123.4 or 0.004321). This is the default for real&amp;#039;s.&lt;br /&gt;
|-&lt;br /&gt;
| e || Format real&amp;#039;s in exponential notation (such as 1.234e+002 or 4.321e-003).&lt;br /&gt;
|-&lt;br /&gt;
| g || Format real&amp;#039;s in the shortest of f and e format, but always in e format if exponent of the value is less than -4 or greater than or equal to the precision. Trailing zeros are truncated.&lt;br /&gt;
|-&lt;br /&gt;
| d or D || Format as a signed decimal number.&lt;br /&gt;
|-&lt;br /&gt;
| u or U || Format as an unsigned integer.&lt;br /&gt;
|-&lt;br /&gt;
| x or X || Format as a hexadecimal number.&lt;br /&gt;
|-&lt;br /&gt;
| o or O || Format as an octal number.&lt;br /&gt;
|-&lt;br /&gt;
| c || Format as a char.&lt;br /&gt;
|-&lt;br /&gt;
| B || Format as the Visual Prolog binary type.&lt;br /&gt;
|-&lt;br /&gt;
| R || Format as a database reference number.&lt;br /&gt;
|-&lt;br /&gt;
| p || Format as the presented value.&lt;br /&gt;
|-&lt;br /&gt;
| P || Format as a procedure parameter.&lt;br /&gt;
|-&lt;br /&gt;
| s || Format as a string.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Integral Domains ====&lt;br /&gt;
&lt;br /&gt;
Integral domains are used for representing integral numbers. They are divided in two main categories for signed and unsigned numbers. Integral domains can also have different representation size. The predefined domains {{lang2|Built-in_entities|integer|integer}} and {{lang2|Built-in_entities|unsigned|unsigned}} represent signed and unsigned numbers with natural representation length for the processor architecture (i.e. 32bit on a 32bit machine, etc).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;IntegralDomain&amp;gt;:&lt;br /&gt;
     &amp;lt;DomainName&amp;gt;-opt &amp;lt;IntegralDomainProperties&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If a &amp;lt;vpbnf&amp;gt;&amp;lt;DomainName&amp;gt;&amp;lt;/vpbnf&amp;gt; is stated in front of the &amp;lt;vpbnf&amp;gt;&amp;lt;IntegralDomainProperties&amp;gt;&amp;lt;/vpbnf&amp;gt;, then this domain must itself be an integral domain and the resulting domain will be child-type (i.e. subtype) of this domain. In that case &amp;lt;vpbnf&amp;gt;&amp;lt;IntegralDomainProperties&amp;gt;&amp;lt;/vpbnf&amp;gt; may not violate the possibility of being a subtype, i.e. the range cannot be extended and the size cannot be changed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;IntegralDomainProperties&amp;gt;:&lt;br /&gt;
    &amp;lt;IntegralSizeDescription&amp;gt; &amp;lt;IntegralRangeDescription&amp;gt;-opt&lt;br /&gt;
    &amp;lt;IntegralRangeDescription&amp;gt; &amp;lt;IntegralSizeDescription&amp;gt;-opt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;IntegralSizeDescription&amp;gt;:&lt;br /&gt;
    bitsize &amp;lt;DomainSize&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;DomainSize&amp;gt;: &lt;br /&gt;
    &amp;lt;IntegralConstantExpression&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An integral size description declares the size &amp;lt;vpbnf&amp;gt;&amp;lt;DomainSize&amp;gt;&amp;lt;/vpbnf&amp;gt; of the integral domain, measured in bits. The compiler implement such representation to the integral domain, which has no less than the specified number of bits. The value of &amp;lt;vpbnf&amp;gt;&amp;lt;DomainSize&amp;gt;&amp;lt;/vpbnf&amp;gt; should be positive and no greater than the maximal value supported by the compiler.&lt;br /&gt;
&lt;br /&gt;
If integral size description is omitted, then it will become the same as the parent domain. If there is no parent domain, it will become the natural size for the processor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;IntegralRangeDescription&amp;gt;:&lt;br /&gt;
    [ &amp;lt;MinimalBoundary&amp;gt;-opt .. &amp;lt;MaximalBoundary&amp;gt;-opt ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;MinimalBoundary&amp;gt;:&lt;br /&gt;
    &amp;lt;IntegralConstantExpression&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;MaximalBoundary&amp;gt;: &lt;br /&gt;
    &amp;lt;IntegralConstantExpression&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An integral range description declares the minimal &amp;lt;vpbnf&amp;gt;&amp;lt;MinimalBoundary&amp;gt;&amp;lt;/vpbnf&amp;gt; and the maximal &amp;lt;vpbnf&amp;gt;&amp;lt;MaximalBoundary&amp;gt;&amp;lt;/vpbnf&amp;gt; limits for the integral domain. If a limit is omitted, then the range of the parent domain is used. If there is no parent domain, then the &amp;lt;vpbnf&amp;gt;&amp;lt;DomainSize&amp;gt;&amp;lt;/vpbnf&amp;gt; is used to determine respectively maximum or minimum value.&lt;br /&gt;
&lt;br /&gt;
Notice that the specified minimum value should not exceed the specified maximum value. That is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;MinimalBoundary&amp;gt; &amp;lt;= &amp;lt;MaximalBoundary&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also the minimal &amp;lt;vpbnf&amp;gt;&amp;lt;MinimalBoundary&amp;gt;&amp;lt;/vpbnf&amp;gt; and the maximal &amp;lt;vpbnf&amp;gt;&amp;lt;MaximalBoundary&amp;gt;&amp;lt;/vpbnf&amp;gt; limits should satisfy the limits implied by the specified bit size &amp;lt;vp&amp;gt;bitsize&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The domain bit size &amp;lt;vpbnf&amp;gt;&amp;lt;DomainSize&amp;gt;&amp;lt;/vpbnf&amp;gt; value and values of the minimal &amp;lt;vpbnf&amp;gt;&amp;lt;MinimalBoundary&amp;gt;&amp;lt;/vpbnf&amp;gt; and the maximal &amp;lt;vpbnf&amp;gt;&amp;lt;MaximalBoundary&amp;gt;&amp;lt;/vpbnf&amp;gt; limits must be calculated while compiling time.&lt;br /&gt;
&lt;br /&gt;
==== Real Domains ====&lt;br /&gt;
&lt;br /&gt;
Real domains are used to represent numbers with fractional parts (i.e. floating point numbers). Real domains can be used to represent very large and very small numbers. The built-in domain &amp;#039;&amp;#039;real&amp;#039;&amp;#039; have the natural precision for the processor architecture (or the precision given by the compiler).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;RealDomain&amp;gt;:&lt;br /&gt;
     &amp;lt;DomainName&amp;gt;-opt &amp;lt;RealDomainProperties&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If a &amp;lt;vpbnf&amp;gt;&amp;lt;DomainName&amp;gt;&amp;lt;/vpbnf&amp;gt; is stated in front of the &amp;lt;vpbnf&amp;gt;&amp;lt;RealDomainProperties&amp;gt;&amp;lt;/vpbnf&amp;gt;, then this domain must itself be a real domain and the resulting domain will be a subtype of this domain. In that case &amp;lt;vpbnf&amp;gt;&amp;lt;RealDomainProperties&amp;gt;&amp;lt;/vpbnf&amp;gt; may not violate the possibility of being a subtype, i.e. the range cannot be extended and the precision cannot be increased.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;RealDomainProperties&amp;gt;: one of&lt;br /&gt;
    &amp;lt;RealPrecisionDescription&amp;gt; &amp;lt;RealRangeDescription&amp;gt;-opt&lt;br /&gt;
    &amp;lt;RealRangeDescription&amp;gt; &amp;lt;RealPrecisionDescription&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;RealPrecisionDescription&amp;gt;:&lt;br /&gt;
    digits &amp;lt;IntegralConstantExpression&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The real precision description declares precision of the real domain, measured in number of decimal digits. If precision is omitted then it will become the same as for the parent domain. If there is no parent domain, then it will be the natural precision for the processor or given by the compiler (in Visual Prolog v.6 the compiler limit is 15 digits). Precision have an upper and a lower limits given by the compiler, if the precisions larger than that limit is used the numbers will only obtain the processor (compiler) specified precision anyway.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;RealRangeDescription&amp;gt;:&lt;br /&gt;
    [ &amp;lt;MinimalRealBoundary&amp;gt;-opt .. &amp;lt;MaximalRealBoundary&amp;gt;-opt ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;MinimalRealBoundary&amp;gt;:&lt;br /&gt;
    &amp;lt;RealConstantExpression&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;MaximalRealBoundary&amp;gt;: &lt;br /&gt;
    &amp;lt;RealConstantExpression&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here &amp;lt;vpbnf&amp;gt;&amp;lt;RealConstantExpression&amp;gt;&amp;lt;/vpbnf&amp;gt; is an expression, which must be compile time evaluated to a floating point value. That is the real domain precision and limits must be calculated while compiling time.&lt;br /&gt;
&lt;br /&gt;
The real range description declares minimal and maximal limits for the real domain. If a limit is omitted then it will be the same as for the parent domain. If there is no parent domain then the largest possible range for the precision will be used.&lt;br /&gt;
&lt;br /&gt;
Notice that the specified minimum value should not exceed the specified maximum value. That is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;MinimalBoundary&amp;gt; &amp;lt;= &amp;lt;MaximalBoundary&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Generic Domains ====&lt;br /&gt;
&lt;br /&gt;
This section contains the formal syntax for generic domains, for a more complete introduction to generics please see the tutorial {{lang|Objects and Polymorphism|Objects and Polymorphism}} and the section {{lang|Generic Interfaces and Classes|Generic Interfaces and Classes}}.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;FormalTypeParameterList&amp;gt;:&lt;br /&gt;
     &amp;lt;TypeVariable&amp;gt;-comma-sep-list-opt&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A formalTypeParameterList is a list of typeVariables&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;TypeVariable&amp;gt;:&lt;br /&gt;
    &amp;lt;UpperCaseIdentifier&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;vpbnf&amp;gt;&amp;lt;TypeVariable&amp;gt;&amp;lt;/vpbnf&amp;gt; is an upper case identifier. In a domain declaration the type variable must be bound in the &amp;lt;vpbnf&amp;gt;&amp;lt;FormalTypeParameterList&amp;gt;&amp;lt;/vpbnf&amp;gt; on the left hand side of the domain definition. In a predicate declaration all free type variables are implicitly bound and scoped to that predicate declaration.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;TypeApplication&amp;gt;:&lt;br /&gt;
     &amp;lt;TypeName&amp;gt; {&amp;lt;TypeExpression&amp;gt;-comma-sep-list-opt }&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;vpbnf&amp;gt;&amp;lt;TypeApplication&amp;gt;&amp;lt;/vpbnf&amp;gt; is the application of a {{lang2|Domains|Type_Names|typeName}} to a list of types. The type name must be generic and the number of formal type parameters must match the number of type expressions.&lt;br /&gt;
&lt;br /&gt;
=== Universal and Root Types ===&lt;br /&gt;
&lt;br /&gt;
Visual Prolog uses some internal types, called &amp;#039;&amp;#039;root&amp;#039;&amp;#039; types and &amp;#039;&amp;#039;universal&amp;#039;&amp;#039; types.&lt;br /&gt;
&lt;br /&gt;
==== Universal Types ====&lt;br /&gt;
&lt;br /&gt;
A number literal like &amp;lt;vp&amp;gt;1&amp;lt;/vp&amp;gt; does not have any particular type, it can be used as a value of any type that contains &amp;lt;vp&amp;gt;1&amp;lt;/vp&amp;gt;, including real types.&lt;br /&gt;
&lt;br /&gt;
We say that &amp;lt;vp&amp;gt;1&amp;lt;/vp&amp;gt; have a universal type. Having a universal type means that it have any type, which can represent its value.&lt;br /&gt;
&lt;br /&gt;
Arithmetic operations also return universal types.&lt;br /&gt;
&lt;br /&gt;
==== Root Types ====&lt;br /&gt;
&lt;br /&gt;
Arithmetic operations are very liberal with their operand requirements:  You can add integers of any integer domain with each other.&lt;br /&gt;
&lt;br /&gt;
We say that arithmetic operands takes root types as arguments.  The integer root type is super-type of any integer type (regardless that it is not mentioned in their declarations).  Hence any integer type can be converted to the integer root type, and, since the arithmetic operations exist for the root types, it means one of them will work on any integer domains.&lt;br /&gt;
&lt;br /&gt;
The actual number of root types and which operands exist is a matter of library facilities, and outside the scope of this document to describe.&lt;/div&gt;</summary>
		<author><name>Joachim Tilsted Kristensen</name></author>
	</entry>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Domains&amp;diff=4763</id>
		<title>Language Reference/Built-in entities/Domains</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Domains&amp;diff=4763"/>
		<updated>2020-12-19T16:23:49Z</updated>

		<summary type="html">&lt;p&gt;Joachim Tilsted Kristensen: /* compareResult */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|{{prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|[[#any|any]]&lt;br /&gt;
|Universal term type.&lt;br /&gt;
|-&lt;br /&gt;
|[[#char|char]]&lt;br /&gt;
|Wide (two-bytes) character.&lt;br /&gt;
|-&lt;br /&gt;
|[[#string|string]]&lt;br /&gt;
|Wide zero-terminated sequence of wide characters.&lt;br /&gt;
|-&lt;br /&gt;
|[[#string8|string8]]&lt;br /&gt;
|Zero-terminated sequence of ASCII (one-byte) characters.&lt;br /&gt;
|-&lt;br /&gt;
|[[#symbol|symbol]]&lt;br /&gt;
|Wide zero-terminated sequence of wide characters.&lt;br /&gt;
|-&lt;br /&gt;
|[[#binary|binary]]&lt;br /&gt;
|Sequence of bytes.&lt;br /&gt;
|-&lt;br /&gt;
|[[#binaryNonAtomic|binaryNonAtomic]]&lt;br /&gt;
|Sequence of bytes.&lt;br /&gt;
|-&lt;br /&gt;
|[[#integer|integer]]&lt;br /&gt;
|32 bit signed integer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#integer64|integer64]]&lt;br /&gt;
|64 bit signed integer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#integerNative|integerNative]]&lt;br /&gt;
|Signed integer with platform size (32 bit in a 32 bit program; 64 bit in a 64 bit program).&lt;br /&gt;
|-&lt;br /&gt;
|[[#unsigned|unsigned]]&lt;br /&gt;
|32 bit unsigned integer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#unsigned64|unsigned64]]&lt;br /&gt;
|64 bit unsigned integer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#unsignedNative|unsignedNative]]&lt;br /&gt;
|Unsigned integer with platform size (32 bit in a 32 bit program; 64 bit in a 64 bit program).&lt;br /&gt;
|-&lt;br /&gt;
|[[#real|real]]&lt;br /&gt;
|Float-pointing number.&lt;br /&gt;
|-&lt;br /&gt;
|[[#real32|real32]]&lt;br /&gt;
|Float-pointing number.&lt;br /&gt;
|-&lt;br /&gt;
|[[#pointer|pointer]]&lt;br /&gt;
|pointer to a memory address.&lt;br /&gt;
|-&lt;br /&gt;
|[[#handle|handle]]&lt;br /&gt;
|a handle (e.g. native file and windows handles).&lt;br /&gt;
|-&lt;br /&gt;
|[[#boolean|boolean]]&lt;br /&gt;
|Boolean values.&lt;br /&gt;
|-&lt;br /&gt;
|[[#factDB|factDB]]&lt;br /&gt;
|Descriptors of named internal databases.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compareResult|compareResult]]&lt;br /&gt;
|Values of comparison result.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== any ====&lt;br /&gt;
&lt;br /&gt;
Universal term type.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;any&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The values of this domain are any terms. Such a value contains the reference to the term type library and a term itself.&lt;br /&gt;
&lt;br /&gt;
==== char ====&lt;br /&gt;
&lt;br /&gt;
Wide character.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;char&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The values of this domain are UNICODE characters. Implemented as 2 unsigned bytes.&lt;br /&gt;
&lt;br /&gt;
Only assignment and comparison (in the lexicographical sense) operations are applied to the values of this domain. The image of a character has the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Char_image&amp;gt; :&lt;br /&gt;
      &amp;#039; Char_value &amp;#039;&lt;br /&gt;
&amp;lt;Char_value&amp;gt; :&lt;br /&gt;
      &amp;lt;Letter&amp;gt;&lt;br /&gt;
      &amp;lt;Digit&amp;gt;&lt;br /&gt;
      &amp;lt;Graphical_symbol&amp;gt;&lt;br /&gt;
      \ &amp;lt;Escape_seq&amp;gt;&lt;br /&gt;
&amp;lt;Escape_seq&amp;gt;:&lt;br /&gt;
      t&lt;br /&gt;
      n&lt;br /&gt;
      r&lt;br /&gt;
      \&lt;br /&gt;
      &amp;#039;&lt;br /&gt;
      &amp;quot;&lt;br /&gt;
      u &amp;lt;HHHH&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the syntax above &amp;lt;vpbnf&amp;gt;&amp;lt;HHHH&amp;gt;&amp;lt;/vpbnf&amp;gt; correspond to 4 hexadecimal digits. Also, the backslash symbol and the single quote can be represented by an escape-sequence only.&lt;br /&gt;
&lt;br /&gt;
==== compareResult ====&lt;br /&gt;
&lt;br /&gt;
The result of a comparison. For instance, the built-in procedure {{lang2|Built-in entities|compare|compare/2-&amp;gt;}} has &amp;quot;compareResult&amp;quot; as the domain of its result.&lt;br /&gt;
&amp;lt;vip&amp;gt;domains&lt;br /&gt;
   compareResult = less; equal; greater.&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== string ====&lt;br /&gt;
&lt;br /&gt;
Wide zero terminated sequence of wide characters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;string&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A string is a sequence of UNICODE characters. It&amp;#039;s implemented as a pointer to the wide zero-terminated array of wide characters. Only assignment and comparison (in the lexicographical sense) operations are applied to values of this domain.&lt;br /&gt;
&lt;br /&gt;
In source code a string literal can be specified as a set of sequences of characters surrounded by the double quotes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;StringLiteral&amp;gt;:&lt;br /&gt;
   &amp;lt;StringLiteralPart&amp;gt;-list&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;StringLiteralPart&amp;gt; :&lt;br /&gt;
   @&amp;quot; AnyCharacter-list-opt &amp;quot;&lt;br /&gt;
   &amp;quot; CharacterValue-list-opt &amp;quot;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A string literal consists of one or more &amp;lt;vpbnf&amp;gt;&amp;lt;StringLiteralPart&amp;gt;&amp;lt;/vpbnf&amp;gt;&amp;#039;s, which are concatenated. &amp;lt;vpbnf&amp;gt;&amp;lt;StringLiteralPart&amp;gt;&amp;lt;/vpbnf&amp;gt;&amp;#039;s starting with &amp;lt;vp&amp;gt;@&amp;lt;/vp&amp;gt; does not use escape sequences, whereas &amp;lt;vpbnf&amp;gt;&amp;lt;StringLiteralPart&amp;gt;&amp;lt;/vpbnf&amp;gt;&amp;#039;s without &amp;lt;vp&amp;gt;@&amp;lt;/vp&amp;gt; uses the following escape sequences:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;vp&amp;gt;\\&amp;lt;/vp&amp;gt; representing &amp;lt;vp&amp;gt;\&amp;lt;/vp&amp;gt;&lt;br /&gt;
*&amp;lt;vp&amp;gt;\t&amp;lt;/vp&amp;gt; representing Tab-character&lt;br /&gt;
*&amp;lt;vp&amp;gt;\n&amp;lt;/vp&amp;gt; representing newline-character&lt;br /&gt;
*&amp;lt;vp&amp;gt;\r&amp;lt;/vp&amp;gt; representing carriage return&lt;br /&gt;
*&amp;lt;vp&amp;gt;\&amp;#039;&amp;lt;/vp&amp;gt; representing single quote&lt;br /&gt;
*&amp;lt;vp&amp;gt;\&amp;quot;&amp;lt;/vp&amp;gt; representing double quote&lt;br /&gt;
*&amp;lt;vp&amp;gt;\u&amp;lt;/vp&amp;gt; followed by exactly four &amp;lt;vpbnf&amp;gt;&amp;lt;HexadecimalDigit&amp;gt;&amp;lt;/vpbnf&amp;gt;&amp;#039;s representing the Unicode character corresponding to the digits.&lt;br /&gt;
&lt;br /&gt;
The double quotes in the string can be represented by the escape-sequence only (the single quote can be represented both with an escape-sequence and a graphical symbol).&lt;br /&gt;
&lt;br /&gt;
==== string8 ====&lt;br /&gt;
&lt;br /&gt;
A built-in domain who&amp;#039;s elements are sequences of (one-byte) ASCII-characters. It is implemented as a pointer to the zero terminated array of ASCII characters. Only assignment and comparison for equality (in the lexicographical sense) operations are applied to the values of this domain. Currently no literals are allowed for this domain.&lt;br /&gt;
&lt;br /&gt;
==== symbol ====&lt;br /&gt;
&lt;br /&gt;
Wide zero terminated sequence of wide characters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;symbol&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similar to a string, a symbol is also a sequence of the UNICODE characters. It&amp;#039;s implemented as a pointer to an entry in a symbol table that contains strings. The operations that can be applied to symbols are the same as for strings.&lt;br /&gt;
&lt;br /&gt;
The image of a symbol is represented with a &amp;#039;&amp;#039;&amp;lt;string_literal&amp;gt;&amp;#039;&amp;#039; (any string surrounded by the double quotes).&lt;br /&gt;
&lt;br /&gt;
Symbols and strings are largely interchangeable but they are stored differently. Symbols are kept in a look-up table and their addresses, rather than the symbols themselves, are stored to represent objects. This means that symbols can be matched very quickly and, if a symbol occurs repeatedly in a program, it can be stored very compactly. Strings are not kept in a look-up table. Visual Prolog examines strings character-by-character whenever they are to be matched.&lt;br /&gt;
&lt;br /&gt;
==== binary ====&lt;br /&gt;
&lt;br /&gt;
Sequence of bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;binary&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain are used for holding binary data. A binary value is implemented as a pointer to the sequence of bytes that represents the contents of a binary term.&lt;br /&gt;
&lt;br /&gt;
The length of a binary term is situated in the &amp;#039;&amp;#039;&amp;#039;4 bytes&amp;#039;&amp;#039;&amp;#039; immediately preceding this sequence of bytes. The 4 bytes contains:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;TotalNumberOfBytesOccupiedByBinary = ByteLen + 4 &amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;vp&amp;gt;ByteLen&amp;lt;/vp&amp;gt; - is the length of the binary term and 4 is number of bytes occupied by size field.&lt;br /&gt;
&lt;br /&gt;
Only assignment and comparison operations are applied to values of &amp;#039;&amp;#039;&amp;#039;binary domain&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Two binary terms are compared in the following way:&lt;br /&gt;
&lt;br /&gt;
*If they are of different sizes, the bigger is considered larger.&lt;br /&gt;
*Otherwise, they are compared byte by byte, as unsigned values. Comparison stops when two differing bytes are found and the result of their comparison is the result of the comparison of the binary terms. Two binary terms are equal if they have the same sizes and all bytes are equal.&lt;br /&gt;
&lt;br /&gt;
The text syntax for binary images is determined by the &amp;lt;vpbnf&amp;gt;&amp;lt;Binary&amp;gt;&amp;lt;/vpbnf&amp;gt; rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Binary&amp;gt; :&lt;br /&gt;
       $ [ &amp;lt;Byte_value&amp;gt;-comma-sep-list-opt ]&lt;br /&gt;
&amp;lt;Byte_value&amp;gt; :&lt;br /&gt;
      &amp;lt;Expression&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each &amp;#039;&amp;#039;expression&amp;#039;&amp;#039; should be calculate on compiling time and its value should be in the range from &amp;lt;vp&amp;gt;0&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;255&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== binaryNonAtomic ====&lt;br /&gt;
&lt;br /&gt;
Sequence of bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;binaryNonAtomic&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Same as [[#binary|binary]], but can contain pointers because it is scanned by the garbage collector.&lt;br /&gt;
&lt;br /&gt;
==== integer ====&lt;br /&gt;
&lt;br /&gt;
32 bit signed integer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;integer&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 4 bytes. Arithmetic operations (&amp;lt;vp&amp;gt;+&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;-&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;/&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;*&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;^&amp;lt;/vp&amp;gt;), comparison, assignment, {{lang2|Built-in entities|Operators|div/2-&amp;gt;}}, {{lang2|Built-in entities|Operators|mod/2-&amp;gt;}}, {{lang2|Built-in entities|Operators|quot/2-&amp;gt;}}, and {{lang2|Built-in entities|Operators|rem/2-&amp;gt;}} operations are applied to values of this domain.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is from &amp;lt;vp&amp;gt;-2147483648&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;2147483647&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax for the &amp;lt;vp&amp;gt;integer&amp;lt;/vp&amp;gt; literal is determined by the &amp;lt;vpbnf&amp;gt;&amp;lt;Integer&amp;gt;&amp;lt;/vpbnf&amp;gt; rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Integer&amp;gt; :&lt;br /&gt;
      &amp;lt;Add_operation&amp;gt;-opt 0o &amp;lt;Oct_number&amp;gt;&lt;br /&gt;
      &amp;lt;Add_operation&amp;gt;-opt &amp;lt;Dec_number&amp;gt;&lt;br /&gt;
      &amp;lt;Add_operation&amp;gt;-opt 0x &amp;lt;Hex_number&amp;gt;&lt;br /&gt;
&amp;lt;Add_operation&amp;gt; :&lt;br /&gt;
      +&lt;br /&gt;
      -&lt;br /&gt;
&amp;lt;Oct_number&amp;gt; :&lt;br /&gt;
      &amp;lt;Oct_digit&amp;gt;-list&lt;br /&gt;
&amp;lt;Oct_digit&amp;gt; : one of&lt;br /&gt;
      0 1 2 3 4 5 6 7&lt;br /&gt;
&amp;lt;Dec_number&amp;gt; :&lt;br /&gt;
      &amp;lt;Dec_digit&amp;gt;-list&lt;br /&gt;
&amp;lt;Dec_digit&amp;gt; : one of&lt;br /&gt;
      &amp;lt;Oct_digit&amp;gt; 8 9&lt;br /&gt;
&amp;lt;Hex_number&amp;gt; :&lt;br /&gt;
      &amp;lt;Hex_digit&amp;gt;-list&lt;br /&gt;
&amp;lt;Hex_digit&amp;gt; : one of&lt;br /&gt;
      &amp;lt;Dec_digit&amp;gt; a b c d e f A B C D E F&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== integer64 ====&lt;br /&gt;
&lt;br /&gt;
64 bit signed integers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;integer64&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 8 bytes.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is from &amp;lt;vp&amp;gt;-2^63 = -9223372036854775808&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;2^63-1 = 9223372036854775807&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax for &amp;lt;vp&amp;gt;integer64&amp;lt;/vp&amp;gt; literal is the same as &amp;lt;vpbnf&amp;gt;&amp;lt;Integer&amp;gt;&amp;lt;/vpbnf&amp;gt; rule.&lt;br /&gt;
&lt;br /&gt;
The set of operations for &amp;lt;vp&amp;gt;integer64&amp;lt;/vp&amp;gt; is similar to the one for &amp;lt;vpbnf&amp;gt;&amp;lt;Integer&amp;gt;&amp;lt;/vpbnf&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== integerNative ====&lt;br /&gt;
&lt;br /&gt;
Signed integer number with platform size (32 bit in a 32 bit program; 64 bit in a 64 bit program).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;integerNative&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== unsigned ====&lt;br /&gt;
&lt;br /&gt;
32 bit unsigned integer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;unsigned&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 4 bytes. Arithmetic operations (&amp;lt;vp&amp;gt;+&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;-&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;/&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;*&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;^&amp;lt;/vp&amp;gt;), comparison, assignment, {{lang2|Built-in entities|Operators|div/2-&amp;gt;}}, {{lang2|Built-in entities|Operators|mod/2-&amp;gt;}}, {{lang2|Built-in entities|Operators|rem/2-&amp;gt;}}, and {{lang2|Built-in entities|Operators|quot/2-&amp;gt;}} operations are applied to values of this domain.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is from &amp;lt;vp&amp;gt;0&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;4294967295&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax for &amp;lt;vp&amp;gt;unsigned&amp;lt;/vp&amp;gt; number images is the same as for &amp;lt;vp&amp;gt;integer&amp;lt;/vp&amp;gt; numbers. The usage of minus sign (&amp;lt;vpbnf&amp;gt;&amp;lt;UnaryMinus&amp;gt;&amp;lt;/vpbnf&amp;gt;) is not allowed for an image of an &amp;lt;vp&amp;gt;unsigned&amp;lt;/vp&amp;gt; number.&lt;br /&gt;
&lt;br /&gt;
==== unsigned64 ====&lt;br /&gt;
&lt;br /&gt;
64 bit unsigned integer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;unsigned64&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 8 bytes.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is from &amp;lt;vp&amp;gt;0&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;2^64-1 = 18,446,744,073,709,551,615&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax for &amp;lt;vp&amp;gt;unsigned64&amp;lt;/vp&amp;gt; number images is the same as for &amp;lt;vp&amp;gt;integer64&amp;lt;/vp&amp;gt; numbers. The usage of minus sign (&amp;lt;vpbnf&amp;gt;&amp;lt;UnaryMinus&amp;gt;&amp;lt;/vpbnf&amp;gt;) is not allowed for an image of an &amp;lt;vp&amp;gt;unsigned64&amp;lt;/vp&amp;gt; number.&lt;br /&gt;
&lt;br /&gt;
The set of operations for &amp;lt;vp&amp;gt;unsigned64&amp;lt;/vp&amp;gt; is similar to the one for &amp;lt;vpbnf&amp;gt;&amp;lt;Unsigned&amp;gt;&amp;lt;/vpbnf&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== unsignedNative ====&lt;br /&gt;
&lt;br /&gt;
Unsigned integer number with platform size (32 bit in a 32 bit program; 64 bit in a 64 bit program).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;unsignedNative&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== real ====&lt;br /&gt;
&lt;br /&gt;
Float-pointing number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;real&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 8 bytes. This numerical real domain is introduced for the user&amp;#039;s convenience only. All arithmetic, comparison, and assignment operations are applied to values of &amp;lt;vp&amp;gt;real&amp;lt;/vp&amp;gt; domain.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is &amp;lt;vp&amp;gt;-1.7e+308&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;1.7e+308&amp;lt;/vp&amp;gt;. Values from integral domains are automatically converted to real numbers when necessary.&lt;br /&gt;
&lt;br /&gt;
The syntax for the floating-point number literal is determined by the &amp;lt;vpbnf&amp;gt;&amp;lt;Real&amp;gt;&amp;lt;/vpbnf&amp;gt; rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Real&amp;gt; :&lt;br /&gt;
      &amp;lt;Add_operation&amp;gt;-opt &amp;lt;Fraction&amp;gt; &amp;lt;Exponent&amp;gt;-opt&lt;br /&gt;
&amp;lt;Fraction&amp;gt; :&lt;br /&gt;
      &amp;lt;Dec_number&amp;gt; &amp;lt;Fractional_part&amp;gt;-opt&lt;br /&gt;
&amp;lt;Fractional_part&amp;gt; :&lt;br /&gt;
      . &amp;lt;Dec_number&amp;gt;&lt;br /&gt;
&amp;lt;Exponent&amp;gt; :&lt;br /&gt;
      &amp;lt;Exp&amp;gt; &amp;lt;Add_operation&amp;gt;-opt &amp;lt;Dec_number&amp;gt;&lt;br /&gt;
&amp;lt;Exp&amp;gt; :&lt;br /&gt;
      e&lt;br /&gt;
      E&lt;br /&gt;
&amp;lt;Add_operation&amp;gt; :&lt;br /&gt;
      +&lt;br /&gt;
      -&lt;br /&gt;
&amp;lt;Dec_number&amp;gt; :&lt;br /&gt;
      &amp;lt;Dec_digit&amp;gt;-list&lt;br /&gt;
&amp;lt;Dec_digit&amp;gt; : one of&lt;br /&gt;
      0 1 2 3 4 5 6 7 8 9&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== real32 ====&lt;br /&gt;
&lt;br /&gt;
Float-pointing number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;real32&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 4 bytes. This numerical &amp;lt;vp&amp;gt;real32&amp;lt;/vp&amp;gt; domain is introduced for the user&amp;#039;s convenience only. All arithmetic, comparison, and assignment operations can be applied to values of &amp;lt;vp&amp;gt;real32&amp;lt;/vp&amp;gt; domain.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is &amp;lt;vp&amp;gt;-3.4e+38&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;3.4e+38&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax of real32 literals is the same as &amp;lt;vp&amp;gt;real&amp;lt;/vp&amp;gt; lietrals.&lt;br /&gt;
&lt;br /&gt;
==== pointer ====&lt;br /&gt;
&lt;br /&gt;
A pointer to a memory address.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;pointer&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A pointer directly corresponds to memory addresses. Only the equality operation can be applied to the values of this domain. There is a built-in &amp;#039;&amp;#039;&amp;#039;null&amp;#039;&amp;#039;&amp;#039; constant for this type&lt;br /&gt;
&lt;br /&gt;
==== handle ====&lt;br /&gt;
&lt;br /&gt;
A handle is used for Windows API function call. Values of this domain has the same size as a pointer (i.e. 4 on 32bit platfor and 8 on 64bit platform).&lt;br /&gt;
&lt;br /&gt;
There are no operations for this domain and cannot be converted (except uncheckedConvert) to/from other domains.&lt;br /&gt;
&lt;br /&gt;
There is a built-in [[#nullHandle|nullHandle]] and [[#invalidHandle|invalidHandle]] constant  for this type&lt;br /&gt;
&lt;br /&gt;
==== boolean ====&lt;br /&gt;
&lt;br /&gt;
Boolean values.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;boolean&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This domain is introduced for the user convenience only. It is treated as usual compound domain with the following definition:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;domains&lt;br /&gt;
   boolean = false(); true().&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== factDB ====&lt;br /&gt;
&lt;br /&gt;
Descriptors of named internal databases.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;factDB&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This domain has the following hidden meta-declaration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;domains&lt;br /&gt;
   factDB = struct @factdb( named_internal_database_domain, object ).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All user-defined names of facts sections are the constants of this domain. The compiler automatically builds the corresponding compound terms from such constants whenever it&amp;#039;s in need. At the runtime the 1st field of this structure contains the address of the corresponding domain descriptor and the 2nd field contains either zero (for class facts sections) or pointer to an object (i.e. &amp;lt;vp&amp;gt;This&amp;lt;/vp&amp;gt;, for object facts sections).&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{LanguageReferenceSubarticle|Built-in entities/Domains}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Joachim Tilsted Kristensen</name></author>
	</entry>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Constants&amp;diff=4762</id>
		<title>Language Reference/Built-in entities/Constants</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Constants&amp;diff=4762"/>
		<updated>2020-12-19T16:21:22Z</updated>

		<summary type="html">&lt;p&gt;Joachim Tilsted Kristensen: /* invalidHandle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|{{prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|[[#compilation_date|compilation_date]]&lt;br /&gt;
|Compilation date.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compilation_time|compilation_time]]&lt;br /&gt;
|Compilation time.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compiler_buildDate|compiler_buildDate]]&lt;br /&gt;
|Build date of a compiler.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compiler_version|compiler_version]]&lt;br /&gt;
|A compiler version.&lt;br /&gt;
|-&lt;br /&gt;
|[[#maxFloatDigits|maxFloatDigits]]&lt;br /&gt;
|Defines the maximal value of &amp;quot;digits&amp;quot;, which is supported by the compiler.&lt;br /&gt;
|-&lt;br /&gt;
|[[#null|null]]&lt;br /&gt;
|The default NULL pointer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#nullHandle|nullHandle]]&lt;br /&gt;
|A special constant of a handle type with the zero value.&lt;br /&gt;
|-&lt;br /&gt;
|[[#invalidHandle|invalidHandle]]&lt;br /&gt;
|A special constant of a handle type with the invalid (-1) value.&lt;br /&gt;
|-&lt;br /&gt;
|[[#platform_bits|platform_bits]]&lt;br /&gt;
|Defines the digital capacity of compilation platform.&lt;br /&gt;
|-&lt;br /&gt;
|[[#platform_name|platform_name]]&lt;br /&gt;
|Defines the target platform name.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== compilation_date ====&lt;br /&gt;
&lt;br /&gt;
Compilation date. Here &amp;#039;&amp;#039;YYYY&amp;#039;&amp;#039; means the number of a year, &amp;#039;&amp;#039;MM&amp;#039;&amp;#039; means a month number, and &amp;#039;&amp;#039;DD&amp;#039;&amp;#039; means a day number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compilation_date : string = &amp;quot;YYYY-MM-DD&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compilation_time ====&lt;br /&gt;
&lt;br /&gt;
Compilation time. Here &amp;#039;&amp;#039;HH&amp;#039;&amp;#039; means hours, &amp;#039;&amp;#039;MM&amp;#039;&amp;#039; means minutes, and &amp;#039;&amp;#039;SS &amp;#039;&amp;#039;means seconds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compilation_time : string = &amp;quot;HH:MM:SS&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compiler_buildDate ====&lt;br /&gt;
&lt;br /&gt;
Build date of the compiler.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compiler_buildDate : string = &amp;quot;YYYY-MM-DD HH:MM&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compiler_version ====&lt;br /&gt;
&lt;br /&gt;
A compiler version. This value depends upon the compiler version.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compiler_version = 6003.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== maxFloatDigits ====&lt;br /&gt;
&lt;br /&gt;
Defines the maximal value of &amp;quot;digits&amp;quot;, which is supported by the compiler.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;maxFloatDigits = 16.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== null ====&lt;br /&gt;
&lt;br /&gt;
A constant of type &amp;lt;vp&amp;gt;pointer&amp;lt;/vp&amp;gt; with the value &amp;lt;vp&amp;gt;0&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;null : pointer = uncheckedConvert(pointer, 0).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== nullHandle ====&lt;br /&gt;
&lt;br /&gt;
A constant of type &amp;lt;vp&amp;gt;handle&amp;lt;/vp&amp;gt; with the value &amp;lt;vp&amp;gt;0&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;nullHandle : handle = uncheckedConvert(handle, 0).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== invalidHandle ====&lt;br /&gt;
&lt;br /&gt;
A constant of type &amp;lt;vp&amp;gt;handle&amp;lt;/vp&amp;gt; with the invalid (for a handle) value &amp;lt;vp&amp;gt;-1&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;invalidHandle : handle = uncheckedConvert(handle, -1).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== platform_bits ====&lt;br /&gt;
&lt;br /&gt;
Defines the digital capacity of compilation platform.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;platform_bits = 32.&lt;br /&gt;
or&lt;br /&gt;
platform_bits = 64.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== platform_name ====&lt;br /&gt;
&lt;br /&gt;
Defines the target platform name.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;platform_name : string = &amp;quot;Windows 32bits&amp;quot;.&lt;br /&gt;
or&lt;br /&gt;
platform_name : string = &amp;quot;Windows 64bits&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{LanguageReferenceSubarticle|Built-in entities/Constants}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Joachim Tilsted Kristensen</name></author>
	</entry>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Constants&amp;diff=4761</id>
		<title>Language Reference/Built-in entities/Constants</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Constants&amp;diff=4761"/>
		<updated>2020-12-19T16:20:53Z</updated>

		<summary type="html">&lt;p&gt;Joachim Tilsted Kristensen: /* nullHandle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|{{prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|[[#compilation_date|compilation_date]]&lt;br /&gt;
|Compilation date.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compilation_time|compilation_time]]&lt;br /&gt;
|Compilation time.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compiler_buildDate|compiler_buildDate]]&lt;br /&gt;
|Build date of a compiler.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compiler_version|compiler_version]]&lt;br /&gt;
|A compiler version.&lt;br /&gt;
|-&lt;br /&gt;
|[[#maxFloatDigits|maxFloatDigits]]&lt;br /&gt;
|Defines the maximal value of &amp;quot;digits&amp;quot;, which is supported by the compiler.&lt;br /&gt;
|-&lt;br /&gt;
|[[#null|null]]&lt;br /&gt;
|The default NULL pointer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#nullHandle|nullHandle]]&lt;br /&gt;
|A special constant of a handle type with the zero value.&lt;br /&gt;
|-&lt;br /&gt;
|[[#invalidHandle|invalidHandle]]&lt;br /&gt;
|A special constant of a handle type with the invalid (-1) value.&lt;br /&gt;
|-&lt;br /&gt;
|[[#platform_bits|platform_bits]]&lt;br /&gt;
|Defines the digital capacity of compilation platform.&lt;br /&gt;
|-&lt;br /&gt;
|[[#platform_name|platform_name]]&lt;br /&gt;
|Defines the target platform name.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== compilation_date ====&lt;br /&gt;
&lt;br /&gt;
Compilation date. Here &amp;#039;&amp;#039;YYYY&amp;#039;&amp;#039; means the number of a year, &amp;#039;&amp;#039;MM&amp;#039;&amp;#039; means a month number, and &amp;#039;&amp;#039;DD&amp;#039;&amp;#039; means a day number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compilation_date : string = &amp;quot;YYYY-MM-DD&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compilation_time ====&lt;br /&gt;
&lt;br /&gt;
Compilation time. Here &amp;#039;&amp;#039;HH&amp;#039;&amp;#039; means hours, &amp;#039;&amp;#039;MM&amp;#039;&amp;#039; means minutes, and &amp;#039;&amp;#039;SS &amp;#039;&amp;#039;means seconds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compilation_time : string = &amp;quot;HH:MM:SS&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compiler_buildDate ====&lt;br /&gt;
&lt;br /&gt;
Build date of the compiler.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compiler_buildDate : string = &amp;quot;YYYY-MM-DD HH:MM&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compiler_version ====&lt;br /&gt;
&lt;br /&gt;
A compiler version. This value depends upon the compiler version.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compiler_version = 6003.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== maxFloatDigits ====&lt;br /&gt;
&lt;br /&gt;
Defines the maximal value of &amp;quot;digits&amp;quot;, which is supported by the compiler.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;maxFloatDigits = 16.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== null ====&lt;br /&gt;
&lt;br /&gt;
A constant of type &amp;lt;vp&amp;gt;pointer&amp;lt;/vp&amp;gt; with the value &amp;lt;vp&amp;gt;0&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;null : pointer = uncheckedConvert(pointer, 0).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== nullHandle ====&lt;br /&gt;
&lt;br /&gt;
A constant of type &amp;lt;vp&amp;gt;handle&amp;lt;/vp&amp;gt; with the value &amp;lt;vp&amp;gt;0&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;nullHandle : handle = uncheckedConvert(handle, 0).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== invalidHandle ====&lt;br /&gt;
&lt;br /&gt;
A constant of type &amp;quot;handle&amp;quot; with the invalid (for a handle) value &amp;quot;-1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;invalidHandle : handle = uncheckedConvert(handle, -1).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== platform_bits ====&lt;br /&gt;
&lt;br /&gt;
Defines the digital capacity of compilation platform.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;platform_bits = 32.&lt;br /&gt;
or&lt;br /&gt;
platform_bits = 64.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== platform_name ====&lt;br /&gt;
&lt;br /&gt;
Defines the target platform name.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;platform_name : string = &amp;quot;Windows 32bits&amp;quot;.&lt;br /&gt;
or&lt;br /&gt;
platform_name : string = &amp;quot;Windows 64bits&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{LanguageReferenceSubarticle|Built-in entities/Constants}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Joachim Tilsted Kristensen</name></author>
	</entry>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Constants&amp;diff=4760</id>
		<title>Language Reference/Built-in entities/Constants</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Constants&amp;diff=4760"/>
		<updated>2020-12-19T16:20:19Z</updated>

		<summary type="html">&lt;p&gt;Joachim Tilsted Kristensen: /* null */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|{{prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|[[#compilation_date|compilation_date]]&lt;br /&gt;
|Compilation date.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compilation_time|compilation_time]]&lt;br /&gt;
|Compilation time.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compiler_buildDate|compiler_buildDate]]&lt;br /&gt;
|Build date of a compiler.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compiler_version|compiler_version]]&lt;br /&gt;
|A compiler version.&lt;br /&gt;
|-&lt;br /&gt;
|[[#maxFloatDigits|maxFloatDigits]]&lt;br /&gt;
|Defines the maximal value of &amp;quot;digits&amp;quot;, which is supported by the compiler.&lt;br /&gt;
|-&lt;br /&gt;
|[[#null|null]]&lt;br /&gt;
|The default NULL pointer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#nullHandle|nullHandle]]&lt;br /&gt;
|A special constant of a handle type with the zero value.&lt;br /&gt;
|-&lt;br /&gt;
|[[#invalidHandle|invalidHandle]]&lt;br /&gt;
|A special constant of a handle type with the invalid (-1) value.&lt;br /&gt;
|-&lt;br /&gt;
|[[#platform_bits|platform_bits]]&lt;br /&gt;
|Defines the digital capacity of compilation platform.&lt;br /&gt;
|-&lt;br /&gt;
|[[#platform_name|platform_name]]&lt;br /&gt;
|Defines the target platform name.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== compilation_date ====&lt;br /&gt;
&lt;br /&gt;
Compilation date. Here &amp;#039;&amp;#039;YYYY&amp;#039;&amp;#039; means the number of a year, &amp;#039;&amp;#039;MM&amp;#039;&amp;#039; means a month number, and &amp;#039;&amp;#039;DD&amp;#039;&amp;#039; means a day number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compilation_date : string = &amp;quot;YYYY-MM-DD&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compilation_time ====&lt;br /&gt;
&lt;br /&gt;
Compilation time. Here &amp;#039;&amp;#039;HH&amp;#039;&amp;#039; means hours, &amp;#039;&amp;#039;MM&amp;#039;&amp;#039; means minutes, and &amp;#039;&amp;#039;SS &amp;#039;&amp;#039;means seconds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compilation_time : string = &amp;quot;HH:MM:SS&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compiler_buildDate ====&lt;br /&gt;
&lt;br /&gt;
Build date of the compiler.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compiler_buildDate : string = &amp;quot;YYYY-MM-DD HH:MM&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compiler_version ====&lt;br /&gt;
&lt;br /&gt;
A compiler version. This value depends upon the compiler version.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compiler_version = 6003.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== maxFloatDigits ====&lt;br /&gt;
&lt;br /&gt;
Defines the maximal value of &amp;quot;digits&amp;quot;, which is supported by the compiler.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;maxFloatDigits = 16.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== null ====&lt;br /&gt;
&lt;br /&gt;
A constant of type &amp;lt;vp&amp;gt;pointer&amp;lt;/vp&amp;gt; with the value &amp;lt;vp&amp;gt;0&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;null : pointer = uncheckedConvert(pointer, 0).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== nullHandle ====&lt;br /&gt;
&lt;br /&gt;
A constant of type &amp;quot;handle&amp;quot; with the value &amp;quot;0&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;nullHandle : handle = uncheckedConvert(handle, 0).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== invalidHandle ====&lt;br /&gt;
&lt;br /&gt;
A constant of type &amp;quot;handle&amp;quot; with the invalid (for a handle) value &amp;quot;-1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;invalidHandle : handle = uncheckedConvert(handle, -1).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== platform_bits ====&lt;br /&gt;
&lt;br /&gt;
Defines the digital capacity of compilation platform.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;platform_bits = 32.&lt;br /&gt;
or&lt;br /&gt;
platform_bits = 64.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== platform_name ====&lt;br /&gt;
&lt;br /&gt;
Defines the target platform name.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;platform_name : string = &amp;quot;Windows 32bits&amp;quot;.&lt;br /&gt;
or&lt;br /&gt;
platform_name : string = &amp;quot;Windows 64bits&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{LanguageReferenceSubarticle|Built-in entities/Constants}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Joachim Tilsted Kristensen</name></author>
	</entry>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Constants&amp;diff=4759</id>
		<title>Language Reference/Built-in entities/Constants</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Constants&amp;diff=4759"/>
		<updated>2020-12-19T16:19:57Z</updated>

		<summary type="html">&lt;p&gt;Joachim Tilsted Kristensen: /* null */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|{{prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|[[#compilation_date|compilation_date]]&lt;br /&gt;
|Compilation date.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compilation_time|compilation_time]]&lt;br /&gt;
|Compilation time.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compiler_buildDate|compiler_buildDate]]&lt;br /&gt;
|Build date of a compiler.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compiler_version|compiler_version]]&lt;br /&gt;
|A compiler version.&lt;br /&gt;
|-&lt;br /&gt;
|[[#maxFloatDigits|maxFloatDigits]]&lt;br /&gt;
|Defines the maximal value of &amp;quot;digits&amp;quot;, which is supported by the compiler.&lt;br /&gt;
|-&lt;br /&gt;
|[[#null|null]]&lt;br /&gt;
|The default NULL pointer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#nullHandle|nullHandle]]&lt;br /&gt;
|A special constant of a handle type with the zero value.&lt;br /&gt;
|-&lt;br /&gt;
|[[#invalidHandle|invalidHandle]]&lt;br /&gt;
|A special constant of a handle type with the invalid (-1) value.&lt;br /&gt;
|-&lt;br /&gt;
|[[#platform_bits|platform_bits]]&lt;br /&gt;
|Defines the digital capacity of compilation platform.&lt;br /&gt;
|-&lt;br /&gt;
|[[#platform_name|platform_name]]&lt;br /&gt;
|Defines the target platform name.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== compilation_date ====&lt;br /&gt;
&lt;br /&gt;
Compilation date. Here &amp;#039;&amp;#039;YYYY&amp;#039;&amp;#039; means the number of a year, &amp;#039;&amp;#039;MM&amp;#039;&amp;#039; means a month number, and &amp;#039;&amp;#039;DD&amp;#039;&amp;#039; means a day number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compilation_date : string = &amp;quot;YYYY-MM-DD&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compilation_time ====&lt;br /&gt;
&lt;br /&gt;
Compilation time. Here &amp;#039;&amp;#039;HH&amp;#039;&amp;#039; means hours, &amp;#039;&amp;#039;MM&amp;#039;&amp;#039; means minutes, and &amp;#039;&amp;#039;SS &amp;#039;&amp;#039;means seconds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compilation_time : string = &amp;quot;HH:MM:SS&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compiler_buildDate ====&lt;br /&gt;
&lt;br /&gt;
Build date of the compiler.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compiler_buildDate : string = &amp;quot;YYYY-MM-DD HH:MM&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compiler_version ====&lt;br /&gt;
&lt;br /&gt;
A compiler version. This value depends upon the compiler version.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compiler_version = 6003.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== maxFloatDigits ====&lt;br /&gt;
&lt;br /&gt;
Defines the maximal value of &amp;quot;digits&amp;quot;, which is supported by the compiler.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;maxFloatDigits = 16.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== null ====&lt;br /&gt;
&lt;br /&gt;
A constant of type &amp;lt;vp&amp;gt;pointer&amp;lt;/vp&amp;gt; with the value &amp;quot;0&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;null : pointer = uncheckedConvert(pointer, 0).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== nullHandle ====&lt;br /&gt;
&lt;br /&gt;
A constant of type &amp;quot;handle&amp;quot; with the value &amp;quot;0&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;nullHandle : handle = uncheckedConvert(handle, 0).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== invalidHandle ====&lt;br /&gt;
&lt;br /&gt;
A constant of type &amp;quot;handle&amp;quot; with the invalid (for a handle) value &amp;quot;-1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;invalidHandle : handle = uncheckedConvert(handle, -1).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== platform_bits ====&lt;br /&gt;
&lt;br /&gt;
Defines the digital capacity of compilation platform.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;platform_bits = 32.&lt;br /&gt;
or&lt;br /&gt;
platform_bits = 64.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== platform_name ====&lt;br /&gt;
&lt;br /&gt;
Defines the target platform name.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;platform_name : string = &amp;quot;Windows 32bits&amp;quot;.&lt;br /&gt;
or&lt;br /&gt;
platform_name : string = &amp;quot;Windows 64bits&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{LanguageReferenceSubarticle|Built-in entities/Constants}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Joachim Tilsted Kristensen</name></author>
	</entry>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Domains&amp;diff=4758</id>
		<title>Language Reference/Built-in entities/Domains</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Domains&amp;diff=4758"/>
		<updated>2020-12-19T16:18:26Z</updated>

		<summary type="html">&lt;p&gt;Joachim Tilsted Kristensen: /* integer64 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|{{prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|[[#any|any]]&lt;br /&gt;
|Universal term type.&lt;br /&gt;
|-&lt;br /&gt;
|[[#char|char]]&lt;br /&gt;
|Wide (two-bytes) character.&lt;br /&gt;
|-&lt;br /&gt;
|[[#string|string]]&lt;br /&gt;
|Wide zero-terminated sequence of wide characters.&lt;br /&gt;
|-&lt;br /&gt;
|[[#string8|string8]]&lt;br /&gt;
|Zero-terminated sequence of ASCII (one-byte) characters.&lt;br /&gt;
|-&lt;br /&gt;
|[[#symbol|symbol]]&lt;br /&gt;
|Wide zero-terminated sequence of wide characters.&lt;br /&gt;
|-&lt;br /&gt;
|[[#binary|binary]]&lt;br /&gt;
|Sequence of bytes.&lt;br /&gt;
|-&lt;br /&gt;
|[[#binaryNonAtomic|binaryNonAtomic]]&lt;br /&gt;
|Sequence of bytes.&lt;br /&gt;
|-&lt;br /&gt;
|[[#integer|integer]]&lt;br /&gt;
|32 bit signed integer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#integer64|integer64]]&lt;br /&gt;
|64 bit signed integer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#integerNative|integerNative]]&lt;br /&gt;
|Signed integer with platform size (32 bit in a 32 bit program; 64 bit in a 64 bit program).&lt;br /&gt;
|-&lt;br /&gt;
|[[#unsigned|unsigned]]&lt;br /&gt;
|32 bit unsigned integer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#unsigned64|unsigned64]]&lt;br /&gt;
|64 bit unsigned integer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#unsignedNative|unsignedNative]]&lt;br /&gt;
|Unsigned integer with platform size (32 bit in a 32 bit program; 64 bit in a 64 bit program).&lt;br /&gt;
|-&lt;br /&gt;
|[[#real|real]]&lt;br /&gt;
|Float-pointing number.&lt;br /&gt;
|-&lt;br /&gt;
|[[#real32|real32]]&lt;br /&gt;
|Float-pointing number.&lt;br /&gt;
|-&lt;br /&gt;
|[[#pointer|pointer]]&lt;br /&gt;
|pointer to a memory address.&lt;br /&gt;
|-&lt;br /&gt;
|[[#handle|handle]]&lt;br /&gt;
|a handle (e.g. native file and windows handles).&lt;br /&gt;
|-&lt;br /&gt;
|[[#boolean|boolean]]&lt;br /&gt;
|Boolean values.&lt;br /&gt;
|-&lt;br /&gt;
|[[#factDB|factDB]]&lt;br /&gt;
|Descriptors of named internal databases.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compareResult|compareResult]]&lt;br /&gt;
|Values of comparison result.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== any ====&lt;br /&gt;
&lt;br /&gt;
Universal term type.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;any&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The values of this domain are any terms. Such a value contains the reference to the term type library and a term itself.&lt;br /&gt;
&lt;br /&gt;
==== char ====&lt;br /&gt;
&lt;br /&gt;
Wide character.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;char&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The values of this domain are UNICODE characters. Implemented as 2 unsigned bytes.&lt;br /&gt;
&lt;br /&gt;
Only assignment and comparison (in the lexicographical sense) operations are applied to the values of this domain. The image of a character has the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Char_image&amp;gt; :&lt;br /&gt;
      &amp;#039; Char_value &amp;#039;&lt;br /&gt;
&amp;lt;Char_value&amp;gt; :&lt;br /&gt;
      &amp;lt;Letter&amp;gt;&lt;br /&gt;
      &amp;lt;Digit&amp;gt;&lt;br /&gt;
      &amp;lt;Graphical_symbol&amp;gt;&lt;br /&gt;
      \ &amp;lt;Escape_seq&amp;gt;&lt;br /&gt;
&amp;lt;Escape_seq&amp;gt;:&lt;br /&gt;
      t&lt;br /&gt;
      n&lt;br /&gt;
      r&lt;br /&gt;
      \&lt;br /&gt;
      &amp;#039;&lt;br /&gt;
      &amp;quot;&lt;br /&gt;
      u &amp;lt;HHHH&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the syntax above &amp;lt;vpbnf&amp;gt;&amp;lt;HHHH&amp;gt;&amp;lt;/vpbnf&amp;gt; correspond to 4 hexadecimal digits. Also, the backslash symbol and the single quote can be represented by an escape-sequence only.&lt;br /&gt;
&lt;br /&gt;
==== compareResult ====&lt;br /&gt;
&lt;br /&gt;
A built-in domain that represents the result of a comparison. For instance, the built-in procedure {{lang2|Built-in entities|compare|compare/2-&amp;gt;}} has &amp;quot;compareResult&amp;quot; as the domain of its result.&lt;br /&gt;
&amp;lt;vip&amp;gt;domains&lt;br /&gt;
   compareResult = less; equal; greater.&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== string ====&lt;br /&gt;
&lt;br /&gt;
Wide zero terminated sequence of wide characters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;string&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A string is a sequence of UNICODE characters. It&amp;#039;s implemented as a pointer to the wide zero-terminated array of wide characters. Only assignment and comparison (in the lexicographical sense) operations are applied to values of this domain.&lt;br /&gt;
&lt;br /&gt;
In source code a string literal can be specified as a set of sequences of characters surrounded by the double quotes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;StringLiteral&amp;gt;:&lt;br /&gt;
   &amp;lt;StringLiteralPart&amp;gt;-list&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;StringLiteralPart&amp;gt; :&lt;br /&gt;
   @&amp;quot; AnyCharacter-list-opt &amp;quot;&lt;br /&gt;
   &amp;quot; CharacterValue-list-opt &amp;quot;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A string literal consists of one or more &amp;lt;vpbnf&amp;gt;&amp;lt;StringLiteralPart&amp;gt;&amp;lt;/vpbnf&amp;gt;&amp;#039;s, which are concatenated. &amp;lt;vpbnf&amp;gt;&amp;lt;StringLiteralPart&amp;gt;&amp;lt;/vpbnf&amp;gt;&amp;#039;s starting with &amp;lt;vp&amp;gt;@&amp;lt;/vp&amp;gt; does not use escape sequences, whereas &amp;lt;vpbnf&amp;gt;&amp;lt;StringLiteralPart&amp;gt;&amp;lt;/vpbnf&amp;gt;&amp;#039;s without &amp;lt;vp&amp;gt;@&amp;lt;/vp&amp;gt; uses the following escape sequences:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;vp&amp;gt;\\&amp;lt;/vp&amp;gt; representing &amp;lt;vp&amp;gt;\&amp;lt;/vp&amp;gt;&lt;br /&gt;
*&amp;lt;vp&amp;gt;\t&amp;lt;/vp&amp;gt; representing Tab-character&lt;br /&gt;
*&amp;lt;vp&amp;gt;\n&amp;lt;/vp&amp;gt; representing newline-character&lt;br /&gt;
*&amp;lt;vp&amp;gt;\r&amp;lt;/vp&amp;gt; representing carriage return&lt;br /&gt;
*&amp;lt;vp&amp;gt;\&amp;#039;&amp;lt;/vp&amp;gt; representing single quote&lt;br /&gt;
*&amp;lt;vp&amp;gt;\&amp;quot;&amp;lt;/vp&amp;gt; representing double quote&lt;br /&gt;
*&amp;lt;vp&amp;gt;\u&amp;lt;/vp&amp;gt; followed by exactly four &amp;lt;vpbnf&amp;gt;&amp;lt;HexadecimalDigit&amp;gt;&amp;lt;/vpbnf&amp;gt;&amp;#039;s representing the Unicode character corresponding to the digits.&lt;br /&gt;
&lt;br /&gt;
The double quotes in the string can be represented by the escape-sequence only (the single quote can be represented both with an escape-sequence and a graphical symbol).&lt;br /&gt;
&lt;br /&gt;
==== string8 ====&lt;br /&gt;
&lt;br /&gt;
A built-in domain who&amp;#039;s elements are sequences of (one-byte) ASCII-characters. It is implemented as a pointer to the zero terminated array of ASCII characters. Only assignment and comparison for equality (in the lexicographical sense) operations are applied to the values of this domain. Currently no literals are allowed for this domain.&lt;br /&gt;
&lt;br /&gt;
==== symbol ====&lt;br /&gt;
&lt;br /&gt;
Wide zero terminated sequence of wide characters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;symbol&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similar to a string, a symbol is also a sequence of the UNICODE characters. It&amp;#039;s implemented as a pointer to an entry in a symbol table that contains strings. The operations that can be applied to symbols are the same as for strings.&lt;br /&gt;
&lt;br /&gt;
The image of a symbol is represented with a &amp;#039;&amp;#039;&amp;lt;string_literal&amp;gt;&amp;#039;&amp;#039; (any string surrounded by the double quotes).&lt;br /&gt;
&lt;br /&gt;
Symbols and strings are largely interchangeable but they are stored differently. Symbols are kept in a look-up table and their addresses, rather than the symbols themselves, are stored to represent objects. This means that symbols can be matched very quickly and, if a symbol occurs repeatedly in a program, it can be stored very compactly. Strings are not kept in a look-up table. Visual Prolog examines strings character-by-character whenever they are to be matched.&lt;br /&gt;
&lt;br /&gt;
==== binary ====&lt;br /&gt;
&lt;br /&gt;
Sequence of bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;binary&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain are used for holding binary data. A binary value is implemented as a pointer to the sequence of bytes that represents the contents of a binary term.&lt;br /&gt;
&lt;br /&gt;
The length of a binary term is situated in the &amp;#039;&amp;#039;&amp;#039;4 bytes&amp;#039;&amp;#039;&amp;#039; immediately preceding this sequence of bytes. The 4 bytes contains:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;TotalNumberOfBytesOccupiedByBinary = ByteLen + 4 &amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;vp&amp;gt;ByteLen&amp;lt;/vp&amp;gt; - is the length of the binary term and 4 is number of bytes occupied by size field.&lt;br /&gt;
&lt;br /&gt;
Only assignment and comparison operations are applied to values of &amp;#039;&amp;#039;&amp;#039;binary domain&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Two binary terms are compared in the following way:&lt;br /&gt;
&lt;br /&gt;
*If they are of different sizes, the bigger is considered larger.&lt;br /&gt;
*Otherwise, they are compared byte by byte, as unsigned values. Comparison stops when two differing bytes are found and the result of their comparison is the result of the comparison of the binary terms. Two binary terms are equal if they have the same sizes and all bytes are equal.&lt;br /&gt;
&lt;br /&gt;
The text syntax for binary images is determined by the &amp;lt;vpbnf&amp;gt;&amp;lt;Binary&amp;gt;&amp;lt;/vpbnf&amp;gt; rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Binary&amp;gt; :&lt;br /&gt;
       $ [ &amp;lt;Byte_value&amp;gt;-comma-sep-list-opt ]&lt;br /&gt;
&amp;lt;Byte_value&amp;gt; :&lt;br /&gt;
      &amp;lt;Expression&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each &amp;#039;&amp;#039;expression&amp;#039;&amp;#039; should be calculate on compiling time and its value should be in the range from &amp;lt;vp&amp;gt;0&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;255&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== binaryNonAtomic ====&lt;br /&gt;
&lt;br /&gt;
Sequence of bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;binaryNonAtomic&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Same as [[#binary|binary]], but can contain pointers because it is scanned by the garbage collector.&lt;br /&gt;
&lt;br /&gt;
==== integer ====&lt;br /&gt;
&lt;br /&gt;
32 bit signed integer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;integer&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 4 bytes. Arithmetic operations (&amp;lt;vp&amp;gt;+&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;-&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;/&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;*&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;^&amp;lt;/vp&amp;gt;), comparison, assignment, {{lang2|Built-in entities|Operators|div/2-&amp;gt;}}, {{lang2|Built-in entities|Operators|mod/2-&amp;gt;}}, {{lang2|Built-in entities|Operators|quot/2-&amp;gt;}}, and {{lang2|Built-in entities|Operators|rem/2-&amp;gt;}} operations are applied to values of this domain.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is from &amp;lt;vp&amp;gt;-2147483648&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;2147483647&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax for the &amp;lt;vp&amp;gt;integer&amp;lt;/vp&amp;gt; literal is determined by the &amp;lt;vpbnf&amp;gt;&amp;lt;Integer&amp;gt;&amp;lt;/vpbnf&amp;gt; rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Integer&amp;gt; :&lt;br /&gt;
      &amp;lt;Add_operation&amp;gt;-opt 0o &amp;lt;Oct_number&amp;gt;&lt;br /&gt;
      &amp;lt;Add_operation&amp;gt;-opt &amp;lt;Dec_number&amp;gt;&lt;br /&gt;
      &amp;lt;Add_operation&amp;gt;-opt 0x &amp;lt;Hex_number&amp;gt;&lt;br /&gt;
&amp;lt;Add_operation&amp;gt; :&lt;br /&gt;
      +&lt;br /&gt;
      -&lt;br /&gt;
&amp;lt;Oct_number&amp;gt; :&lt;br /&gt;
      &amp;lt;Oct_digit&amp;gt;-list&lt;br /&gt;
&amp;lt;Oct_digit&amp;gt; : one of&lt;br /&gt;
      0 1 2 3 4 5 6 7&lt;br /&gt;
&amp;lt;Dec_number&amp;gt; :&lt;br /&gt;
      &amp;lt;Dec_digit&amp;gt;-list&lt;br /&gt;
&amp;lt;Dec_digit&amp;gt; : one of&lt;br /&gt;
      &amp;lt;Oct_digit&amp;gt; 8 9&lt;br /&gt;
&amp;lt;Hex_number&amp;gt; :&lt;br /&gt;
      &amp;lt;Hex_digit&amp;gt;-list&lt;br /&gt;
&amp;lt;Hex_digit&amp;gt; : one of&lt;br /&gt;
      &amp;lt;Dec_digit&amp;gt; a b c d e f A B C D E F&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== integer64 ====&lt;br /&gt;
&lt;br /&gt;
64 bit signed integers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;integer64&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 8 bytes.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is from &amp;lt;vp&amp;gt;-2^63 = -9223372036854775808&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;2^63-1 = 9223372036854775807&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax for &amp;lt;vp&amp;gt;integer64&amp;lt;/vp&amp;gt; literal is the same as &amp;lt;vpbnf&amp;gt;&amp;lt;Integer&amp;gt;&amp;lt;/vpbnf&amp;gt; rule.&lt;br /&gt;
&lt;br /&gt;
The set of operations for &amp;lt;vp&amp;gt;integer64&amp;lt;/vp&amp;gt; is similar to the one for &amp;lt;vpbnf&amp;gt;&amp;lt;Integer&amp;gt;&amp;lt;/vpbnf&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== integerNative ====&lt;br /&gt;
&lt;br /&gt;
Signed integer number with platform size (32 bit in a 32 bit program; 64 bit in a 64 bit program).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;integerNative&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== unsigned ====&lt;br /&gt;
&lt;br /&gt;
32 bit unsigned integer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;unsigned&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 4 bytes. Arithmetic operations (&amp;lt;vp&amp;gt;+&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;-&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;/&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;*&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;^&amp;lt;/vp&amp;gt;), comparison, assignment, {{lang2|Built-in entities|Operators|div/2-&amp;gt;}}, {{lang2|Built-in entities|Operators|mod/2-&amp;gt;}}, {{lang2|Built-in entities|Operators|rem/2-&amp;gt;}}, and {{lang2|Built-in entities|Operators|quot/2-&amp;gt;}} operations are applied to values of this domain.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is from &amp;lt;vp&amp;gt;0&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;4294967295&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax for &amp;lt;vp&amp;gt;unsigned&amp;lt;/vp&amp;gt; number images is the same as for &amp;lt;vp&amp;gt;integer&amp;lt;/vp&amp;gt; numbers. The usage of minus sign (&amp;lt;vpbnf&amp;gt;&amp;lt;UnaryMinus&amp;gt;&amp;lt;/vpbnf&amp;gt;) is not allowed for an image of an &amp;lt;vp&amp;gt;unsigned&amp;lt;/vp&amp;gt; number.&lt;br /&gt;
&lt;br /&gt;
==== unsigned64 ====&lt;br /&gt;
&lt;br /&gt;
64 bit unsigned integer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;unsigned64&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 8 bytes.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is from &amp;lt;vp&amp;gt;0&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;2^64-1 = 18,446,744,073,709,551,615&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax for &amp;lt;vp&amp;gt;unsigned64&amp;lt;/vp&amp;gt; number images is the same as for &amp;lt;vp&amp;gt;integer64&amp;lt;/vp&amp;gt; numbers. The usage of minus sign (&amp;lt;vpbnf&amp;gt;&amp;lt;UnaryMinus&amp;gt;&amp;lt;/vpbnf&amp;gt;) is not allowed for an image of an &amp;lt;vp&amp;gt;unsigned64&amp;lt;/vp&amp;gt; number.&lt;br /&gt;
&lt;br /&gt;
The set of operations for &amp;lt;vp&amp;gt;unsigned64&amp;lt;/vp&amp;gt; is similar to the one for &amp;lt;vpbnf&amp;gt;&amp;lt;Unsigned&amp;gt;&amp;lt;/vpbnf&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== unsignedNative ====&lt;br /&gt;
&lt;br /&gt;
Unsigned integer number with platform size (32 bit in a 32 bit program; 64 bit in a 64 bit program).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;unsignedNative&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== real ====&lt;br /&gt;
&lt;br /&gt;
Float-pointing number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;real&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 8 bytes. This numerical real domain is introduced for the user&amp;#039;s convenience only. All arithmetic, comparison, and assignment operations are applied to values of &amp;lt;vp&amp;gt;real&amp;lt;/vp&amp;gt; domain.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is &amp;lt;vp&amp;gt;-1.7e+308&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;1.7e+308&amp;lt;/vp&amp;gt;. Values from integral domains are automatically converted to real numbers when necessary.&lt;br /&gt;
&lt;br /&gt;
The syntax for the floating-point number literal is determined by the &amp;lt;vpbnf&amp;gt;&amp;lt;Real&amp;gt;&amp;lt;/vpbnf&amp;gt; rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Real&amp;gt; :&lt;br /&gt;
      &amp;lt;Add_operation&amp;gt;-opt &amp;lt;Fraction&amp;gt; &amp;lt;Exponent&amp;gt;-opt&lt;br /&gt;
&amp;lt;Fraction&amp;gt; :&lt;br /&gt;
      &amp;lt;Dec_number&amp;gt; &amp;lt;Fractional_part&amp;gt;-opt&lt;br /&gt;
&amp;lt;Fractional_part&amp;gt; :&lt;br /&gt;
      . &amp;lt;Dec_number&amp;gt;&lt;br /&gt;
&amp;lt;Exponent&amp;gt; :&lt;br /&gt;
      &amp;lt;Exp&amp;gt; &amp;lt;Add_operation&amp;gt;-opt &amp;lt;Dec_number&amp;gt;&lt;br /&gt;
&amp;lt;Exp&amp;gt; :&lt;br /&gt;
      e&lt;br /&gt;
      E&lt;br /&gt;
&amp;lt;Add_operation&amp;gt; :&lt;br /&gt;
      +&lt;br /&gt;
      -&lt;br /&gt;
&amp;lt;Dec_number&amp;gt; :&lt;br /&gt;
      &amp;lt;Dec_digit&amp;gt;-list&lt;br /&gt;
&amp;lt;Dec_digit&amp;gt; : one of&lt;br /&gt;
      0 1 2 3 4 5 6 7 8 9&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== real32 ====&lt;br /&gt;
&lt;br /&gt;
Float-pointing number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;real32&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 4 bytes. This numerical &amp;lt;vp&amp;gt;real32&amp;lt;/vp&amp;gt; domain is introduced for the user&amp;#039;s convenience only. All arithmetic, comparison, and assignment operations can be applied to values of &amp;lt;vp&amp;gt;real32&amp;lt;/vp&amp;gt; domain.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is &amp;lt;vp&amp;gt;-3.4e+38&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;3.4e+38&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax of real32 literals is the same as &amp;lt;vp&amp;gt;real&amp;lt;/vp&amp;gt; lietrals.&lt;br /&gt;
&lt;br /&gt;
==== pointer ====&lt;br /&gt;
&lt;br /&gt;
A pointer to a memory address.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;pointer&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A pointer directly corresponds to memory addresses. Only the equality operation can be applied to the values of this domain. There is a built-in &amp;#039;&amp;#039;&amp;#039;null&amp;#039;&amp;#039;&amp;#039; constant for this type&lt;br /&gt;
&lt;br /&gt;
==== handle ====&lt;br /&gt;
&lt;br /&gt;
A handle is used for Windows API function call. Values of this domain has the same size as a pointer (i.e. 4 on 32bit platfor and 8 on 64bit platform).&lt;br /&gt;
&lt;br /&gt;
There are no operations for this domain and cannot be converted (except uncheckedConvert) to/from other domains.&lt;br /&gt;
&lt;br /&gt;
There is a built-in [[#nullHandle|nullHandle]] and [[#invalidHandle|invalidHandle]] constant  for this type&lt;br /&gt;
&lt;br /&gt;
==== boolean ====&lt;br /&gt;
&lt;br /&gt;
Boolean values.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;boolean&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This domain is introduced for the user convenience only. It is treated as usual compound domain with the following definition:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;domains&lt;br /&gt;
   boolean = false(); true().&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== factDB ====&lt;br /&gt;
&lt;br /&gt;
Descriptors of named internal databases.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;factDB&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This domain has the following hidden meta-declaration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;domains&lt;br /&gt;
   factDB = struct @factdb( named_internal_database_domain, object ).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All user-defined names of facts sections are the constants of this domain. The compiler automatically builds the corresponding compound terms from such constants whenever it&amp;#039;s in need. At the runtime the 1st field of this structure contains the address of the corresponding domain descriptor and the 2nd field contains either zero (for class facts sections) or pointer to an object (i.e. &amp;lt;vp&amp;gt;This&amp;lt;/vp&amp;gt;, for object facts sections).&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{LanguageReferenceSubarticle|Built-in entities/Domains}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Joachim Tilsted Kristensen</name></author>
	</entry>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Domains&amp;diff=4757</id>
		<title>Language Reference/Built-in entities/Domains</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Domains&amp;diff=4757"/>
		<updated>2020-12-19T16:18:02Z</updated>

		<summary type="html">&lt;p&gt;Joachim Tilsted Kristensen: /* binaryNonAtomic */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|{{prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|[[#any|any]]&lt;br /&gt;
|Universal term type.&lt;br /&gt;
|-&lt;br /&gt;
|[[#char|char]]&lt;br /&gt;
|Wide (two-bytes) character.&lt;br /&gt;
|-&lt;br /&gt;
|[[#string|string]]&lt;br /&gt;
|Wide zero-terminated sequence of wide characters.&lt;br /&gt;
|-&lt;br /&gt;
|[[#string8|string8]]&lt;br /&gt;
|Zero-terminated sequence of ASCII (one-byte) characters.&lt;br /&gt;
|-&lt;br /&gt;
|[[#symbol|symbol]]&lt;br /&gt;
|Wide zero-terminated sequence of wide characters.&lt;br /&gt;
|-&lt;br /&gt;
|[[#binary|binary]]&lt;br /&gt;
|Sequence of bytes.&lt;br /&gt;
|-&lt;br /&gt;
|[[#binaryNonAtomic|binaryNonAtomic]]&lt;br /&gt;
|Sequence of bytes.&lt;br /&gt;
|-&lt;br /&gt;
|[[#integer|integer]]&lt;br /&gt;
|32 bit signed integer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#integer64|integer64]]&lt;br /&gt;
|64 bit signed integer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#integerNative|integerNative]]&lt;br /&gt;
|Signed integer with platform size (32 bit in a 32 bit program; 64 bit in a 64 bit program).&lt;br /&gt;
|-&lt;br /&gt;
|[[#unsigned|unsigned]]&lt;br /&gt;
|32 bit unsigned integer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#unsigned64|unsigned64]]&lt;br /&gt;
|64 bit unsigned integer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#unsignedNative|unsignedNative]]&lt;br /&gt;
|Unsigned integer with platform size (32 bit in a 32 bit program; 64 bit in a 64 bit program).&lt;br /&gt;
|-&lt;br /&gt;
|[[#real|real]]&lt;br /&gt;
|Float-pointing number.&lt;br /&gt;
|-&lt;br /&gt;
|[[#real32|real32]]&lt;br /&gt;
|Float-pointing number.&lt;br /&gt;
|-&lt;br /&gt;
|[[#pointer|pointer]]&lt;br /&gt;
|pointer to a memory address.&lt;br /&gt;
|-&lt;br /&gt;
|[[#handle|handle]]&lt;br /&gt;
|a handle (e.g. native file and windows handles).&lt;br /&gt;
|-&lt;br /&gt;
|[[#boolean|boolean]]&lt;br /&gt;
|Boolean values.&lt;br /&gt;
|-&lt;br /&gt;
|[[#factDB|factDB]]&lt;br /&gt;
|Descriptors of named internal databases.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compareResult|compareResult]]&lt;br /&gt;
|Values of comparison result.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== any ====&lt;br /&gt;
&lt;br /&gt;
Universal term type.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;any&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The values of this domain are any terms. Such a value contains the reference to the term type library and a term itself.&lt;br /&gt;
&lt;br /&gt;
==== char ====&lt;br /&gt;
&lt;br /&gt;
Wide character.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;char&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The values of this domain are UNICODE characters. Implemented as 2 unsigned bytes.&lt;br /&gt;
&lt;br /&gt;
Only assignment and comparison (in the lexicographical sense) operations are applied to the values of this domain. The image of a character has the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Char_image&amp;gt; :&lt;br /&gt;
      &amp;#039; Char_value &amp;#039;&lt;br /&gt;
&amp;lt;Char_value&amp;gt; :&lt;br /&gt;
      &amp;lt;Letter&amp;gt;&lt;br /&gt;
      &amp;lt;Digit&amp;gt;&lt;br /&gt;
      &amp;lt;Graphical_symbol&amp;gt;&lt;br /&gt;
      \ &amp;lt;Escape_seq&amp;gt;&lt;br /&gt;
&amp;lt;Escape_seq&amp;gt;:&lt;br /&gt;
      t&lt;br /&gt;
      n&lt;br /&gt;
      r&lt;br /&gt;
      \&lt;br /&gt;
      &amp;#039;&lt;br /&gt;
      &amp;quot;&lt;br /&gt;
      u &amp;lt;HHHH&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the syntax above &amp;lt;vpbnf&amp;gt;&amp;lt;HHHH&amp;gt;&amp;lt;/vpbnf&amp;gt; correspond to 4 hexadecimal digits. Also, the backslash symbol and the single quote can be represented by an escape-sequence only.&lt;br /&gt;
&lt;br /&gt;
==== compareResult ====&lt;br /&gt;
&lt;br /&gt;
A built-in domain that represents the result of a comparison. For instance, the built-in procedure {{lang2|Built-in entities|compare|compare/2-&amp;gt;}} has &amp;quot;compareResult&amp;quot; as the domain of its result.&lt;br /&gt;
&amp;lt;vip&amp;gt;domains&lt;br /&gt;
   compareResult = less; equal; greater.&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== string ====&lt;br /&gt;
&lt;br /&gt;
Wide zero terminated sequence of wide characters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;string&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A string is a sequence of UNICODE characters. It&amp;#039;s implemented as a pointer to the wide zero-terminated array of wide characters. Only assignment and comparison (in the lexicographical sense) operations are applied to values of this domain.&lt;br /&gt;
&lt;br /&gt;
In source code a string literal can be specified as a set of sequences of characters surrounded by the double quotes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;StringLiteral&amp;gt;:&lt;br /&gt;
   &amp;lt;StringLiteralPart&amp;gt;-list&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;StringLiteralPart&amp;gt; :&lt;br /&gt;
   @&amp;quot; AnyCharacter-list-opt &amp;quot;&lt;br /&gt;
   &amp;quot; CharacterValue-list-opt &amp;quot;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A string literal consists of one or more &amp;lt;vpbnf&amp;gt;&amp;lt;StringLiteralPart&amp;gt;&amp;lt;/vpbnf&amp;gt;&amp;#039;s, which are concatenated. &amp;lt;vpbnf&amp;gt;&amp;lt;StringLiteralPart&amp;gt;&amp;lt;/vpbnf&amp;gt;&amp;#039;s starting with &amp;lt;vp&amp;gt;@&amp;lt;/vp&amp;gt; does not use escape sequences, whereas &amp;lt;vpbnf&amp;gt;&amp;lt;StringLiteralPart&amp;gt;&amp;lt;/vpbnf&amp;gt;&amp;#039;s without &amp;lt;vp&amp;gt;@&amp;lt;/vp&amp;gt; uses the following escape sequences:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;vp&amp;gt;\\&amp;lt;/vp&amp;gt; representing &amp;lt;vp&amp;gt;\&amp;lt;/vp&amp;gt;&lt;br /&gt;
*&amp;lt;vp&amp;gt;\t&amp;lt;/vp&amp;gt; representing Tab-character&lt;br /&gt;
*&amp;lt;vp&amp;gt;\n&amp;lt;/vp&amp;gt; representing newline-character&lt;br /&gt;
*&amp;lt;vp&amp;gt;\r&amp;lt;/vp&amp;gt; representing carriage return&lt;br /&gt;
*&amp;lt;vp&amp;gt;\&amp;#039;&amp;lt;/vp&amp;gt; representing single quote&lt;br /&gt;
*&amp;lt;vp&amp;gt;\&amp;quot;&amp;lt;/vp&amp;gt; representing double quote&lt;br /&gt;
*&amp;lt;vp&amp;gt;\u&amp;lt;/vp&amp;gt; followed by exactly four &amp;lt;vpbnf&amp;gt;&amp;lt;HexadecimalDigit&amp;gt;&amp;lt;/vpbnf&amp;gt;&amp;#039;s representing the Unicode character corresponding to the digits.&lt;br /&gt;
&lt;br /&gt;
The double quotes in the string can be represented by the escape-sequence only (the single quote can be represented both with an escape-sequence and a graphical symbol).&lt;br /&gt;
&lt;br /&gt;
==== string8 ====&lt;br /&gt;
&lt;br /&gt;
A built-in domain who&amp;#039;s elements are sequences of (one-byte) ASCII-characters. It is implemented as a pointer to the zero terminated array of ASCII characters. Only assignment and comparison for equality (in the lexicographical sense) operations are applied to the values of this domain. Currently no literals are allowed for this domain.&lt;br /&gt;
&lt;br /&gt;
==== symbol ====&lt;br /&gt;
&lt;br /&gt;
Wide zero terminated sequence of wide characters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;symbol&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similar to a string, a symbol is also a sequence of the UNICODE characters. It&amp;#039;s implemented as a pointer to an entry in a symbol table that contains strings. The operations that can be applied to symbols are the same as for strings.&lt;br /&gt;
&lt;br /&gt;
The image of a symbol is represented with a &amp;#039;&amp;#039;&amp;lt;string_literal&amp;gt;&amp;#039;&amp;#039; (any string surrounded by the double quotes).&lt;br /&gt;
&lt;br /&gt;
Symbols and strings are largely interchangeable but they are stored differently. Symbols are kept in a look-up table and their addresses, rather than the symbols themselves, are stored to represent objects. This means that symbols can be matched very quickly and, if a symbol occurs repeatedly in a program, it can be stored very compactly. Strings are not kept in a look-up table. Visual Prolog examines strings character-by-character whenever they are to be matched.&lt;br /&gt;
&lt;br /&gt;
==== binary ====&lt;br /&gt;
&lt;br /&gt;
Sequence of bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;binary&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain are used for holding binary data. A binary value is implemented as a pointer to the sequence of bytes that represents the contents of a binary term.&lt;br /&gt;
&lt;br /&gt;
The length of a binary term is situated in the &amp;#039;&amp;#039;&amp;#039;4 bytes&amp;#039;&amp;#039;&amp;#039; immediately preceding this sequence of bytes. The 4 bytes contains:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;TotalNumberOfBytesOccupiedByBinary = ByteLen + 4 &amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;vp&amp;gt;ByteLen&amp;lt;/vp&amp;gt; - is the length of the binary term and 4 is number of bytes occupied by size field.&lt;br /&gt;
&lt;br /&gt;
Only assignment and comparison operations are applied to values of &amp;#039;&amp;#039;&amp;#039;binary domain&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Two binary terms are compared in the following way:&lt;br /&gt;
&lt;br /&gt;
*If they are of different sizes, the bigger is considered larger.&lt;br /&gt;
*Otherwise, they are compared byte by byte, as unsigned values. Comparison stops when two differing bytes are found and the result of their comparison is the result of the comparison of the binary terms. Two binary terms are equal if they have the same sizes and all bytes are equal.&lt;br /&gt;
&lt;br /&gt;
The text syntax for binary images is determined by the &amp;lt;vpbnf&amp;gt;&amp;lt;Binary&amp;gt;&amp;lt;/vpbnf&amp;gt; rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Binary&amp;gt; :&lt;br /&gt;
       $ [ &amp;lt;Byte_value&amp;gt;-comma-sep-list-opt ]&lt;br /&gt;
&amp;lt;Byte_value&amp;gt; :&lt;br /&gt;
      &amp;lt;Expression&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each &amp;#039;&amp;#039;expression&amp;#039;&amp;#039; should be calculate on compiling time and its value should be in the range from &amp;lt;vp&amp;gt;0&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;255&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== binaryNonAtomic ====&lt;br /&gt;
&lt;br /&gt;
Sequence of bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;binaryNonAtomic&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Same as [[#binary|binary]], but can contain pointers because it is scanned by the garbage collector.&lt;br /&gt;
&lt;br /&gt;
==== integer ====&lt;br /&gt;
&lt;br /&gt;
32 bit signed integer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;integer&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 4 bytes. Arithmetic operations (&amp;lt;vp&amp;gt;+&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;-&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;/&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;*&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;^&amp;lt;/vp&amp;gt;), comparison, assignment, {{lang2|Built-in entities|Operators|div/2-&amp;gt;}}, {{lang2|Built-in entities|Operators|mod/2-&amp;gt;}}, {{lang2|Built-in entities|Operators|quot/2-&amp;gt;}}, and {{lang2|Built-in entities|Operators|rem/2-&amp;gt;}} operations are applied to values of this domain.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is from &amp;lt;vp&amp;gt;-2147483648&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;2147483647&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax for the &amp;lt;vp&amp;gt;integer&amp;lt;/vp&amp;gt; literal is determined by the &amp;lt;vpbnf&amp;gt;&amp;lt;Integer&amp;gt;&amp;lt;/vpbnf&amp;gt; rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Integer&amp;gt; :&lt;br /&gt;
      &amp;lt;Add_operation&amp;gt;-opt 0o &amp;lt;Oct_number&amp;gt;&lt;br /&gt;
      &amp;lt;Add_operation&amp;gt;-opt &amp;lt;Dec_number&amp;gt;&lt;br /&gt;
      &amp;lt;Add_operation&amp;gt;-opt 0x &amp;lt;Hex_number&amp;gt;&lt;br /&gt;
&amp;lt;Add_operation&amp;gt; :&lt;br /&gt;
      +&lt;br /&gt;
      -&lt;br /&gt;
&amp;lt;Oct_number&amp;gt; :&lt;br /&gt;
      &amp;lt;Oct_digit&amp;gt;-list&lt;br /&gt;
&amp;lt;Oct_digit&amp;gt; : one of&lt;br /&gt;
      0 1 2 3 4 5 6 7&lt;br /&gt;
&amp;lt;Dec_number&amp;gt; :&lt;br /&gt;
      &amp;lt;Dec_digit&amp;gt;-list&lt;br /&gt;
&amp;lt;Dec_digit&amp;gt; : one of&lt;br /&gt;
      &amp;lt;Oct_digit&amp;gt; 8 9&lt;br /&gt;
&amp;lt;Hex_number&amp;gt; :&lt;br /&gt;
      &amp;lt;Hex_digit&amp;gt;-list&lt;br /&gt;
&amp;lt;Hex_digit&amp;gt; : one of&lt;br /&gt;
      &amp;lt;Dec_digit&amp;gt; a b c d e f A B C D E F&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== integer64 ====&lt;br /&gt;
&lt;br /&gt;
64 bit signed integer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;integer64&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 8 bytes.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is from &amp;lt;vp&amp;gt;-2^63 = -9223372036854775808&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;2^63-1 = 9223372036854775807&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax for &amp;lt;vp&amp;gt;integer64&amp;lt;/vp&amp;gt; literal is the same as &amp;lt;vpbnf&amp;gt;&amp;lt;Integer&amp;gt;&amp;lt;/vpbnf&amp;gt; rule.&lt;br /&gt;
&lt;br /&gt;
The set of operations for &amp;lt;vp&amp;gt;integer64&amp;lt;/vp&amp;gt; is similar to the one for &amp;lt;vpbnf&amp;gt;&amp;lt;Integer&amp;gt;&amp;lt;/vpbnf&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== integerNative ====&lt;br /&gt;
&lt;br /&gt;
Signed integer number with platform size (32 bit in a 32 bit program; 64 bit in a 64 bit program).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;integerNative&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== unsigned ====&lt;br /&gt;
&lt;br /&gt;
32 bit unsigned integer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;unsigned&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 4 bytes. Arithmetic operations (&amp;lt;vp&amp;gt;+&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;-&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;/&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;*&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;^&amp;lt;/vp&amp;gt;), comparison, assignment, {{lang2|Built-in entities|Operators|div/2-&amp;gt;}}, {{lang2|Built-in entities|Operators|mod/2-&amp;gt;}}, {{lang2|Built-in entities|Operators|rem/2-&amp;gt;}}, and {{lang2|Built-in entities|Operators|quot/2-&amp;gt;}} operations are applied to values of this domain.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is from &amp;lt;vp&amp;gt;0&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;4294967295&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax for &amp;lt;vp&amp;gt;unsigned&amp;lt;/vp&amp;gt; number images is the same as for &amp;lt;vp&amp;gt;integer&amp;lt;/vp&amp;gt; numbers. The usage of minus sign (&amp;lt;vpbnf&amp;gt;&amp;lt;UnaryMinus&amp;gt;&amp;lt;/vpbnf&amp;gt;) is not allowed for an image of an &amp;lt;vp&amp;gt;unsigned&amp;lt;/vp&amp;gt; number.&lt;br /&gt;
&lt;br /&gt;
==== unsigned64 ====&lt;br /&gt;
&lt;br /&gt;
64 bit unsigned integer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;unsigned64&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 8 bytes.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is from &amp;lt;vp&amp;gt;0&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;2^64-1 = 18,446,744,073,709,551,615&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax for &amp;lt;vp&amp;gt;unsigned64&amp;lt;/vp&amp;gt; number images is the same as for &amp;lt;vp&amp;gt;integer64&amp;lt;/vp&amp;gt; numbers. The usage of minus sign (&amp;lt;vpbnf&amp;gt;&amp;lt;UnaryMinus&amp;gt;&amp;lt;/vpbnf&amp;gt;) is not allowed for an image of an &amp;lt;vp&amp;gt;unsigned64&amp;lt;/vp&amp;gt; number.&lt;br /&gt;
&lt;br /&gt;
The set of operations for &amp;lt;vp&amp;gt;unsigned64&amp;lt;/vp&amp;gt; is similar to the one for &amp;lt;vpbnf&amp;gt;&amp;lt;Unsigned&amp;gt;&amp;lt;/vpbnf&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== unsignedNative ====&lt;br /&gt;
&lt;br /&gt;
Unsigned integer number with platform size (32 bit in a 32 bit program; 64 bit in a 64 bit program).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;unsignedNative&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== real ====&lt;br /&gt;
&lt;br /&gt;
Float-pointing number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;real&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 8 bytes. This numerical real domain is introduced for the user&amp;#039;s convenience only. All arithmetic, comparison, and assignment operations are applied to values of &amp;lt;vp&amp;gt;real&amp;lt;/vp&amp;gt; domain.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is &amp;lt;vp&amp;gt;-1.7e+308&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;1.7e+308&amp;lt;/vp&amp;gt;. Values from integral domains are automatically converted to real numbers when necessary.&lt;br /&gt;
&lt;br /&gt;
The syntax for the floating-point number literal is determined by the &amp;lt;vpbnf&amp;gt;&amp;lt;Real&amp;gt;&amp;lt;/vpbnf&amp;gt; rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Real&amp;gt; :&lt;br /&gt;
      &amp;lt;Add_operation&amp;gt;-opt &amp;lt;Fraction&amp;gt; &amp;lt;Exponent&amp;gt;-opt&lt;br /&gt;
&amp;lt;Fraction&amp;gt; :&lt;br /&gt;
      &amp;lt;Dec_number&amp;gt; &amp;lt;Fractional_part&amp;gt;-opt&lt;br /&gt;
&amp;lt;Fractional_part&amp;gt; :&lt;br /&gt;
      . &amp;lt;Dec_number&amp;gt;&lt;br /&gt;
&amp;lt;Exponent&amp;gt; :&lt;br /&gt;
      &amp;lt;Exp&amp;gt; &amp;lt;Add_operation&amp;gt;-opt &amp;lt;Dec_number&amp;gt;&lt;br /&gt;
&amp;lt;Exp&amp;gt; :&lt;br /&gt;
      e&lt;br /&gt;
      E&lt;br /&gt;
&amp;lt;Add_operation&amp;gt; :&lt;br /&gt;
      +&lt;br /&gt;
      -&lt;br /&gt;
&amp;lt;Dec_number&amp;gt; :&lt;br /&gt;
      &amp;lt;Dec_digit&amp;gt;-list&lt;br /&gt;
&amp;lt;Dec_digit&amp;gt; : one of&lt;br /&gt;
      0 1 2 3 4 5 6 7 8 9&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== real32 ====&lt;br /&gt;
&lt;br /&gt;
Float-pointing number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;real32&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 4 bytes. This numerical &amp;lt;vp&amp;gt;real32&amp;lt;/vp&amp;gt; domain is introduced for the user&amp;#039;s convenience only. All arithmetic, comparison, and assignment operations can be applied to values of &amp;lt;vp&amp;gt;real32&amp;lt;/vp&amp;gt; domain.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is &amp;lt;vp&amp;gt;-3.4e+38&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;3.4e+38&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax of real32 literals is the same as &amp;lt;vp&amp;gt;real&amp;lt;/vp&amp;gt; lietrals.&lt;br /&gt;
&lt;br /&gt;
==== pointer ====&lt;br /&gt;
&lt;br /&gt;
A pointer to a memory address.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;pointer&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A pointer directly corresponds to memory addresses. Only the equality operation can be applied to the values of this domain. There is a built-in &amp;#039;&amp;#039;&amp;#039;null&amp;#039;&amp;#039;&amp;#039; constant for this type&lt;br /&gt;
&lt;br /&gt;
==== handle ====&lt;br /&gt;
&lt;br /&gt;
A handle is used for Windows API function call. Values of this domain has the same size as a pointer (i.e. 4 on 32bit platfor and 8 on 64bit platform).&lt;br /&gt;
&lt;br /&gt;
There are no operations for this domain and cannot be converted (except uncheckedConvert) to/from other domains.&lt;br /&gt;
&lt;br /&gt;
There is a built-in [[#nullHandle|nullHandle]] and [[#invalidHandle|invalidHandle]] constant  for this type&lt;br /&gt;
&lt;br /&gt;
==== boolean ====&lt;br /&gt;
&lt;br /&gt;
Boolean values.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;boolean&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This domain is introduced for the user convenience only. It is treated as usual compound domain with the following definition:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;domains&lt;br /&gt;
   boolean = false(); true().&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== factDB ====&lt;br /&gt;
&lt;br /&gt;
Descriptors of named internal databases.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;factDB&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This domain has the following hidden meta-declaration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;domains&lt;br /&gt;
   factDB = struct @factdb( named_internal_database_domain, object ).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All user-defined names of facts sections are the constants of this domain. The compiler automatically builds the corresponding compound terms from such constants whenever it&amp;#039;s in need. At the runtime the 1st field of this structure contains the address of the corresponding domain descriptor and the 2nd field contains either zero (for class facts sections) or pointer to an object (i.e. &amp;lt;vp&amp;gt;This&amp;lt;/vp&amp;gt;, for object facts sections).&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{LanguageReferenceSubarticle|Built-in entities/Domains}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Joachim Tilsted Kristensen</name></author>
	</entry>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Domains&amp;diff=4756</id>
		<title>Language Reference/Built-in entities/Domains</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Domains&amp;diff=4756"/>
		<updated>2020-12-19T16:17:46Z</updated>

		<summary type="html">&lt;p&gt;Joachim Tilsted Kristensen: /* binary */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|{{prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|[[#any|any]]&lt;br /&gt;
|Universal term type.&lt;br /&gt;
|-&lt;br /&gt;
|[[#char|char]]&lt;br /&gt;
|Wide (two-bytes) character.&lt;br /&gt;
|-&lt;br /&gt;
|[[#string|string]]&lt;br /&gt;
|Wide zero-terminated sequence of wide characters.&lt;br /&gt;
|-&lt;br /&gt;
|[[#string8|string8]]&lt;br /&gt;
|Zero-terminated sequence of ASCII (one-byte) characters.&lt;br /&gt;
|-&lt;br /&gt;
|[[#symbol|symbol]]&lt;br /&gt;
|Wide zero-terminated sequence of wide characters.&lt;br /&gt;
|-&lt;br /&gt;
|[[#binary|binary]]&lt;br /&gt;
|Sequence of bytes.&lt;br /&gt;
|-&lt;br /&gt;
|[[#binaryNonAtomic|binaryNonAtomic]]&lt;br /&gt;
|Sequence of bytes.&lt;br /&gt;
|-&lt;br /&gt;
|[[#integer|integer]]&lt;br /&gt;
|32 bit signed integer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#integer64|integer64]]&lt;br /&gt;
|64 bit signed integer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#integerNative|integerNative]]&lt;br /&gt;
|Signed integer with platform size (32 bit in a 32 bit program; 64 bit in a 64 bit program).&lt;br /&gt;
|-&lt;br /&gt;
|[[#unsigned|unsigned]]&lt;br /&gt;
|32 bit unsigned integer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#unsigned64|unsigned64]]&lt;br /&gt;
|64 bit unsigned integer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#unsignedNative|unsignedNative]]&lt;br /&gt;
|Unsigned integer with platform size (32 bit in a 32 bit program; 64 bit in a 64 bit program).&lt;br /&gt;
|-&lt;br /&gt;
|[[#real|real]]&lt;br /&gt;
|Float-pointing number.&lt;br /&gt;
|-&lt;br /&gt;
|[[#real32|real32]]&lt;br /&gt;
|Float-pointing number.&lt;br /&gt;
|-&lt;br /&gt;
|[[#pointer|pointer]]&lt;br /&gt;
|pointer to a memory address.&lt;br /&gt;
|-&lt;br /&gt;
|[[#handle|handle]]&lt;br /&gt;
|a handle (e.g. native file and windows handles).&lt;br /&gt;
|-&lt;br /&gt;
|[[#boolean|boolean]]&lt;br /&gt;
|Boolean values.&lt;br /&gt;
|-&lt;br /&gt;
|[[#factDB|factDB]]&lt;br /&gt;
|Descriptors of named internal databases.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compareResult|compareResult]]&lt;br /&gt;
|Values of comparison result.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== any ====&lt;br /&gt;
&lt;br /&gt;
Universal term type.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;any&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The values of this domain are any terms. Such a value contains the reference to the term type library and a term itself.&lt;br /&gt;
&lt;br /&gt;
==== char ====&lt;br /&gt;
&lt;br /&gt;
Wide character.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;char&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The values of this domain are UNICODE characters. Implemented as 2 unsigned bytes.&lt;br /&gt;
&lt;br /&gt;
Only assignment and comparison (in the lexicographical sense) operations are applied to the values of this domain. The image of a character has the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Char_image&amp;gt; :&lt;br /&gt;
      &amp;#039; Char_value &amp;#039;&lt;br /&gt;
&amp;lt;Char_value&amp;gt; :&lt;br /&gt;
      &amp;lt;Letter&amp;gt;&lt;br /&gt;
      &amp;lt;Digit&amp;gt;&lt;br /&gt;
      &amp;lt;Graphical_symbol&amp;gt;&lt;br /&gt;
      \ &amp;lt;Escape_seq&amp;gt;&lt;br /&gt;
&amp;lt;Escape_seq&amp;gt;:&lt;br /&gt;
      t&lt;br /&gt;
      n&lt;br /&gt;
      r&lt;br /&gt;
      \&lt;br /&gt;
      &amp;#039;&lt;br /&gt;
      &amp;quot;&lt;br /&gt;
      u &amp;lt;HHHH&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the syntax above &amp;lt;vpbnf&amp;gt;&amp;lt;HHHH&amp;gt;&amp;lt;/vpbnf&amp;gt; correspond to 4 hexadecimal digits. Also, the backslash symbol and the single quote can be represented by an escape-sequence only.&lt;br /&gt;
&lt;br /&gt;
==== compareResult ====&lt;br /&gt;
&lt;br /&gt;
A built-in domain that represents the result of a comparison. For instance, the built-in procedure {{lang2|Built-in entities|compare|compare/2-&amp;gt;}} has &amp;quot;compareResult&amp;quot; as the domain of its result.&lt;br /&gt;
&amp;lt;vip&amp;gt;domains&lt;br /&gt;
   compareResult = less; equal; greater.&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== string ====&lt;br /&gt;
&lt;br /&gt;
Wide zero terminated sequence of wide characters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;string&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A string is a sequence of UNICODE characters. It&amp;#039;s implemented as a pointer to the wide zero-terminated array of wide characters. Only assignment and comparison (in the lexicographical sense) operations are applied to values of this domain.&lt;br /&gt;
&lt;br /&gt;
In source code a string literal can be specified as a set of sequences of characters surrounded by the double quotes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;StringLiteral&amp;gt;:&lt;br /&gt;
   &amp;lt;StringLiteralPart&amp;gt;-list&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;StringLiteralPart&amp;gt; :&lt;br /&gt;
   @&amp;quot; AnyCharacter-list-opt &amp;quot;&lt;br /&gt;
   &amp;quot; CharacterValue-list-opt &amp;quot;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A string literal consists of one or more &amp;lt;vpbnf&amp;gt;&amp;lt;StringLiteralPart&amp;gt;&amp;lt;/vpbnf&amp;gt;&amp;#039;s, which are concatenated. &amp;lt;vpbnf&amp;gt;&amp;lt;StringLiteralPart&amp;gt;&amp;lt;/vpbnf&amp;gt;&amp;#039;s starting with &amp;lt;vp&amp;gt;@&amp;lt;/vp&amp;gt; does not use escape sequences, whereas &amp;lt;vpbnf&amp;gt;&amp;lt;StringLiteralPart&amp;gt;&amp;lt;/vpbnf&amp;gt;&amp;#039;s without &amp;lt;vp&amp;gt;@&amp;lt;/vp&amp;gt; uses the following escape sequences:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;vp&amp;gt;\\&amp;lt;/vp&amp;gt; representing &amp;lt;vp&amp;gt;\&amp;lt;/vp&amp;gt;&lt;br /&gt;
*&amp;lt;vp&amp;gt;\t&amp;lt;/vp&amp;gt; representing Tab-character&lt;br /&gt;
*&amp;lt;vp&amp;gt;\n&amp;lt;/vp&amp;gt; representing newline-character&lt;br /&gt;
*&amp;lt;vp&amp;gt;\r&amp;lt;/vp&amp;gt; representing carriage return&lt;br /&gt;
*&amp;lt;vp&amp;gt;\&amp;#039;&amp;lt;/vp&amp;gt; representing single quote&lt;br /&gt;
*&amp;lt;vp&amp;gt;\&amp;quot;&amp;lt;/vp&amp;gt; representing double quote&lt;br /&gt;
*&amp;lt;vp&amp;gt;\u&amp;lt;/vp&amp;gt; followed by exactly four &amp;lt;vpbnf&amp;gt;&amp;lt;HexadecimalDigit&amp;gt;&amp;lt;/vpbnf&amp;gt;&amp;#039;s representing the Unicode character corresponding to the digits.&lt;br /&gt;
&lt;br /&gt;
The double quotes in the string can be represented by the escape-sequence only (the single quote can be represented both with an escape-sequence and a graphical symbol).&lt;br /&gt;
&lt;br /&gt;
==== string8 ====&lt;br /&gt;
&lt;br /&gt;
A built-in domain who&amp;#039;s elements are sequences of (one-byte) ASCII-characters. It is implemented as a pointer to the zero terminated array of ASCII characters. Only assignment and comparison for equality (in the lexicographical sense) operations are applied to the values of this domain. Currently no literals are allowed for this domain.&lt;br /&gt;
&lt;br /&gt;
==== symbol ====&lt;br /&gt;
&lt;br /&gt;
Wide zero terminated sequence of wide characters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;symbol&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similar to a string, a symbol is also a sequence of the UNICODE characters. It&amp;#039;s implemented as a pointer to an entry in a symbol table that contains strings. The operations that can be applied to symbols are the same as for strings.&lt;br /&gt;
&lt;br /&gt;
The image of a symbol is represented with a &amp;#039;&amp;#039;&amp;lt;string_literal&amp;gt;&amp;#039;&amp;#039; (any string surrounded by the double quotes).&lt;br /&gt;
&lt;br /&gt;
Symbols and strings are largely interchangeable but they are stored differently. Symbols are kept in a look-up table and their addresses, rather than the symbols themselves, are stored to represent objects. This means that symbols can be matched very quickly and, if a symbol occurs repeatedly in a program, it can be stored very compactly. Strings are not kept in a look-up table. Visual Prolog examines strings character-by-character whenever they are to be matched.&lt;br /&gt;
&lt;br /&gt;
==== binary ====&lt;br /&gt;
&lt;br /&gt;
Sequence of bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;binary&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain are used for holding binary data. A binary value is implemented as a pointer to the sequence of bytes that represents the contents of a binary term.&lt;br /&gt;
&lt;br /&gt;
The length of a binary term is situated in the &amp;#039;&amp;#039;&amp;#039;4 bytes&amp;#039;&amp;#039;&amp;#039; immediately preceding this sequence of bytes. The 4 bytes contains:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;TotalNumberOfBytesOccupiedByBinary = ByteLen + 4 &amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;vp&amp;gt;ByteLen&amp;lt;/vp&amp;gt; - is the length of the binary term and 4 is number of bytes occupied by size field.&lt;br /&gt;
&lt;br /&gt;
Only assignment and comparison operations are applied to values of &amp;#039;&amp;#039;&amp;#039;binary domain&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Two binary terms are compared in the following way:&lt;br /&gt;
&lt;br /&gt;
*If they are of different sizes, the bigger is considered larger.&lt;br /&gt;
*Otherwise, they are compared byte by byte, as unsigned values. Comparison stops when two differing bytes are found and the result of their comparison is the result of the comparison of the binary terms. Two binary terms are equal if they have the same sizes and all bytes are equal.&lt;br /&gt;
&lt;br /&gt;
The text syntax for binary images is determined by the &amp;lt;vpbnf&amp;gt;&amp;lt;Binary&amp;gt;&amp;lt;/vpbnf&amp;gt; rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Binary&amp;gt; :&lt;br /&gt;
       $ [ &amp;lt;Byte_value&amp;gt;-comma-sep-list-opt ]&lt;br /&gt;
&amp;lt;Byte_value&amp;gt; :&lt;br /&gt;
      &amp;lt;Expression&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each &amp;#039;&amp;#039;expression&amp;#039;&amp;#039; should be calculate on compiling time and its value should be in the range from &amp;lt;vp&amp;gt;0&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;255&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== binaryNonAtomic ====&lt;br /&gt;
&lt;br /&gt;
Sequence of N bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;binaryNonAtomic&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Same as [[#binary|binary]], but can contain pointers because it is scanned by the garbage collector.&lt;br /&gt;
&lt;br /&gt;
==== integer ====&lt;br /&gt;
&lt;br /&gt;
32 bit signed integer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;integer&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 4 bytes. Arithmetic operations (&amp;lt;vp&amp;gt;+&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;-&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;/&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;*&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;^&amp;lt;/vp&amp;gt;), comparison, assignment, {{lang2|Built-in entities|Operators|div/2-&amp;gt;}}, {{lang2|Built-in entities|Operators|mod/2-&amp;gt;}}, {{lang2|Built-in entities|Operators|quot/2-&amp;gt;}}, and {{lang2|Built-in entities|Operators|rem/2-&amp;gt;}} operations are applied to values of this domain.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is from &amp;lt;vp&amp;gt;-2147483648&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;2147483647&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax for the &amp;lt;vp&amp;gt;integer&amp;lt;/vp&amp;gt; literal is determined by the &amp;lt;vpbnf&amp;gt;&amp;lt;Integer&amp;gt;&amp;lt;/vpbnf&amp;gt; rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Integer&amp;gt; :&lt;br /&gt;
      &amp;lt;Add_operation&amp;gt;-opt 0o &amp;lt;Oct_number&amp;gt;&lt;br /&gt;
      &amp;lt;Add_operation&amp;gt;-opt &amp;lt;Dec_number&amp;gt;&lt;br /&gt;
      &amp;lt;Add_operation&amp;gt;-opt 0x &amp;lt;Hex_number&amp;gt;&lt;br /&gt;
&amp;lt;Add_operation&amp;gt; :&lt;br /&gt;
      +&lt;br /&gt;
      -&lt;br /&gt;
&amp;lt;Oct_number&amp;gt; :&lt;br /&gt;
      &amp;lt;Oct_digit&amp;gt;-list&lt;br /&gt;
&amp;lt;Oct_digit&amp;gt; : one of&lt;br /&gt;
      0 1 2 3 4 5 6 7&lt;br /&gt;
&amp;lt;Dec_number&amp;gt; :&lt;br /&gt;
      &amp;lt;Dec_digit&amp;gt;-list&lt;br /&gt;
&amp;lt;Dec_digit&amp;gt; : one of&lt;br /&gt;
      &amp;lt;Oct_digit&amp;gt; 8 9&lt;br /&gt;
&amp;lt;Hex_number&amp;gt; :&lt;br /&gt;
      &amp;lt;Hex_digit&amp;gt;-list&lt;br /&gt;
&amp;lt;Hex_digit&amp;gt; : one of&lt;br /&gt;
      &amp;lt;Dec_digit&amp;gt; a b c d e f A B C D E F&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== integer64 ====&lt;br /&gt;
&lt;br /&gt;
64 bit signed integer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;integer64&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 8 bytes.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is from &amp;lt;vp&amp;gt;-2^63 = -9223372036854775808&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;2^63-1 = 9223372036854775807&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax for &amp;lt;vp&amp;gt;integer64&amp;lt;/vp&amp;gt; literal is the same as &amp;lt;vpbnf&amp;gt;&amp;lt;Integer&amp;gt;&amp;lt;/vpbnf&amp;gt; rule.&lt;br /&gt;
&lt;br /&gt;
The set of operations for &amp;lt;vp&amp;gt;integer64&amp;lt;/vp&amp;gt; is similar to the one for &amp;lt;vpbnf&amp;gt;&amp;lt;Integer&amp;gt;&amp;lt;/vpbnf&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== integerNative ====&lt;br /&gt;
&lt;br /&gt;
Signed integer number with platform size (32 bit in a 32 bit program; 64 bit in a 64 bit program).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;integerNative&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== unsigned ====&lt;br /&gt;
&lt;br /&gt;
32 bit unsigned integer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;unsigned&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 4 bytes. Arithmetic operations (&amp;lt;vp&amp;gt;+&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;-&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;/&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;*&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;^&amp;lt;/vp&amp;gt;), comparison, assignment, {{lang2|Built-in entities|Operators|div/2-&amp;gt;}}, {{lang2|Built-in entities|Operators|mod/2-&amp;gt;}}, {{lang2|Built-in entities|Operators|rem/2-&amp;gt;}}, and {{lang2|Built-in entities|Operators|quot/2-&amp;gt;}} operations are applied to values of this domain.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is from &amp;lt;vp&amp;gt;0&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;4294967295&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax for &amp;lt;vp&amp;gt;unsigned&amp;lt;/vp&amp;gt; number images is the same as for &amp;lt;vp&amp;gt;integer&amp;lt;/vp&amp;gt; numbers. The usage of minus sign (&amp;lt;vpbnf&amp;gt;&amp;lt;UnaryMinus&amp;gt;&amp;lt;/vpbnf&amp;gt;) is not allowed for an image of an &amp;lt;vp&amp;gt;unsigned&amp;lt;/vp&amp;gt; number.&lt;br /&gt;
&lt;br /&gt;
==== unsigned64 ====&lt;br /&gt;
&lt;br /&gt;
64 bit unsigned integer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;unsigned64&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 8 bytes.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is from &amp;lt;vp&amp;gt;0&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;2^64-1 = 18,446,744,073,709,551,615&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax for &amp;lt;vp&amp;gt;unsigned64&amp;lt;/vp&amp;gt; number images is the same as for &amp;lt;vp&amp;gt;integer64&amp;lt;/vp&amp;gt; numbers. The usage of minus sign (&amp;lt;vpbnf&amp;gt;&amp;lt;UnaryMinus&amp;gt;&amp;lt;/vpbnf&amp;gt;) is not allowed for an image of an &amp;lt;vp&amp;gt;unsigned64&amp;lt;/vp&amp;gt; number.&lt;br /&gt;
&lt;br /&gt;
The set of operations for &amp;lt;vp&amp;gt;unsigned64&amp;lt;/vp&amp;gt; is similar to the one for &amp;lt;vpbnf&amp;gt;&amp;lt;Unsigned&amp;gt;&amp;lt;/vpbnf&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== unsignedNative ====&lt;br /&gt;
&lt;br /&gt;
Unsigned integer number with platform size (32 bit in a 32 bit program; 64 bit in a 64 bit program).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;unsignedNative&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== real ====&lt;br /&gt;
&lt;br /&gt;
Float-pointing number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;real&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 8 bytes. This numerical real domain is introduced for the user&amp;#039;s convenience only. All arithmetic, comparison, and assignment operations are applied to values of &amp;lt;vp&amp;gt;real&amp;lt;/vp&amp;gt; domain.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is &amp;lt;vp&amp;gt;-1.7e+308&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;1.7e+308&amp;lt;/vp&amp;gt;. Values from integral domains are automatically converted to real numbers when necessary.&lt;br /&gt;
&lt;br /&gt;
The syntax for the floating-point number literal is determined by the &amp;lt;vpbnf&amp;gt;&amp;lt;Real&amp;gt;&amp;lt;/vpbnf&amp;gt; rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Real&amp;gt; :&lt;br /&gt;
      &amp;lt;Add_operation&amp;gt;-opt &amp;lt;Fraction&amp;gt; &amp;lt;Exponent&amp;gt;-opt&lt;br /&gt;
&amp;lt;Fraction&amp;gt; :&lt;br /&gt;
      &amp;lt;Dec_number&amp;gt; &amp;lt;Fractional_part&amp;gt;-opt&lt;br /&gt;
&amp;lt;Fractional_part&amp;gt; :&lt;br /&gt;
      . &amp;lt;Dec_number&amp;gt;&lt;br /&gt;
&amp;lt;Exponent&amp;gt; :&lt;br /&gt;
      &amp;lt;Exp&amp;gt; &amp;lt;Add_operation&amp;gt;-opt &amp;lt;Dec_number&amp;gt;&lt;br /&gt;
&amp;lt;Exp&amp;gt; :&lt;br /&gt;
      e&lt;br /&gt;
      E&lt;br /&gt;
&amp;lt;Add_operation&amp;gt; :&lt;br /&gt;
      +&lt;br /&gt;
      -&lt;br /&gt;
&amp;lt;Dec_number&amp;gt; :&lt;br /&gt;
      &amp;lt;Dec_digit&amp;gt;-list&lt;br /&gt;
&amp;lt;Dec_digit&amp;gt; : one of&lt;br /&gt;
      0 1 2 3 4 5 6 7 8 9&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== real32 ====&lt;br /&gt;
&lt;br /&gt;
Float-pointing number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;real32&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 4 bytes. This numerical &amp;lt;vp&amp;gt;real32&amp;lt;/vp&amp;gt; domain is introduced for the user&amp;#039;s convenience only. All arithmetic, comparison, and assignment operations can be applied to values of &amp;lt;vp&amp;gt;real32&amp;lt;/vp&amp;gt; domain.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is &amp;lt;vp&amp;gt;-3.4e+38&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;3.4e+38&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax of real32 literals is the same as &amp;lt;vp&amp;gt;real&amp;lt;/vp&amp;gt; lietrals.&lt;br /&gt;
&lt;br /&gt;
==== pointer ====&lt;br /&gt;
&lt;br /&gt;
A pointer to a memory address.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;pointer&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A pointer directly corresponds to memory addresses. Only the equality operation can be applied to the values of this domain. There is a built-in &amp;#039;&amp;#039;&amp;#039;null&amp;#039;&amp;#039;&amp;#039; constant for this type&lt;br /&gt;
&lt;br /&gt;
==== handle ====&lt;br /&gt;
&lt;br /&gt;
A handle is used for Windows API function call. Values of this domain has the same size as a pointer (i.e. 4 on 32bit platfor and 8 on 64bit platform).&lt;br /&gt;
&lt;br /&gt;
There are no operations for this domain and cannot be converted (except uncheckedConvert) to/from other domains.&lt;br /&gt;
&lt;br /&gt;
There is a built-in [[#nullHandle|nullHandle]] and [[#invalidHandle|invalidHandle]] constant  for this type&lt;br /&gt;
&lt;br /&gt;
==== boolean ====&lt;br /&gt;
&lt;br /&gt;
Boolean values.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;boolean&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This domain is introduced for the user convenience only. It is treated as usual compound domain with the following definition:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;domains&lt;br /&gt;
   boolean = false(); true().&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== factDB ====&lt;br /&gt;
&lt;br /&gt;
Descriptors of named internal databases.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;factDB&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This domain has the following hidden meta-declaration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;domains&lt;br /&gt;
   factDB = struct @factdb( named_internal_database_domain, object ).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All user-defined names of facts sections are the constants of this domain. The compiler automatically builds the corresponding compound terms from such constants whenever it&amp;#039;s in need. At the runtime the 1st field of this structure contains the address of the corresponding domain descriptor and the 2nd field contains either zero (for class facts sections) or pointer to an object (i.e. &amp;lt;vp&amp;gt;This&amp;lt;/vp&amp;gt;, for object facts sections).&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{LanguageReferenceSubarticle|Built-in entities/Domains}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Joachim Tilsted Kristensen</name></author>
	</entry>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Domains&amp;diff=4755</id>
		<title>Language Reference/Built-in entities/Domains</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Domains&amp;diff=4755"/>
		<updated>2020-12-19T16:17:13Z</updated>

		<summary type="html">&lt;p&gt;Joachim Tilsted Kristensen: /* string8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|{{prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|[[#any|any]]&lt;br /&gt;
|Universal term type.&lt;br /&gt;
|-&lt;br /&gt;
|[[#char|char]]&lt;br /&gt;
|Wide (two-bytes) character.&lt;br /&gt;
|-&lt;br /&gt;
|[[#string|string]]&lt;br /&gt;
|Wide zero-terminated sequence of wide characters.&lt;br /&gt;
|-&lt;br /&gt;
|[[#string8|string8]]&lt;br /&gt;
|Zero-terminated sequence of ASCII (one-byte) characters.&lt;br /&gt;
|-&lt;br /&gt;
|[[#symbol|symbol]]&lt;br /&gt;
|Wide zero-terminated sequence of wide characters.&lt;br /&gt;
|-&lt;br /&gt;
|[[#binary|binary]]&lt;br /&gt;
|Sequence of bytes.&lt;br /&gt;
|-&lt;br /&gt;
|[[#binaryNonAtomic|binaryNonAtomic]]&lt;br /&gt;
|Sequence of bytes.&lt;br /&gt;
|-&lt;br /&gt;
|[[#integer|integer]]&lt;br /&gt;
|32 bit signed integer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#integer64|integer64]]&lt;br /&gt;
|64 bit signed integer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#integerNative|integerNative]]&lt;br /&gt;
|Signed integer with platform size (32 bit in a 32 bit program; 64 bit in a 64 bit program).&lt;br /&gt;
|-&lt;br /&gt;
|[[#unsigned|unsigned]]&lt;br /&gt;
|32 bit unsigned integer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#unsigned64|unsigned64]]&lt;br /&gt;
|64 bit unsigned integer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#unsignedNative|unsignedNative]]&lt;br /&gt;
|Unsigned integer with platform size (32 bit in a 32 bit program; 64 bit in a 64 bit program).&lt;br /&gt;
|-&lt;br /&gt;
|[[#real|real]]&lt;br /&gt;
|Float-pointing number.&lt;br /&gt;
|-&lt;br /&gt;
|[[#real32|real32]]&lt;br /&gt;
|Float-pointing number.&lt;br /&gt;
|-&lt;br /&gt;
|[[#pointer|pointer]]&lt;br /&gt;
|pointer to a memory address.&lt;br /&gt;
|-&lt;br /&gt;
|[[#handle|handle]]&lt;br /&gt;
|a handle (e.g. native file and windows handles).&lt;br /&gt;
|-&lt;br /&gt;
|[[#boolean|boolean]]&lt;br /&gt;
|Boolean values.&lt;br /&gt;
|-&lt;br /&gt;
|[[#factDB|factDB]]&lt;br /&gt;
|Descriptors of named internal databases.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compareResult|compareResult]]&lt;br /&gt;
|Values of comparison result.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== any ====&lt;br /&gt;
&lt;br /&gt;
Universal term type.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;any&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The values of this domain are any terms. Such a value contains the reference to the term type library and a term itself.&lt;br /&gt;
&lt;br /&gt;
==== char ====&lt;br /&gt;
&lt;br /&gt;
Wide character.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;char&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The values of this domain are UNICODE characters. Implemented as 2 unsigned bytes.&lt;br /&gt;
&lt;br /&gt;
Only assignment and comparison (in the lexicographical sense) operations are applied to the values of this domain. The image of a character has the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Char_image&amp;gt; :&lt;br /&gt;
      &amp;#039; Char_value &amp;#039;&lt;br /&gt;
&amp;lt;Char_value&amp;gt; :&lt;br /&gt;
      &amp;lt;Letter&amp;gt;&lt;br /&gt;
      &amp;lt;Digit&amp;gt;&lt;br /&gt;
      &amp;lt;Graphical_symbol&amp;gt;&lt;br /&gt;
      \ &amp;lt;Escape_seq&amp;gt;&lt;br /&gt;
&amp;lt;Escape_seq&amp;gt;:&lt;br /&gt;
      t&lt;br /&gt;
      n&lt;br /&gt;
      r&lt;br /&gt;
      \&lt;br /&gt;
      &amp;#039;&lt;br /&gt;
      &amp;quot;&lt;br /&gt;
      u &amp;lt;HHHH&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the syntax above &amp;lt;vpbnf&amp;gt;&amp;lt;HHHH&amp;gt;&amp;lt;/vpbnf&amp;gt; correspond to 4 hexadecimal digits. Also, the backslash symbol and the single quote can be represented by an escape-sequence only.&lt;br /&gt;
&lt;br /&gt;
==== compareResult ====&lt;br /&gt;
&lt;br /&gt;
A built-in domain that represents the result of a comparison. For instance, the built-in procedure {{lang2|Built-in entities|compare|compare/2-&amp;gt;}} has &amp;quot;compareResult&amp;quot; as the domain of its result.&lt;br /&gt;
&amp;lt;vip&amp;gt;domains&lt;br /&gt;
   compareResult = less; equal; greater.&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== string ====&lt;br /&gt;
&lt;br /&gt;
Wide zero terminated sequence of wide characters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;string&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A string is a sequence of UNICODE characters. It&amp;#039;s implemented as a pointer to the wide zero-terminated array of wide characters. Only assignment and comparison (in the lexicographical sense) operations are applied to values of this domain.&lt;br /&gt;
&lt;br /&gt;
In source code a string literal can be specified as a set of sequences of characters surrounded by the double quotes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;StringLiteral&amp;gt;:&lt;br /&gt;
   &amp;lt;StringLiteralPart&amp;gt;-list&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;StringLiteralPart&amp;gt; :&lt;br /&gt;
   @&amp;quot; AnyCharacter-list-opt &amp;quot;&lt;br /&gt;
   &amp;quot; CharacterValue-list-opt &amp;quot;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A string literal consists of one or more &amp;lt;vpbnf&amp;gt;&amp;lt;StringLiteralPart&amp;gt;&amp;lt;/vpbnf&amp;gt;&amp;#039;s, which are concatenated. &amp;lt;vpbnf&amp;gt;&amp;lt;StringLiteralPart&amp;gt;&amp;lt;/vpbnf&amp;gt;&amp;#039;s starting with &amp;lt;vp&amp;gt;@&amp;lt;/vp&amp;gt; does not use escape sequences, whereas &amp;lt;vpbnf&amp;gt;&amp;lt;StringLiteralPart&amp;gt;&amp;lt;/vpbnf&amp;gt;&amp;#039;s without &amp;lt;vp&amp;gt;@&amp;lt;/vp&amp;gt; uses the following escape sequences:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;vp&amp;gt;\\&amp;lt;/vp&amp;gt; representing &amp;lt;vp&amp;gt;\&amp;lt;/vp&amp;gt;&lt;br /&gt;
*&amp;lt;vp&amp;gt;\t&amp;lt;/vp&amp;gt; representing Tab-character&lt;br /&gt;
*&amp;lt;vp&amp;gt;\n&amp;lt;/vp&amp;gt; representing newline-character&lt;br /&gt;
*&amp;lt;vp&amp;gt;\r&amp;lt;/vp&amp;gt; representing carriage return&lt;br /&gt;
*&amp;lt;vp&amp;gt;\&amp;#039;&amp;lt;/vp&amp;gt; representing single quote&lt;br /&gt;
*&amp;lt;vp&amp;gt;\&amp;quot;&amp;lt;/vp&amp;gt; representing double quote&lt;br /&gt;
*&amp;lt;vp&amp;gt;\u&amp;lt;/vp&amp;gt; followed by exactly four &amp;lt;vpbnf&amp;gt;&amp;lt;HexadecimalDigit&amp;gt;&amp;lt;/vpbnf&amp;gt;&amp;#039;s representing the Unicode character corresponding to the digits.&lt;br /&gt;
&lt;br /&gt;
The double quotes in the string can be represented by the escape-sequence only (the single quote can be represented both with an escape-sequence and a graphical symbol).&lt;br /&gt;
&lt;br /&gt;
==== string8 ====&lt;br /&gt;
&lt;br /&gt;
A built-in domain who&amp;#039;s elements are sequences of (one-byte) ASCII-characters. It is implemented as a pointer to the zero terminated array of ASCII characters. Only assignment and comparison for equality (in the lexicographical sense) operations are applied to the values of this domain. Currently no literals are allowed for this domain.&lt;br /&gt;
&lt;br /&gt;
==== symbol ====&lt;br /&gt;
&lt;br /&gt;
Wide zero terminated sequence of wide characters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;symbol&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similar to a string, a symbol is also a sequence of the UNICODE characters. It&amp;#039;s implemented as a pointer to an entry in a symbol table that contains strings. The operations that can be applied to symbols are the same as for strings.&lt;br /&gt;
&lt;br /&gt;
The image of a symbol is represented with a &amp;#039;&amp;#039;&amp;lt;string_literal&amp;gt;&amp;#039;&amp;#039; (any string surrounded by the double quotes).&lt;br /&gt;
&lt;br /&gt;
Symbols and strings are largely interchangeable but they are stored differently. Symbols are kept in a look-up table and their addresses, rather than the symbols themselves, are stored to represent objects. This means that symbols can be matched very quickly and, if a symbol occurs repeatedly in a program, it can be stored very compactly. Strings are not kept in a look-up table. Visual Prolog examines strings character-by-character whenever they are to be matched.&lt;br /&gt;
&lt;br /&gt;
==== binary ====&lt;br /&gt;
&lt;br /&gt;
Sequence of N bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;binary&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain are used for holding binary data. A binary value is implemented as a pointer to the sequence of bytes that represents the contents of a binary term.&lt;br /&gt;
&lt;br /&gt;
The length of a binary term is situated in the &amp;#039;&amp;#039;&amp;#039;4 bytes&amp;#039;&amp;#039;&amp;#039; immediately preceding this sequence of bytes. The 4 bytes contains:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;TotalNumberOfBytesOccupiedByBinary = ByteLen + 4 &amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;vp&amp;gt;ByteLen&amp;lt;/vp&amp;gt; - is the length of the binary term and 4 is number of bytes occupied by size field.&lt;br /&gt;
&lt;br /&gt;
Only assignment and comparison operations are applied to values of &amp;#039;&amp;#039;&amp;#039;binary domain&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Two binary terms are compared in the following way:&lt;br /&gt;
&lt;br /&gt;
*If they are of different sizes, the bigger is considered larger.&lt;br /&gt;
*Otherwise, they are compared byte by byte, as unsigned values. Comparison stops when two differing bytes are found and the result of their comparison is the result of the comparison of the binary terms. Two binary terms are equal if they have the same sizes and all bytes are equal.&lt;br /&gt;
&lt;br /&gt;
The text syntax for binary images is determined by the &amp;lt;vpbnf&amp;gt;&amp;lt;Binary&amp;gt;&amp;lt;/vpbnf&amp;gt; rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Binary&amp;gt; :&lt;br /&gt;
       $ [ &amp;lt;Byte_value&amp;gt;-comma-sep-list-opt ]&lt;br /&gt;
&amp;lt;Byte_value&amp;gt; :&lt;br /&gt;
      &amp;lt;Expression&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each &amp;#039;&amp;#039;expression&amp;#039;&amp;#039; should be calculate on compiling time and its value should be in the range from &amp;lt;vp&amp;gt;0&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;255&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== binaryNonAtomic ====&lt;br /&gt;
&lt;br /&gt;
Sequence of N bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;binaryNonAtomic&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Same as [[#binary|binary]], but can contain pointers because it is scanned by the garbage collector.&lt;br /&gt;
&lt;br /&gt;
==== integer ====&lt;br /&gt;
&lt;br /&gt;
32 bit signed integer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;integer&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 4 bytes. Arithmetic operations (&amp;lt;vp&amp;gt;+&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;-&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;/&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;*&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;^&amp;lt;/vp&amp;gt;), comparison, assignment, {{lang2|Built-in entities|Operators|div/2-&amp;gt;}}, {{lang2|Built-in entities|Operators|mod/2-&amp;gt;}}, {{lang2|Built-in entities|Operators|quot/2-&amp;gt;}}, and {{lang2|Built-in entities|Operators|rem/2-&amp;gt;}} operations are applied to values of this domain.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is from &amp;lt;vp&amp;gt;-2147483648&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;2147483647&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax for the &amp;lt;vp&amp;gt;integer&amp;lt;/vp&amp;gt; literal is determined by the &amp;lt;vpbnf&amp;gt;&amp;lt;Integer&amp;gt;&amp;lt;/vpbnf&amp;gt; rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Integer&amp;gt; :&lt;br /&gt;
      &amp;lt;Add_operation&amp;gt;-opt 0o &amp;lt;Oct_number&amp;gt;&lt;br /&gt;
      &amp;lt;Add_operation&amp;gt;-opt &amp;lt;Dec_number&amp;gt;&lt;br /&gt;
      &amp;lt;Add_operation&amp;gt;-opt 0x &amp;lt;Hex_number&amp;gt;&lt;br /&gt;
&amp;lt;Add_operation&amp;gt; :&lt;br /&gt;
      +&lt;br /&gt;
      -&lt;br /&gt;
&amp;lt;Oct_number&amp;gt; :&lt;br /&gt;
      &amp;lt;Oct_digit&amp;gt;-list&lt;br /&gt;
&amp;lt;Oct_digit&amp;gt; : one of&lt;br /&gt;
      0 1 2 3 4 5 6 7&lt;br /&gt;
&amp;lt;Dec_number&amp;gt; :&lt;br /&gt;
      &amp;lt;Dec_digit&amp;gt;-list&lt;br /&gt;
&amp;lt;Dec_digit&amp;gt; : one of&lt;br /&gt;
      &amp;lt;Oct_digit&amp;gt; 8 9&lt;br /&gt;
&amp;lt;Hex_number&amp;gt; :&lt;br /&gt;
      &amp;lt;Hex_digit&amp;gt;-list&lt;br /&gt;
&amp;lt;Hex_digit&amp;gt; : one of&lt;br /&gt;
      &amp;lt;Dec_digit&amp;gt; a b c d e f A B C D E F&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== integer64 ====&lt;br /&gt;
&lt;br /&gt;
64 bit signed integer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;integer64&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 8 bytes.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is from &amp;lt;vp&amp;gt;-2^63 = -9223372036854775808&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;2^63-1 = 9223372036854775807&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax for &amp;lt;vp&amp;gt;integer64&amp;lt;/vp&amp;gt; literal is the same as &amp;lt;vpbnf&amp;gt;&amp;lt;Integer&amp;gt;&amp;lt;/vpbnf&amp;gt; rule.&lt;br /&gt;
&lt;br /&gt;
The set of operations for &amp;lt;vp&amp;gt;integer64&amp;lt;/vp&amp;gt; is similar to the one for &amp;lt;vpbnf&amp;gt;&amp;lt;Integer&amp;gt;&amp;lt;/vpbnf&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== integerNative ====&lt;br /&gt;
&lt;br /&gt;
Signed integer number with platform size (32 bit in a 32 bit program; 64 bit in a 64 bit program).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;integerNative&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== unsigned ====&lt;br /&gt;
&lt;br /&gt;
32 bit unsigned integer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;unsigned&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 4 bytes. Arithmetic operations (&amp;lt;vp&amp;gt;+&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;-&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;/&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;*&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;^&amp;lt;/vp&amp;gt;), comparison, assignment, {{lang2|Built-in entities|Operators|div/2-&amp;gt;}}, {{lang2|Built-in entities|Operators|mod/2-&amp;gt;}}, {{lang2|Built-in entities|Operators|rem/2-&amp;gt;}}, and {{lang2|Built-in entities|Operators|quot/2-&amp;gt;}} operations are applied to values of this domain.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is from &amp;lt;vp&amp;gt;0&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;4294967295&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax for &amp;lt;vp&amp;gt;unsigned&amp;lt;/vp&amp;gt; number images is the same as for &amp;lt;vp&amp;gt;integer&amp;lt;/vp&amp;gt; numbers. The usage of minus sign (&amp;lt;vpbnf&amp;gt;&amp;lt;UnaryMinus&amp;gt;&amp;lt;/vpbnf&amp;gt;) is not allowed for an image of an &amp;lt;vp&amp;gt;unsigned&amp;lt;/vp&amp;gt; number.&lt;br /&gt;
&lt;br /&gt;
==== unsigned64 ====&lt;br /&gt;
&lt;br /&gt;
64 bit unsigned integer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;unsigned64&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 8 bytes.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is from &amp;lt;vp&amp;gt;0&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;2^64-1 = 18,446,744,073,709,551,615&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax for &amp;lt;vp&amp;gt;unsigned64&amp;lt;/vp&amp;gt; number images is the same as for &amp;lt;vp&amp;gt;integer64&amp;lt;/vp&amp;gt; numbers. The usage of minus sign (&amp;lt;vpbnf&amp;gt;&amp;lt;UnaryMinus&amp;gt;&amp;lt;/vpbnf&amp;gt;) is not allowed for an image of an &amp;lt;vp&amp;gt;unsigned64&amp;lt;/vp&amp;gt; number.&lt;br /&gt;
&lt;br /&gt;
The set of operations for &amp;lt;vp&amp;gt;unsigned64&amp;lt;/vp&amp;gt; is similar to the one for &amp;lt;vpbnf&amp;gt;&amp;lt;Unsigned&amp;gt;&amp;lt;/vpbnf&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== unsignedNative ====&lt;br /&gt;
&lt;br /&gt;
Unsigned integer number with platform size (32 bit in a 32 bit program; 64 bit in a 64 bit program).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;unsignedNative&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== real ====&lt;br /&gt;
&lt;br /&gt;
Float-pointing number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;real&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 8 bytes. This numerical real domain is introduced for the user&amp;#039;s convenience only. All arithmetic, comparison, and assignment operations are applied to values of &amp;lt;vp&amp;gt;real&amp;lt;/vp&amp;gt; domain.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is &amp;lt;vp&amp;gt;-1.7e+308&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;1.7e+308&amp;lt;/vp&amp;gt;. Values from integral domains are automatically converted to real numbers when necessary.&lt;br /&gt;
&lt;br /&gt;
The syntax for the floating-point number literal is determined by the &amp;lt;vpbnf&amp;gt;&amp;lt;Real&amp;gt;&amp;lt;/vpbnf&amp;gt; rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Real&amp;gt; :&lt;br /&gt;
      &amp;lt;Add_operation&amp;gt;-opt &amp;lt;Fraction&amp;gt; &amp;lt;Exponent&amp;gt;-opt&lt;br /&gt;
&amp;lt;Fraction&amp;gt; :&lt;br /&gt;
      &amp;lt;Dec_number&amp;gt; &amp;lt;Fractional_part&amp;gt;-opt&lt;br /&gt;
&amp;lt;Fractional_part&amp;gt; :&lt;br /&gt;
      . &amp;lt;Dec_number&amp;gt;&lt;br /&gt;
&amp;lt;Exponent&amp;gt; :&lt;br /&gt;
      &amp;lt;Exp&amp;gt; &amp;lt;Add_operation&amp;gt;-opt &amp;lt;Dec_number&amp;gt;&lt;br /&gt;
&amp;lt;Exp&amp;gt; :&lt;br /&gt;
      e&lt;br /&gt;
      E&lt;br /&gt;
&amp;lt;Add_operation&amp;gt; :&lt;br /&gt;
      +&lt;br /&gt;
      -&lt;br /&gt;
&amp;lt;Dec_number&amp;gt; :&lt;br /&gt;
      &amp;lt;Dec_digit&amp;gt;-list&lt;br /&gt;
&amp;lt;Dec_digit&amp;gt; : one of&lt;br /&gt;
      0 1 2 3 4 5 6 7 8 9&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== real32 ====&lt;br /&gt;
&lt;br /&gt;
Float-pointing number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;real32&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 4 bytes. This numerical &amp;lt;vp&amp;gt;real32&amp;lt;/vp&amp;gt; domain is introduced for the user&amp;#039;s convenience only. All arithmetic, comparison, and assignment operations can be applied to values of &amp;lt;vp&amp;gt;real32&amp;lt;/vp&amp;gt; domain.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is &amp;lt;vp&amp;gt;-3.4e+38&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;3.4e+38&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax of real32 literals is the same as &amp;lt;vp&amp;gt;real&amp;lt;/vp&amp;gt; lietrals.&lt;br /&gt;
&lt;br /&gt;
==== pointer ====&lt;br /&gt;
&lt;br /&gt;
A pointer to a memory address.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;pointer&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A pointer directly corresponds to memory addresses. Only the equality operation can be applied to the values of this domain. There is a built-in &amp;#039;&amp;#039;&amp;#039;null&amp;#039;&amp;#039;&amp;#039; constant for this type&lt;br /&gt;
&lt;br /&gt;
==== handle ====&lt;br /&gt;
&lt;br /&gt;
A handle is used for Windows API function call. Values of this domain has the same size as a pointer (i.e. 4 on 32bit platfor and 8 on 64bit platform).&lt;br /&gt;
&lt;br /&gt;
There are no operations for this domain and cannot be converted (except uncheckedConvert) to/from other domains.&lt;br /&gt;
&lt;br /&gt;
There is a built-in [[#nullHandle|nullHandle]] and [[#invalidHandle|invalidHandle]] constant  for this type&lt;br /&gt;
&lt;br /&gt;
==== boolean ====&lt;br /&gt;
&lt;br /&gt;
Boolean values.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;boolean&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This domain is introduced for the user convenience only. It is treated as usual compound domain with the following definition:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;domains&lt;br /&gt;
   boolean = false(); true().&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== factDB ====&lt;br /&gt;
&lt;br /&gt;
Descriptors of named internal databases.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;factDB&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This domain has the following hidden meta-declaration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;domains&lt;br /&gt;
   factDB = struct @factdb( named_internal_database_domain, object ).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All user-defined names of facts sections are the constants of this domain. The compiler automatically builds the corresponding compound terms from such constants whenever it&amp;#039;s in need. At the runtime the 1st field of this structure contains the address of the corresponding domain descriptor and the 2nd field contains either zero (for class facts sections) or pointer to an object (i.e. &amp;lt;vp&amp;gt;This&amp;lt;/vp&amp;gt;, for object facts sections).&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{LanguageReferenceSubarticle|Built-in entities/Domains}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Joachim Tilsted Kristensen</name></author>
	</entry>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Domains&amp;diff=4754</id>
		<title>Language Reference/Built-in entities/Domains</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Domains&amp;diff=4754"/>
		<updated>2020-12-19T16:16:03Z</updated>

		<summary type="html">&lt;p&gt;Joachim Tilsted Kristensen: /* string8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|{{prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|[[#any|any]]&lt;br /&gt;
|Universal term type.&lt;br /&gt;
|-&lt;br /&gt;
|[[#char|char]]&lt;br /&gt;
|Wide (two-bytes) character.&lt;br /&gt;
|-&lt;br /&gt;
|[[#string|string]]&lt;br /&gt;
|Wide zero-terminated sequence of wide characters.&lt;br /&gt;
|-&lt;br /&gt;
|[[#string8|string8]]&lt;br /&gt;
|Zero-terminated sequence of ASCII (one-byte) characters.&lt;br /&gt;
|-&lt;br /&gt;
|[[#symbol|symbol]]&lt;br /&gt;
|Wide zero-terminated sequence of wide characters.&lt;br /&gt;
|-&lt;br /&gt;
|[[#binary|binary]]&lt;br /&gt;
|Sequence of bytes.&lt;br /&gt;
|-&lt;br /&gt;
|[[#binaryNonAtomic|binaryNonAtomic]]&lt;br /&gt;
|Sequence of bytes.&lt;br /&gt;
|-&lt;br /&gt;
|[[#integer|integer]]&lt;br /&gt;
|32 bit signed integer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#integer64|integer64]]&lt;br /&gt;
|64 bit signed integer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#integerNative|integerNative]]&lt;br /&gt;
|Signed integer with platform size (32 bit in a 32 bit program; 64 bit in a 64 bit program).&lt;br /&gt;
|-&lt;br /&gt;
|[[#unsigned|unsigned]]&lt;br /&gt;
|32 bit unsigned integer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#unsigned64|unsigned64]]&lt;br /&gt;
|64 bit unsigned integer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#unsignedNative|unsignedNative]]&lt;br /&gt;
|Unsigned integer with platform size (32 bit in a 32 bit program; 64 bit in a 64 bit program).&lt;br /&gt;
|-&lt;br /&gt;
|[[#real|real]]&lt;br /&gt;
|Float-pointing number.&lt;br /&gt;
|-&lt;br /&gt;
|[[#real32|real32]]&lt;br /&gt;
|Float-pointing number.&lt;br /&gt;
|-&lt;br /&gt;
|[[#pointer|pointer]]&lt;br /&gt;
|pointer to a memory address.&lt;br /&gt;
|-&lt;br /&gt;
|[[#handle|handle]]&lt;br /&gt;
|a handle (e.g. native file and windows handles).&lt;br /&gt;
|-&lt;br /&gt;
|[[#boolean|boolean]]&lt;br /&gt;
|Boolean values.&lt;br /&gt;
|-&lt;br /&gt;
|[[#factDB|factDB]]&lt;br /&gt;
|Descriptors of named internal databases.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compareResult|compareResult]]&lt;br /&gt;
|Values of comparison result.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== any ====&lt;br /&gt;
&lt;br /&gt;
Universal term type.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;any&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The values of this domain are any terms. Such a value contains the reference to the term type library and a term itself.&lt;br /&gt;
&lt;br /&gt;
==== char ====&lt;br /&gt;
&lt;br /&gt;
Wide character.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;char&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The values of this domain are UNICODE characters. Implemented as 2 unsigned bytes.&lt;br /&gt;
&lt;br /&gt;
Only assignment and comparison (in the lexicographical sense) operations are applied to the values of this domain. The image of a character has the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Char_image&amp;gt; :&lt;br /&gt;
      &amp;#039; Char_value &amp;#039;&lt;br /&gt;
&amp;lt;Char_value&amp;gt; :&lt;br /&gt;
      &amp;lt;Letter&amp;gt;&lt;br /&gt;
      &amp;lt;Digit&amp;gt;&lt;br /&gt;
      &amp;lt;Graphical_symbol&amp;gt;&lt;br /&gt;
      \ &amp;lt;Escape_seq&amp;gt;&lt;br /&gt;
&amp;lt;Escape_seq&amp;gt;:&lt;br /&gt;
      t&lt;br /&gt;
      n&lt;br /&gt;
      r&lt;br /&gt;
      \&lt;br /&gt;
      &amp;#039;&lt;br /&gt;
      &amp;quot;&lt;br /&gt;
      u &amp;lt;HHHH&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the syntax above &amp;lt;vpbnf&amp;gt;&amp;lt;HHHH&amp;gt;&amp;lt;/vpbnf&amp;gt; correspond to 4 hexadecimal digits. Also, the backslash symbol and the single quote can be represented by an escape-sequence only.&lt;br /&gt;
&lt;br /&gt;
==== compareResult ====&lt;br /&gt;
&lt;br /&gt;
A built-in domain that represents the result of a comparison. For instance, the built-in procedure {{lang2|Built-in entities|compare|compare/2-&amp;gt;}} has &amp;quot;compareResult&amp;quot; as the domain of its result.&lt;br /&gt;
&amp;lt;vip&amp;gt;domains&lt;br /&gt;
   compareResult = less; equal; greater.&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== string ====&lt;br /&gt;
&lt;br /&gt;
Wide zero terminated sequence of wide characters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;string&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A string is a sequence of UNICODE characters. It&amp;#039;s implemented as a pointer to the wide zero-terminated array of wide characters. Only assignment and comparison (in the lexicographical sense) operations are applied to values of this domain.&lt;br /&gt;
&lt;br /&gt;
In source code a string literal can be specified as a set of sequences of characters surrounded by the double quotes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;StringLiteral&amp;gt;:&lt;br /&gt;
   &amp;lt;StringLiteralPart&amp;gt;-list&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;StringLiteralPart&amp;gt; :&lt;br /&gt;
   @&amp;quot; AnyCharacter-list-opt &amp;quot;&lt;br /&gt;
   &amp;quot; CharacterValue-list-opt &amp;quot;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A string literal consists of one or more &amp;lt;vpbnf&amp;gt;&amp;lt;StringLiteralPart&amp;gt;&amp;lt;/vpbnf&amp;gt;&amp;#039;s, which are concatenated. &amp;lt;vpbnf&amp;gt;&amp;lt;StringLiteralPart&amp;gt;&amp;lt;/vpbnf&amp;gt;&amp;#039;s starting with &amp;lt;vp&amp;gt;@&amp;lt;/vp&amp;gt; does not use escape sequences, whereas &amp;lt;vpbnf&amp;gt;&amp;lt;StringLiteralPart&amp;gt;&amp;lt;/vpbnf&amp;gt;&amp;#039;s without &amp;lt;vp&amp;gt;@&amp;lt;/vp&amp;gt; uses the following escape sequences:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;vp&amp;gt;\\&amp;lt;/vp&amp;gt; representing &amp;lt;vp&amp;gt;\&amp;lt;/vp&amp;gt;&lt;br /&gt;
*&amp;lt;vp&amp;gt;\t&amp;lt;/vp&amp;gt; representing Tab-character&lt;br /&gt;
*&amp;lt;vp&amp;gt;\n&amp;lt;/vp&amp;gt; representing newline-character&lt;br /&gt;
*&amp;lt;vp&amp;gt;\r&amp;lt;/vp&amp;gt; representing carriage return&lt;br /&gt;
*&amp;lt;vp&amp;gt;\&amp;#039;&amp;lt;/vp&amp;gt; representing single quote&lt;br /&gt;
*&amp;lt;vp&amp;gt;\&amp;quot;&amp;lt;/vp&amp;gt; representing double quote&lt;br /&gt;
*&amp;lt;vp&amp;gt;\u&amp;lt;/vp&amp;gt; followed by exactly four &amp;lt;vpbnf&amp;gt;&amp;lt;HexadecimalDigit&amp;gt;&amp;lt;/vpbnf&amp;gt;&amp;#039;s representing the Unicode character corresponding to the digits.&lt;br /&gt;
&lt;br /&gt;
The double quotes in the string can be represented by the escape-sequence only (the single quote can be represented both with an escape-sequence and a graphical symbol).&lt;br /&gt;
&lt;br /&gt;
==== string8 ====&lt;br /&gt;
&lt;br /&gt;
A built-in domain inhabited by sequences of (one-byte) ASCII-characters. It is implemented as a pointer to the zero terminated array of ASCII characters. Only assignment and comparison for equality (in the lexicographical sense) operations are applied to the values of this domain. Currently no literals are allowed for this domain.&lt;br /&gt;
&lt;br /&gt;
==== symbol ====&lt;br /&gt;
&lt;br /&gt;
Wide zero terminated sequence of wide characters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;symbol&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similar to a string, a symbol is also a sequence of the UNICODE characters. It&amp;#039;s implemented as a pointer to an entry in a symbol table that contains strings. The operations that can be applied to symbols are the same as for strings.&lt;br /&gt;
&lt;br /&gt;
The image of a symbol is represented with a &amp;#039;&amp;#039;&amp;lt;string_literal&amp;gt;&amp;#039;&amp;#039; (any string surrounded by the double quotes).&lt;br /&gt;
&lt;br /&gt;
Symbols and strings are largely interchangeable but they are stored differently. Symbols are kept in a look-up table and their addresses, rather than the symbols themselves, are stored to represent objects. This means that symbols can be matched very quickly and, if a symbol occurs repeatedly in a program, it can be stored very compactly. Strings are not kept in a look-up table. Visual Prolog examines strings character-by-character whenever they are to be matched.&lt;br /&gt;
&lt;br /&gt;
==== binary ====&lt;br /&gt;
&lt;br /&gt;
Sequence of N bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;binary&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain are used for holding binary data. A binary value is implemented as a pointer to the sequence of bytes that represents the contents of a binary term.&lt;br /&gt;
&lt;br /&gt;
The length of a binary term is situated in the &amp;#039;&amp;#039;&amp;#039;4 bytes&amp;#039;&amp;#039;&amp;#039; immediately preceding this sequence of bytes. The 4 bytes contains:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;TotalNumberOfBytesOccupiedByBinary = ByteLen + 4 &amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;vp&amp;gt;ByteLen&amp;lt;/vp&amp;gt; - is the length of the binary term and 4 is number of bytes occupied by size field.&lt;br /&gt;
&lt;br /&gt;
Only assignment and comparison operations are applied to values of &amp;#039;&amp;#039;&amp;#039;binary domain&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Two binary terms are compared in the following way:&lt;br /&gt;
&lt;br /&gt;
*If they are of different sizes, the bigger is considered larger.&lt;br /&gt;
*Otherwise, they are compared byte by byte, as unsigned values. Comparison stops when two differing bytes are found and the result of their comparison is the result of the comparison of the binary terms. Two binary terms are equal if they have the same sizes and all bytes are equal.&lt;br /&gt;
&lt;br /&gt;
The text syntax for binary images is determined by the &amp;lt;vpbnf&amp;gt;&amp;lt;Binary&amp;gt;&amp;lt;/vpbnf&amp;gt; rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Binary&amp;gt; :&lt;br /&gt;
       $ [ &amp;lt;Byte_value&amp;gt;-comma-sep-list-opt ]&lt;br /&gt;
&amp;lt;Byte_value&amp;gt; :&lt;br /&gt;
      &amp;lt;Expression&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each &amp;#039;&amp;#039;expression&amp;#039;&amp;#039; should be calculate on compiling time and its value should be in the range from &amp;lt;vp&amp;gt;0&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;255&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== binaryNonAtomic ====&lt;br /&gt;
&lt;br /&gt;
Sequence of N bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;binaryNonAtomic&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Same as [[#binary|binary]], but can contain pointers because it is scanned by the garbage collector.&lt;br /&gt;
&lt;br /&gt;
==== integer ====&lt;br /&gt;
&lt;br /&gt;
32 bit signed integer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;integer&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 4 bytes. Arithmetic operations (&amp;lt;vp&amp;gt;+&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;-&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;/&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;*&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;^&amp;lt;/vp&amp;gt;), comparison, assignment, {{lang2|Built-in entities|Operators|div/2-&amp;gt;}}, {{lang2|Built-in entities|Operators|mod/2-&amp;gt;}}, {{lang2|Built-in entities|Operators|quot/2-&amp;gt;}}, and {{lang2|Built-in entities|Operators|rem/2-&amp;gt;}} operations are applied to values of this domain.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is from &amp;lt;vp&amp;gt;-2147483648&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;2147483647&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax for the &amp;lt;vp&amp;gt;integer&amp;lt;/vp&amp;gt; literal is determined by the &amp;lt;vpbnf&amp;gt;&amp;lt;Integer&amp;gt;&amp;lt;/vpbnf&amp;gt; rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Integer&amp;gt; :&lt;br /&gt;
      &amp;lt;Add_operation&amp;gt;-opt 0o &amp;lt;Oct_number&amp;gt;&lt;br /&gt;
      &amp;lt;Add_operation&amp;gt;-opt &amp;lt;Dec_number&amp;gt;&lt;br /&gt;
      &amp;lt;Add_operation&amp;gt;-opt 0x &amp;lt;Hex_number&amp;gt;&lt;br /&gt;
&amp;lt;Add_operation&amp;gt; :&lt;br /&gt;
      +&lt;br /&gt;
      -&lt;br /&gt;
&amp;lt;Oct_number&amp;gt; :&lt;br /&gt;
      &amp;lt;Oct_digit&amp;gt;-list&lt;br /&gt;
&amp;lt;Oct_digit&amp;gt; : one of&lt;br /&gt;
      0 1 2 3 4 5 6 7&lt;br /&gt;
&amp;lt;Dec_number&amp;gt; :&lt;br /&gt;
      &amp;lt;Dec_digit&amp;gt;-list&lt;br /&gt;
&amp;lt;Dec_digit&amp;gt; : one of&lt;br /&gt;
      &amp;lt;Oct_digit&amp;gt; 8 9&lt;br /&gt;
&amp;lt;Hex_number&amp;gt; :&lt;br /&gt;
      &amp;lt;Hex_digit&amp;gt;-list&lt;br /&gt;
&amp;lt;Hex_digit&amp;gt; : one of&lt;br /&gt;
      &amp;lt;Dec_digit&amp;gt; a b c d e f A B C D E F&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== integer64 ====&lt;br /&gt;
&lt;br /&gt;
64 bit signed integer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;integer64&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 8 bytes.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is from &amp;lt;vp&amp;gt;-2^63 = -9223372036854775808&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;2^63-1 = 9223372036854775807&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax for &amp;lt;vp&amp;gt;integer64&amp;lt;/vp&amp;gt; literal is the same as &amp;lt;vpbnf&amp;gt;&amp;lt;Integer&amp;gt;&amp;lt;/vpbnf&amp;gt; rule.&lt;br /&gt;
&lt;br /&gt;
The set of operations for &amp;lt;vp&amp;gt;integer64&amp;lt;/vp&amp;gt; is similar to the one for &amp;lt;vpbnf&amp;gt;&amp;lt;Integer&amp;gt;&amp;lt;/vpbnf&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== integerNative ====&lt;br /&gt;
&lt;br /&gt;
Signed integer number with platform size (32 bit in a 32 bit program; 64 bit in a 64 bit program).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;integerNative&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== unsigned ====&lt;br /&gt;
&lt;br /&gt;
32 bit unsigned integer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;unsigned&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 4 bytes. Arithmetic operations (&amp;lt;vp&amp;gt;+&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;-&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;/&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;*&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;^&amp;lt;/vp&amp;gt;), comparison, assignment, {{lang2|Built-in entities|Operators|div/2-&amp;gt;}}, {{lang2|Built-in entities|Operators|mod/2-&amp;gt;}}, {{lang2|Built-in entities|Operators|rem/2-&amp;gt;}}, and {{lang2|Built-in entities|Operators|quot/2-&amp;gt;}} operations are applied to values of this domain.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is from &amp;lt;vp&amp;gt;0&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;4294967295&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax for &amp;lt;vp&amp;gt;unsigned&amp;lt;/vp&amp;gt; number images is the same as for &amp;lt;vp&amp;gt;integer&amp;lt;/vp&amp;gt; numbers. The usage of minus sign (&amp;lt;vpbnf&amp;gt;&amp;lt;UnaryMinus&amp;gt;&amp;lt;/vpbnf&amp;gt;) is not allowed for an image of an &amp;lt;vp&amp;gt;unsigned&amp;lt;/vp&amp;gt; number.&lt;br /&gt;
&lt;br /&gt;
==== unsigned64 ====&lt;br /&gt;
&lt;br /&gt;
64 bit unsigned integer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;unsigned64&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 8 bytes.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is from &amp;lt;vp&amp;gt;0&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;2^64-1 = 18,446,744,073,709,551,615&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax for &amp;lt;vp&amp;gt;unsigned64&amp;lt;/vp&amp;gt; number images is the same as for &amp;lt;vp&amp;gt;integer64&amp;lt;/vp&amp;gt; numbers. The usage of minus sign (&amp;lt;vpbnf&amp;gt;&amp;lt;UnaryMinus&amp;gt;&amp;lt;/vpbnf&amp;gt;) is not allowed for an image of an &amp;lt;vp&amp;gt;unsigned64&amp;lt;/vp&amp;gt; number.&lt;br /&gt;
&lt;br /&gt;
The set of operations for &amp;lt;vp&amp;gt;unsigned64&amp;lt;/vp&amp;gt; is similar to the one for &amp;lt;vpbnf&amp;gt;&amp;lt;Unsigned&amp;gt;&amp;lt;/vpbnf&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== unsignedNative ====&lt;br /&gt;
&lt;br /&gt;
Unsigned integer number with platform size (32 bit in a 32 bit program; 64 bit in a 64 bit program).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;unsignedNative&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== real ====&lt;br /&gt;
&lt;br /&gt;
Float-pointing number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;real&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 8 bytes. This numerical real domain is introduced for the user&amp;#039;s convenience only. All arithmetic, comparison, and assignment operations are applied to values of &amp;lt;vp&amp;gt;real&amp;lt;/vp&amp;gt; domain.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is &amp;lt;vp&amp;gt;-1.7e+308&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;1.7e+308&amp;lt;/vp&amp;gt;. Values from integral domains are automatically converted to real numbers when necessary.&lt;br /&gt;
&lt;br /&gt;
The syntax for the floating-point number literal is determined by the &amp;lt;vpbnf&amp;gt;&amp;lt;Real&amp;gt;&amp;lt;/vpbnf&amp;gt; rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Real&amp;gt; :&lt;br /&gt;
      &amp;lt;Add_operation&amp;gt;-opt &amp;lt;Fraction&amp;gt; &amp;lt;Exponent&amp;gt;-opt&lt;br /&gt;
&amp;lt;Fraction&amp;gt; :&lt;br /&gt;
      &amp;lt;Dec_number&amp;gt; &amp;lt;Fractional_part&amp;gt;-opt&lt;br /&gt;
&amp;lt;Fractional_part&amp;gt; :&lt;br /&gt;
      . &amp;lt;Dec_number&amp;gt;&lt;br /&gt;
&amp;lt;Exponent&amp;gt; :&lt;br /&gt;
      &amp;lt;Exp&amp;gt; &amp;lt;Add_operation&amp;gt;-opt &amp;lt;Dec_number&amp;gt;&lt;br /&gt;
&amp;lt;Exp&amp;gt; :&lt;br /&gt;
      e&lt;br /&gt;
      E&lt;br /&gt;
&amp;lt;Add_operation&amp;gt; :&lt;br /&gt;
      +&lt;br /&gt;
      -&lt;br /&gt;
&amp;lt;Dec_number&amp;gt; :&lt;br /&gt;
      &amp;lt;Dec_digit&amp;gt;-list&lt;br /&gt;
&amp;lt;Dec_digit&amp;gt; : one of&lt;br /&gt;
      0 1 2 3 4 5 6 7 8 9&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== real32 ====&lt;br /&gt;
&lt;br /&gt;
Float-pointing number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;real32&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 4 bytes. This numerical &amp;lt;vp&amp;gt;real32&amp;lt;/vp&amp;gt; domain is introduced for the user&amp;#039;s convenience only. All arithmetic, comparison, and assignment operations can be applied to values of &amp;lt;vp&amp;gt;real32&amp;lt;/vp&amp;gt; domain.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is &amp;lt;vp&amp;gt;-3.4e+38&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;3.4e+38&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax of real32 literals is the same as &amp;lt;vp&amp;gt;real&amp;lt;/vp&amp;gt; lietrals.&lt;br /&gt;
&lt;br /&gt;
==== pointer ====&lt;br /&gt;
&lt;br /&gt;
A pointer to a memory address.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;pointer&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A pointer directly corresponds to memory addresses. Only the equality operation can be applied to the values of this domain. There is a built-in &amp;#039;&amp;#039;&amp;#039;null&amp;#039;&amp;#039;&amp;#039; constant for this type&lt;br /&gt;
&lt;br /&gt;
==== handle ====&lt;br /&gt;
&lt;br /&gt;
A handle is used for Windows API function call. Values of this domain has the same size as a pointer (i.e. 4 on 32bit platfor and 8 on 64bit platform).&lt;br /&gt;
&lt;br /&gt;
There are no operations for this domain and cannot be converted (except uncheckedConvert) to/from other domains.&lt;br /&gt;
&lt;br /&gt;
There is a built-in [[#nullHandle|nullHandle]] and [[#invalidHandle|invalidHandle]] constant  for this type&lt;br /&gt;
&lt;br /&gt;
==== boolean ====&lt;br /&gt;
&lt;br /&gt;
Boolean values.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;boolean&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This domain is introduced for the user convenience only. It is treated as usual compound domain with the following definition:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;domains&lt;br /&gt;
   boolean = false(); true().&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== factDB ====&lt;br /&gt;
&lt;br /&gt;
Descriptors of named internal databases.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;factDB&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This domain has the following hidden meta-declaration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;domains&lt;br /&gt;
   factDB = struct @factdb( named_internal_database_domain, object ).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All user-defined names of facts sections are the constants of this domain. The compiler automatically builds the corresponding compound terms from such constants whenever it&amp;#039;s in need. At the runtime the 1st field of this structure contains the address of the corresponding domain descriptor and the 2nd field contains either zero (for class facts sections) or pointer to an object (i.e. &amp;lt;vp&amp;gt;This&amp;lt;/vp&amp;gt;, for object facts sections).&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{LanguageReferenceSubarticle|Built-in entities/Domains}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Joachim Tilsted Kristensen</name></author>
	</entry>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Domains&amp;diff=4753</id>
		<title>Language Reference/Built-in entities/Domains</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Domains&amp;diff=4753"/>
		<updated>2020-12-19T16:12:22Z</updated>

		<summary type="html">&lt;p&gt;Joachim Tilsted Kristensen: /* compareResult */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|{{prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|[[#any|any]]&lt;br /&gt;
|Universal term type.&lt;br /&gt;
|-&lt;br /&gt;
|[[#char|char]]&lt;br /&gt;
|Wide (two-bytes) character.&lt;br /&gt;
|-&lt;br /&gt;
|[[#string|string]]&lt;br /&gt;
|Wide zero-terminated sequence of wide characters.&lt;br /&gt;
|-&lt;br /&gt;
|[[#string8|string8]]&lt;br /&gt;
|Zero-terminated sequence of ASCII (one-byte) characters.&lt;br /&gt;
|-&lt;br /&gt;
|[[#symbol|symbol]]&lt;br /&gt;
|Wide zero-terminated sequence of wide characters.&lt;br /&gt;
|-&lt;br /&gt;
|[[#binary|binary]]&lt;br /&gt;
|Sequence of bytes.&lt;br /&gt;
|-&lt;br /&gt;
|[[#binaryNonAtomic|binaryNonAtomic]]&lt;br /&gt;
|Sequence of bytes.&lt;br /&gt;
|-&lt;br /&gt;
|[[#integer|integer]]&lt;br /&gt;
|32 bit signed integer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#integer64|integer64]]&lt;br /&gt;
|64 bit signed integer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#integerNative|integerNative]]&lt;br /&gt;
|Signed integer with platform size (32 bit in a 32 bit program; 64 bit in a 64 bit program).&lt;br /&gt;
|-&lt;br /&gt;
|[[#unsigned|unsigned]]&lt;br /&gt;
|32 bit unsigned integer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#unsigned64|unsigned64]]&lt;br /&gt;
|64 bit unsigned integer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#unsignedNative|unsignedNative]]&lt;br /&gt;
|Unsigned integer with platform size (32 bit in a 32 bit program; 64 bit in a 64 bit program).&lt;br /&gt;
|-&lt;br /&gt;
|[[#real|real]]&lt;br /&gt;
|Float-pointing number.&lt;br /&gt;
|-&lt;br /&gt;
|[[#real32|real32]]&lt;br /&gt;
|Float-pointing number.&lt;br /&gt;
|-&lt;br /&gt;
|[[#pointer|pointer]]&lt;br /&gt;
|pointer to a memory address.&lt;br /&gt;
|-&lt;br /&gt;
|[[#handle|handle]]&lt;br /&gt;
|a handle (e.g. native file and windows handles).&lt;br /&gt;
|-&lt;br /&gt;
|[[#boolean|boolean]]&lt;br /&gt;
|Boolean values.&lt;br /&gt;
|-&lt;br /&gt;
|[[#factDB|factDB]]&lt;br /&gt;
|Descriptors of named internal databases.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compareResult|compareResult]]&lt;br /&gt;
|Values of comparison result.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== any ====&lt;br /&gt;
&lt;br /&gt;
Universal term type.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;any&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The values of this domain are any terms. Such a value contains the reference to the term type library and a term itself.&lt;br /&gt;
&lt;br /&gt;
==== char ====&lt;br /&gt;
&lt;br /&gt;
Wide character.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;char&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The values of this domain are UNICODE characters. Implemented as 2 unsigned bytes.&lt;br /&gt;
&lt;br /&gt;
Only assignment and comparison (in the lexicographical sense) operations are applied to the values of this domain. The image of a character has the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Char_image&amp;gt; :&lt;br /&gt;
      &amp;#039; Char_value &amp;#039;&lt;br /&gt;
&amp;lt;Char_value&amp;gt; :&lt;br /&gt;
      &amp;lt;Letter&amp;gt;&lt;br /&gt;
      &amp;lt;Digit&amp;gt;&lt;br /&gt;
      &amp;lt;Graphical_symbol&amp;gt;&lt;br /&gt;
      \ &amp;lt;Escape_seq&amp;gt;&lt;br /&gt;
&amp;lt;Escape_seq&amp;gt;:&lt;br /&gt;
      t&lt;br /&gt;
      n&lt;br /&gt;
      r&lt;br /&gt;
      \&lt;br /&gt;
      &amp;#039;&lt;br /&gt;
      &amp;quot;&lt;br /&gt;
      u &amp;lt;HHHH&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the syntax above &amp;lt;vpbnf&amp;gt;&amp;lt;HHHH&amp;gt;&amp;lt;/vpbnf&amp;gt; correspond to 4 hexadecimal digits. Also, the backslash symbol and the single quote can be represented by an escape-sequence only.&lt;br /&gt;
&lt;br /&gt;
==== compareResult ====&lt;br /&gt;
&lt;br /&gt;
A built-in domain that represents the result of a comparison. For instance, the built-in procedure {{lang2|Built-in entities|compare|compare/2-&amp;gt;}} has &amp;quot;compareResult&amp;quot; as the domain of its result.&lt;br /&gt;
&amp;lt;vip&amp;gt;domains&lt;br /&gt;
   compareResult = less; equal; greater.&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== string ====&lt;br /&gt;
&lt;br /&gt;
Wide zero terminated sequence of wide characters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;string&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A string is a sequence of UNICODE characters. It&amp;#039;s implemented as a pointer to the wide zero-terminated array of wide characters. Only assignment and comparison (in the lexicographical sense) operations are applied to values of this domain.&lt;br /&gt;
&lt;br /&gt;
In source code a string literal can be specified as a set of sequences of characters surrounded by the double quotes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;StringLiteral&amp;gt;:&lt;br /&gt;
   &amp;lt;StringLiteralPart&amp;gt;-list&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;StringLiteralPart&amp;gt; :&lt;br /&gt;
   @&amp;quot; AnyCharacter-list-opt &amp;quot;&lt;br /&gt;
   &amp;quot; CharacterValue-list-opt &amp;quot;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A string literal consists of one or more &amp;lt;vpbnf&amp;gt;&amp;lt;StringLiteralPart&amp;gt;&amp;lt;/vpbnf&amp;gt;&amp;#039;s, which are concatenated. &amp;lt;vpbnf&amp;gt;&amp;lt;StringLiteralPart&amp;gt;&amp;lt;/vpbnf&amp;gt;&amp;#039;s starting with &amp;lt;vp&amp;gt;@&amp;lt;/vp&amp;gt; does not use escape sequences, whereas &amp;lt;vpbnf&amp;gt;&amp;lt;StringLiteralPart&amp;gt;&amp;lt;/vpbnf&amp;gt;&amp;#039;s without &amp;lt;vp&amp;gt;@&amp;lt;/vp&amp;gt; uses the following escape sequences:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;vp&amp;gt;\\&amp;lt;/vp&amp;gt; representing &amp;lt;vp&amp;gt;\&amp;lt;/vp&amp;gt;&lt;br /&gt;
*&amp;lt;vp&amp;gt;\t&amp;lt;/vp&amp;gt; representing Tab-character&lt;br /&gt;
*&amp;lt;vp&amp;gt;\n&amp;lt;/vp&amp;gt; representing newline-character&lt;br /&gt;
*&amp;lt;vp&amp;gt;\r&amp;lt;/vp&amp;gt; representing carriage return&lt;br /&gt;
*&amp;lt;vp&amp;gt;\&amp;#039;&amp;lt;/vp&amp;gt; representing single quote&lt;br /&gt;
*&amp;lt;vp&amp;gt;\&amp;quot;&amp;lt;/vp&amp;gt; representing double quote&lt;br /&gt;
*&amp;lt;vp&amp;gt;\u&amp;lt;/vp&amp;gt; followed by exactly four &amp;lt;vpbnf&amp;gt;&amp;lt;HexadecimalDigit&amp;gt;&amp;lt;/vpbnf&amp;gt;&amp;#039;s representing the Unicode character corresponding to the digits.&lt;br /&gt;
&lt;br /&gt;
The double quotes in the string can be represented by the escape-sequence only (the single quote can be represented both with an escape-sequence and a graphical symbol).&lt;br /&gt;
&lt;br /&gt;
==== string8 ====&lt;br /&gt;
&lt;br /&gt;
A term of the built-in &amp;lt;vp&amp;gt;string8&amp;lt;/vp&amp;gt; domain is a sequence of ASCII (one-byte) characters. It is implemented as a pointer to the zero terminated array of ASCII characters. Only assignment and comparison for equality (in the lexicographical sense) operations are applied to the values of this domain. Currently no literals are allowed for this domain.&lt;br /&gt;
&lt;br /&gt;
==== symbol ====&lt;br /&gt;
&lt;br /&gt;
Wide zero terminated sequence of wide characters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;symbol&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similar to a string, a symbol is also a sequence of the UNICODE characters. It&amp;#039;s implemented as a pointer to an entry in a symbol table that contains strings. The operations that can be applied to symbols are the same as for strings.&lt;br /&gt;
&lt;br /&gt;
The image of a symbol is represented with a &amp;#039;&amp;#039;&amp;lt;string_literal&amp;gt;&amp;#039;&amp;#039; (any string surrounded by the double quotes).&lt;br /&gt;
&lt;br /&gt;
Symbols and strings are largely interchangeable but they are stored differently. Symbols are kept in a look-up table and their addresses, rather than the symbols themselves, are stored to represent objects. This means that symbols can be matched very quickly and, if a symbol occurs repeatedly in a program, it can be stored very compactly. Strings are not kept in a look-up table. Visual Prolog examines strings character-by-character whenever they are to be matched.&lt;br /&gt;
&lt;br /&gt;
==== binary ====&lt;br /&gt;
&lt;br /&gt;
Sequence of N bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;binary&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain are used for holding binary data. A binary value is implemented as a pointer to the sequence of bytes that represents the contents of a binary term.&lt;br /&gt;
&lt;br /&gt;
The length of a binary term is situated in the &amp;#039;&amp;#039;&amp;#039;4 bytes&amp;#039;&amp;#039;&amp;#039; immediately preceding this sequence of bytes. The 4 bytes contains:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;TotalNumberOfBytesOccupiedByBinary = ByteLen + 4 &amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;vp&amp;gt;ByteLen&amp;lt;/vp&amp;gt; - is the length of the binary term and 4 is number of bytes occupied by size field.&lt;br /&gt;
&lt;br /&gt;
Only assignment and comparison operations are applied to values of &amp;#039;&amp;#039;&amp;#039;binary domain&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Two binary terms are compared in the following way:&lt;br /&gt;
&lt;br /&gt;
*If they are of different sizes, the bigger is considered larger.&lt;br /&gt;
*Otherwise, they are compared byte by byte, as unsigned values. Comparison stops when two differing bytes are found and the result of their comparison is the result of the comparison of the binary terms. Two binary terms are equal if they have the same sizes and all bytes are equal.&lt;br /&gt;
&lt;br /&gt;
The text syntax for binary images is determined by the &amp;lt;vpbnf&amp;gt;&amp;lt;Binary&amp;gt;&amp;lt;/vpbnf&amp;gt; rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Binary&amp;gt; :&lt;br /&gt;
       $ [ &amp;lt;Byte_value&amp;gt;-comma-sep-list-opt ]&lt;br /&gt;
&amp;lt;Byte_value&amp;gt; :&lt;br /&gt;
      &amp;lt;Expression&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each &amp;#039;&amp;#039;expression&amp;#039;&amp;#039; should be calculate on compiling time and its value should be in the range from &amp;lt;vp&amp;gt;0&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;255&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== binaryNonAtomic ====&lt;br /&gt;
&lt;br /&gt;
Sequence of N bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;binaryNonAtomic&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Same as [[#binary|binary]], but can contain pointers because it is scanned by the garbage collector.&lt;br /&gt;
&lt;br /&gt;
==== integer ====&lt;br /&gt;
&lt;br /&gt;
32 bit signed integer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;integer&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 4 bytes. Arithmetic operations (&amp;lt;vp&amp;gt;+&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;-&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;/&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;*&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;^&amp;lt;/vp&amp;gt;), comparison, assignment, {{lang2|Built-in entities|Operators|div/2-&amp;gt;}}, {{lang2|Built-in entities|Operators|mod/2-&amp;gt;}}, {{lang2|Built-in entities|Operators|quot/2-&amp;gt;}}, and {{lang2|Built-in entities|Operators|rem/2-&amp;gt;}} operations are applied to values of this domain.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is from &amp;lt;vp&amp;gt;-2147483648&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;2147483647&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax for the &amp;lt;vp&amp;gt;integer&amp;lt;/vp&amp;gt; literal is determined by the &amp;lt;vpbnf&amp;gt;&amp;lt;Integer&amp;gt;&amp;lt;/vpbnf&amp;gt; rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Integer&amp;gt; :&lt;br /&gt;
      &amp;lt;Add_operation&amp;gt;-opt 0o &amp;lt;Oct_number&amp;gt;&lt;br /&gt;
      &amp;lt;Add_operation&amp;gt;-opt &amp;lt;Dec_number&amp;gt;&lt;br /&gt;
      &amp;lt;Add_operation&amp;gt;-opt 0x &amp;lt;Hex_number&amp;gt;&lt;br /&gt;
&amp;lt;Add_operation&amp;gt; :&lt;br /&gt;
      +&lt;br /&gt;
      -&lt;br /&gt;
&amp;lt;Oct_number&amp;gt; :&lt;br /&gt;
      &amp;lt;Oct_digit&amp;gt;-list&lt;br /&gt;
&amp;lt;Oct_digit&amp;gt; : one of&lt;br /&gt;
      0 1 2 3 4 5 6 7&lt;br /&gt;
&amp;lt;Dec_number&amp;gt; :&lt;br /&gt;
      &amp;lt;Dec_digit&amp;gt;-list&lt;br /&gt;
&amp;lt;Dec_digit&amp;gt; : one of&lt;br /&gt;
      &amp;lt;Oct_digit&amp;gt; 8 9&lt;br /&gt;
&amp;lt;Hex_number&amp;gt; :&lt;br /&gt;
      &amp;lt;Hex_digit&amp;gt;-list&lt;br /&gt;
&amp;lt;Hex_digit&amp;gt; : one of&lt;br /&gt;
      &amp;lt;Dec_digit&amp;gt; a b c d e f A B C D E F&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== integer64 ====&lt;br /&gt;
&lt;br /&gt;
64 bit signed integer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;integer64&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 8 bytes.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is from &amp;lt;vp&amp;gt;-2^63 = -9223372036854775808&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;2^63-1 = 9223372036854775807&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax for &amp;lt;vp&amp;gt;integer64&amp;lt;/vp&amp;gt; literal is the same as &amp;lt;vpbnf&amp;gt;&amp;lt;Integer&amp;gt;&amp;lt;/vpbnf&amp;gt; rule.&lt;br /&gt;
&lt;br /&gt;
The set of operations for &amp;lt;vp&amp;gt;integer64&amp;lt;/vp&amp;gt; is similar to the one for &amp;lt;vpbnf&amp;gt;&amp;lt;Integer&amp;gt;&amp;lt;/vpbnf&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== integerNative ====&lt;br /&gt;
&lt;br /&gt;
Signed integer number with platform size (32 bit in a 32 bit program; 64 bit in a 64 bit program).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;integerNative&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== unsigned ====&lt;br /&gt;
&lt;br /&gt;
32 bit unsigned integer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;unsigned&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 4 bytes. Arithmetic operations (&amp;lt;vp&amp;gt;+&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;-&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;/&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;*&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;^&amp;lt;/vp&amp;gt;), comparison, assignment, {{lang2|Built-in entities|Operators|div/2-&amp;gt;}}, {{lang2|Built-in entities|Operators|mod/2-&amp;gt;}}, {{lang2|Built-in entities|Operators|rem/2-&amp;gt;}}, and {{lang2|Built-in entities|Operators|quot/2-&amp;gt;}} operations are applied to values of this domain.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is from &amp;lt;vp&amp;gt;0&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;4294967295&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax for &amp;lt;vp&amp;gt;unsigned&amp;lt;/vp&amp;gt; number images is the same as for &amp;lt;vp&amp;gt;integer&amp;lt;/vp&amp;gt; numbers. The usage of minus sign (&amp;lt;vpbnf&amp;gt;&amp;lt;UnaryMinus&amp;gt;&amp;lt;/vpbnf&amp;gt;) is not allowed for an image of an &amp;lt;vp&amp;gt;unsigned&amp;lt;/vp&amp;gt; number.&lt;br /&gt;
&lt;br /&gt;
==== unsigned64 ====&lt;br /&gt;
&lt;br /&gt;
64 bit unsigned integer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;unsigned64&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 8 bytes.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is from &amp;lt;vp&amp;gt;0&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;2^64-1 = 18,446,744,073,709,551,615&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax for &amp;lt;vp&amp;gt;unsigned64&amp;lt;/vp&amp;gt; number images is the same as for &amp;lt;vp&amp;gt;integer64&amp;lt;/vp&amp;gt; numbers. The usage of minus sign (&amp;lt;vpbnf&amp;gt;&amp;lt;UnaryMinus&amp;gt;&amp;lt;/vpbnf&amp;gt;) is not allowed for an image of an &amp;lt;vp&amp;gt;unsigned64&amp;lt;/vp&amp;gt; number.&lt;br /&gt;
&lt;br /&gt;
The set of operations for &amp;lt;vp&amp;gt;unsigned64&amp;lt;/vp&amp;gt; is similar to the one for &amp;lt;vpbnf&amp;gt;&amp;lt;Unsigned&amp;gt;&amp;lt;/vpbnf&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== unsignedNative ====&lt;br /&gt;
&lt;br /&gt;
Unsigned integer number with platform size (32 bit in a 32 bit program; 64 bit in a 64 bit program).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;unsignedNative&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== real ====&lt;br /&gt;
&lt;br /&gt;
Float-pointing number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;real&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 8 bytes. This numerical real domain is introduced for the user&amp;#039;s convenience only. All arithmetic, comparison, and assignment operations are applied to values of &amp;lt;vp&amp;gt;real&amp;lt;/vp&amp;gt; domain.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is &amp;lt;vp&amp;gt;-1.7e+308&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;1.7e+308&amp;lt;/vp&amp;gt;. Values from integral domains are automatically converted to real numbers when necessary.&lt;br /&gt;
&lt;br /&gt;
The syntax for the floating-point number literal is determined by the &amp;lt;vpbnf&amp;gt;&amp;lt;Real&amp;gt;&amp;lt;/vpbnf&amp;gt; rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Real&amp;gt; :&lt;br /&gt;
      &amp;lt;Add_operation&amp;gt;-opt &amp;lt;Fraction&amp;gt; &amp;lt;Exponent&amp;gt;-opt&lt;br /&gt;
&amp;lt;Fraction&amp;gt; :&lt;br /&gt;
      &amp;lt;Dec_number&amp;gt; &amp;lt;Fractional_part&amp;gt;-opt&lt;br /&gt;
&amp;lt;Fractional_part&amp;gt; :&lt;br /&gt;
      . &amp;lt;Dec_number&amp;gt;&lt;br /&gt;
&amp;lt;Exponent&amp;gt; :&lt;br /&gt;
      &amp;lt;Exp&amp;gt; &amp;lt;Add_operation&amp;gt;-opt &amp;lt;Dec_number&amp;gt;&lt;br /&gt;
&amp;lt;Exp&amp;gt; :&lt;br /&gt;
      e&lt;br /&gt;
      E&lt;br /&gt;
&amp;lt;Add_operation&amp;gt; :&lt;br /&gt;
      +&lt;br /&gt;
      -&lt;br /&gt;
&amp;lt;Dec_number&amp;gt; :&lt;br /&gt;
      &amp;lt;Dec_digit&amp;gt;-list&lt;br /&gt;
&amp;lt;Dec_digit&amp;gt; : one of&lt;br /&gt;
      0 1 2 3 4 5 6 7 8 9&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== real32 ====&lt;br /&gt;
&lt;br /&gt;
Float-pointing number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;real32&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 4 bytes. This numerical &amp;lt;vp&amp;gt;real32&amp;lt;/vp&amp;gt; domain is introduced for the user&amp;#039;s convenience only. All arithmetic, comparison, and assignment operations can be applied to values of &amp;lt;vp&amp;gt;real32&amp;lt;/vp&amp;gt; domain.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is &amp;lt;vp&amp;gt;-3.4e+38&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;3.4e+38&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax of real32 literals is the same as &amp;lt;vp&amp;gt;real&amp;lt;/vp&amp;gt; lietrals.&lt;br /&gt;
&lt;br /&gt;
==== pointer ====&lt;br /&gt;
&lt;br /&gt;
A pointer to a memory address.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;pointer&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A pointer directly corresponds to memory addresses. Only the equality operation can be applied to the values of this domain. There is a built-in &amp;#039;&amp;#039;&amp;#039;null&amp;#039;&amp;#039;&amp;#039; constant for this type&lt;br /&gt;
&lt;br /&gt;
==== handle ====&lt;br /&gt;
&lt;br /&gt;
A handle is used for Windows API function call. Values of this domain has the same size as a pointer (i.e. 4 on 32bit platfor and 8 on 64bit platform).&lt;br /&gt;
&lt;br /&gt;
There are no operations for this domain and cannot be converted (except uncheckedConvert) to/from other domains.&lt;br /&gt;
&lt;br /&gt;
There is a built-in [[#nullHandle|nullHandle]] and [[#invalidHandle|invalidHandle]] constant  for this type&lt;br /&gt;
&lt;br /&gt;
==== boolean ====&lt;br /&gt;
&lt;br /&gt;
Boolean values.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;boolean&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This domain is introduced for the user convenience only. It is treated as usual compound domain with the following definition:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;domains&lt;br /&gt;
   boolean = false(); true().&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== factDB ====&lt;br /&gt;
&lt;br /&gt;
Descriptors of named internal databases.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;factDB&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This domain has the following hidden meta-declaration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;domains&lt;br /&gt;
   factDB = struct @factdb( named_internal_database_domain, object ).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All user-defined names of facts sections are the constants of this domain. The compiler automatically builds the corresponding compound terms from such constants whenever it&amp;#039;s in need. At the runtime the 1st field of this structure contains the address of the corresponding domain descriptor and the 2nd field contains either zero (for class facts sections) or pointer to an object (i.e. &amp;lt;vp&amp;gt;This&amp;lt;/vp&amp;gt;, for object facts sections).&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{LanguageReferenceSubarticle|Built-in entities/Domains}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Joachim Tilsted Kristensen</name></author>
	</entry>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Domains&amp;diff=4752</id>
		<title>Language Reference/Built-in entities/Domains</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Domains&amp;diff=4752"/>
		<updated>2020-12-19T16:08:27Z</updated>

		<summary type="html">&lt;p&gt;Joachim Tilsted Kristensen: /* compareResult */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|{{prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|[[#any|any]]&lt;br /&gt;
|Universal term type.&lt;br /&gt;
|-&lt;br /&gt;
|[[#char|char]]&lt;br /&gt;
|Wide (two-bytes) character.&lt;br /&gt;
|-&lt;br /&gt;
|[[#string|string]]&lt;br /&gt;
|Wide zero-terminated sequence of wide characters.&lt;br /&gt;
|-&lt;br /&gt;
|[[#string8|string8]]&lt;br /&gt;
|Zero-terminated sequence of ASCII (one-byte) characters.&lt;br /&gt;
|-&lt;br /&gt;
|[[#symbol|symbol]]&lt;br /&gt;
|Wide zero-terminated sequence of wide characters.&lt;br /&gt;
|-&lt;br /&gt;
|[[#binary|binary]]&lt;br /&gt;
|Sequence of bytes.&lt;br /&gt;
|-&lt;br /&gt;
|[[#binaryNonAtomic|binaryNonAtomic]]&lt;br /&gt;
|Sequence of bytes.&lt;br /&gt;
|-&lt;br /&gt;
|[[#integer|integer]]&lt;br /&gt;
|32 bit signed integer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#integer64|integer64]]&lt;br /&gt;
|64 bit signed integer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#integerNative|integerNative]]&lt;br /&gt;
|Signed integer with platform size (32 bit in a 32 bit program; 64 bit in a 64 bit program).&lt;br /&gt;
|-&lt;br /&gt;
|[[#unsigned|unsigned]]&lt;br /&gt;
|32 bit unsigned integer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#unsigned64|unsigned64]]&lt;br /&gt;
|64 bit unsigned integer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#unsignedNative|unsignedNative]]&lt;br /&gt;
|Unsigned integer with platform size (32 bit in a 32 bit program; 64 bit in a 64 bit program).&lt;br /&gt;
|-&lt;br /&gt;
|[[#real|real]]&lt;br /&gt;
|Float-pointing number.&lt;br /&gt;
|-&lt;br /&gt;
|[[#real32|real32]]&lt;br /&gt;
|Float-pointing number.&lt;br /&gt;
|-&lt;br /&gt;
|[[#pointer|pointer]]&lt;br /&gt;
|pointer to a memory address.&lt;br /&gt;
|-&lt;br /&gt;
|[[#handle|handle]]&lt;br /&gt;
|a handle (e.g. native file and windows handles).&lt;br /&gt;
|-&lt;br /&gt;
|[[#boolean|boolean]]&lt;br /&gt;
|Boolean values.&lt;br /&gt;
|-&lt;br /&gt;
|[[#factDB|factDB]]&lt;br /&gt;
|Descriptors of named internal databases.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compareResult|compareResult]]&lt;br /&gt;
|Values of comparison result.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== any ====&lt;br /&gt;
&lt;br /&gt;
Universal term type.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;any&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The values of this domain are any terms. Such a value contains the reference to the term type library and a term itself.&lt;br /&gt;
&lt;br /&gt;
==== char ====&lt;br /&gt;
&lt;br /&gt;
Wide character.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;char&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The values of this domain are UNICODE characters. Implemented as 2 unsigned bytes.&lt;br /&gt;
&lt;br /&gt;
Only assignment and comparison (in the lexicographical sense) operations are applied to the values of this domain. The image of a character has the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Char_image&amp;gt; :&lt;br /&gt;
      &amp;#039; Char_value &amp;#039;&lt;br /&gt;
&amp;lt;Char_value&amp;gt; :&lt;br /&gt;
      &amp;lt;Letter&amp;gt;&lt;br /&gt;
      &amp;lt;Digit&amp;gt;&lt;br /&gt;
      &amp;lt;Graphical_symbol&amp;gt;&lt;br /&gt;
      \ &amp;lt;Escape_seq&amp;gt;&lt;br /&gt;
&amp;lt;Escape_seq&amp;gt;:&lt;br /&gt;
      t&lt;br /&gt;
      n&lt;br /&gt;
      r&lt;br /&gt;
      \&lt;br /&gt;
      &amp;#039;&lt;br /&gt;
      &amp;quot;&lt;br /&gt;
      u &amp;lt;HHHH&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the syntax above &amp;lt;vpbnf&amp;gt;&amp;lt;HHHH&amp;gt;&amp;lt;/vpbnf&amp;gt; correspond to 4 hexadecimal digits. Also, the backslash symbol and the single quote can be represented by an escape-sequence only.&lt;br /&gt;
&lt;br /&gt;
==== compareResult ====&lt;br /&gt;
&lt;br /&gt;
A built-in domain that represents the result of a comparison. For instance, the built-in procedure {{lang2|Built-in entities|compare|compare/2-&amp;gt;}} has a &amp;quot;compareResult&amp;quot; as its result.&lt;br /&gt;
&amp;lt;vip&amp;gt;domains&lt;br /&gt;
   compareResult = less; equal; greater.&lt;br /&gt;
&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== string ====&lt;br /&gt;
&lt;br /&gt;
Wide zero terminated sequence of wide characters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;string&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A string is a sequence of UNICODE characters. It&amp;#039;s implemented as a pointer to the wide zero-terminated array of wide characters. Only assignment and comparison (in the lexicographical sense) operations are applied to values of this domain.&lt;br /&gt;
&lt;br /&gt;
In source code a string literal can be specified as a set of sequences of characters surrounded by the double quotes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;StringLiteral&amp;gt;:&lt;br /&gt;
   &amp;lt;StringLiteralPart&amp;gt;-list&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;StringLiteralPart&amp;gt; :&lt;br /&gt;
   @&amp;quot; AnyCharacter-list-opt &amp;quot;&lt;br /&gt;
   &amp;quot; CharacterValue-list-opt &amp;quot;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A string literal consists of one or more &amp;lt;vpbnf&amp;gt;&amp;lt;StringLiteralPart&amp;gt;&amp;lt;/vpbnf&amp;gt;&amp;#039;s, which are concatenated. &amp;lt;vpbnf&amp;gt;&amp;lt;StringLiteralPart&amp;gt;&amp;lt;/vpbnf&amp;gt;&amp;#039;s starting with &amp;lt;vp&amp;gt;@&amp;lt;/vp&amp;gt; does not use escape sequences, whereas &amp;lt;vpbnf&amp;gt;&amp;lt;StringLiteralPart&amp;gt;&amp;lt;/vpbnf&amp;gt;&amp;#039;s without &amp;lt;vp&amp;gt;@&amp;lt;/vp&amp;gt; uses the following escape sequences:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;vp&amp;gt;\\&amp;lt;/vp&amp;gt; representing &amp;lt;vp&amp;gt;\&amp;lt;/vp&amp;gt;&lt;br /&gt;
*&amp;lt;vp&amp;gt;\t&amp;lt;/vp&amp;gt; representing Tab-character&lt;br /&gt;
*&amp;lt;vp&amp;gt;\n&amp;lt;/vp&amp;gt; representing newline-character&lt;br /&gt;
*&amp;lt;vp&amp;gt;\r&amp;lt;/vp&amp;gt; representing carriage return&lt;br /&gt;
*&amp;lt;vp&amp;gt;\&amp;#039;&amp;lt;/vp&amp;gt; representing single quote&lt;br /&gt;
*&amp;lt;vp&amp;gt;\&amp;quot;&amp;lt;/vp&amp;gt; representing double quote&lt;br /&gt;
*&amp;lt;vp&amp;gt;\u&amp;lt;/vp&amp;gt; followed by exactly four &amp;lt;vpbnf&amp;gt;&amp;lt;HexadecimalDigit&amp;gt;&amp;lt;/vpbnf&amp;gt;&amp;#039;s representing the Unicode character corresponding to the digits.&lt;br /&gt;
&lt;br /&gt;
The double quotes in the string can be represented by the escape-sequence only (the single quote can be represented both with an escape-sequence and a graphical symbol).&lt;br /&gt;
&lt;br /&gt;
==== string8 ====&lt;br /&gt;
&lt;br /&gt;
A term of the built-in &amp;lt;vp&amp;gt;string8&amp;lt;/vp&amp;gt; domain is a sequence of ASCII (one-byte) characters. It is implemented as a pointer to the zero terminated array of ASCII characters. Only assignment and comparison for equality (in the lexicographical sense) operations are applied to the values of this domain. Currently no literals are allowed for this domain.&lt;br /&gt;
&lt;br /&gt;
==== symbol ====&lt;br /&gt;
&lt;br /&gt;
Wide zero terminated sequence of wide characters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;symbol&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similar to a string, a symbol is also a sequence of the UNICODE characters. It&amp;#039;s implemented as a pointer to an entry in a symbol table that contains strings. The operations that can be applied to symbols are the same as for strings.&lt;br /&gt;
&lt;br /&gt;
The image of a symbol is represented with a &amp;#039;&amp;#039;&amp;lt;string_literal&amp;gt;&amp;#039;&amp;#039; (any string surrounded by the double quotes).&lt;br /&gt;
&lt;br /&gt;
Symbols and strings are largely interchangeable but they are stored differently. Symbols are kept in a look-up table and their addresses, rather than the symbols themselves, are stored to represent objects. This means that symbols can be matched very quickly and, if a symbol occurs repeatedly in a program, it can be stored very compactly. Strings are not kept in a look-up table. Visual Prolog examines strings character-by-character whenever they are to be matched.&lt;br /&gt;
&lt;br /&gt;
==== binary ====&lt;br /&gt;
&lt;br /&gt;
Sequence of N bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;binary&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain are used for holding binary data. A binary value is implemented as a pointer to the sequence of bytes that represents the contents of a binary term.&lt;br /&gt;
&lt;br /&gt;
The length of a binary term is situated in the &amp;#039;&amp;#039;&amp;#039;4 bytes&amp;#039;&amp;#039;&amp;#039; immediately preceding this sequence of bytes. The 4 bytes contains:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;TotalNumberOfBytesOccupiedByBinary = ByteLen + 4 &amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;vp&amp;gt;ByteLen&amp;lt;/vp&amp;gt; - is the length of the binary term and 4 is number of bytes occupied by size field.&lt;br /&gt;
&lt;br /&gt;
Only assignment and comparison operations are applied to values of &amp;#039;&amp;#039;&amp;#039;binary domain&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Two binary terms are compared in the following way:&lt;br /&gt;
&lt;br /&gt;
*If they are of different sizes, the bigger is considered larger.&lt;br /&gt;
*Otherwise, they are compared byte by byte, as unsigned values. Comparison stops when two differing bytes are found and the result of their comparison is the result of the comparison of the binary terms. Two binary terms are equal if they have the same sizes and all bytes are equal.&lt;br /&gt;
&lt;br /&gt;
The text syntax for binary images is determined by the &amp;lt;vpbnf&amp;gt;&amp;lt;Binary&amp;gt;&amp;lt;/vpbnf&amp;gt; rules:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Binary&amp;gt; :&lt;br /&gt;
       $ [ &amp;lt;Byte_value&amp;gt;-comma-sep-list-opt ]&lt;br /&gt;
&amp;lt;Byte_value&amp;gt; :&lt;br /&gt;
      &amp;lt;Expression&amp;gt;&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each &amp;#039;&amp;#039;expression&amp;#039;&amp;#039; should be calculate on compiling time and its value should be in the range from &amp;lt;vp&amp;gt;0&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;255&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== binaryNonAtomic ====&lt;br /&gt;
&lt;br /&gt;
Sequence of N bytes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;binaryNonAtomic&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Same as [[#binary|binary]], but can contain pointers because it is scanned by the garbage collector.&lt;br /&gt;
&lt;br /&gt;
==== integer ====&lt;br /&gt;
&lt;br /&gt;
32 bit signed integer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;integer&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 4 bytes. Arithmetic operations (&amp;lt;vp&amp;gt;+&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;-&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;/&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;*&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;^&amp;lt;/vp&amp;gt;), comparison, assignment, {{lang2|Built-in entities|Operators|div/2-&amp;gt;}}, {{lang2|Built-in entities|Operators|mod/2-&amp;gt;}}, {{lang2|Built-in entities|Operators|quot/2-&amp;gt;}}, and {{lang2|Built-in entities|Operators|rem/2-&amp;gt;}} operations are applied to values of this domain.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is from &amp;lt;vp&amp;gt;-2147483648&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;2147483647&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax for the &amp;lt;vp&amp;gt;integer&amp;lt;/vp&amp;gt; literal is determined by the &amp;lt;vpbnf&amp;gt;&amp;lt;Integer&amp;gt;&amp;lt;/vpbnf&amp;gt; rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Integer&amp;gt; :&lt;br /&gt;
      &amp;lt;Add_operation&amp;gt;-opt 0o &amp;lt;Oct_number&amp;gt;&lt;br /&gt;
      &amp;lt;Add_operation&amp;gt;-opt &amp;lt;Dec_number&amp;gt;&lt;br /&gt;
      &amp;lt;Add_operation&amp;gt;-opt 0x &amp;lt;Hex_number&amp;gt;&lt;br /&gt;
&amp;lt;Add_operation&amp;gt; :&lt;br /&gt;
      +&lt;br /&gt;
      -&lt;br /&gt;
&amp;lt;Oct_number&amp;gt; :&lt;br /&gt;
      &amp;lt;Oct_digit&amp;gt;-list&lt;br /&gt;
&amp;lt;Oct_digit&amp;gt; : one of&lt;br /&gt;
      0 1 2 3 4 5 6 7&lt;br /&gt;
&amp;lt;Dec_number&amp;gt; :&lt;br /&gt;
      &amp;lt;Dec_digit&amp;gt;-list&lt;br /&gt;
&amp;lt;Dec_digit&amp;gt; : one of&lt;br /&gt;
      &amp;lt;Oct_digit&amp;gt; 8 9&lt;br /&gt;
&amp;lt;Hex_number&amp;gt; :&lt;br /&gt;
      &amp;lt;Hex_digit&amp;gt;-list&lt;br /&gt;
&amp;lt;Hex_digit&amp;gt; : one of&lt;br /&gt;
      &amp;lt;Dec_digit&amp;gt; a b c d e f A B C D E F&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== integer64 ====&lt;br /&gt;
&lt;br /&gt;
64 bit signed integer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;integer64&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 8 bytes.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is from &amp;lt;vp&amp;gt;-2^63 = -9223372036854775808&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;2^63-1 = 9223372036854775807&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax for &amp;lt;vp&amp;gt;integer64&amp;lt;/vp&amp;gt; literal is the same as &amp;lt;vpbnf&amp;gt;&amp;lt;Integer&amp;gt;&amp;lt;/vpbnf&amp;gt; rule.&lt;br /&gt;
&lt;br /&gt;
The set of operations for &amp;lt;vp&amp;gt;integer64&amp;lt;/vp&amp;gt; is similar to the one for &amp;lt;vpbnf&amp;gt;&amp;lt;Integer&amp;gt;&amp;lt;/vpbnf&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== integerNative ====&lt;br /&gt;
&lt;br /&gt;
Signed integer number with platform size (32 bit in a 32 bit program; 64 bit in a 64 bit program).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;integerNative&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== unsigned ====&lt;br /&gt;
&lt;br /&gt;
32 bit unsigned integer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;unsigned&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 4 bytes. Arithmetic operations (&amp;lt;vp&amp;gt;+&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;-&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;/&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;*&amp;lt;/vp&amp;gt;, &amp;lt;vp&amp;gt;^&amp;lt;/vp&amp;gt;), comparison, assignment, {{lang2|Built-in entities|Operators|div/2-&amp;gt;}}, {{lang2|Built-in entities|Operators|mod/2-&amp;gt;}}, {{lang2|Built-in entities|Operators|rem/2-&amp;gt;}}, and {{lang2|Built-in entities|Operators|quot/2-&amp;gt;}} operations are applied to values of this domain.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is from &amp;lt;vp&amp;gt;0&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;4294967295&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax for &amp;lt;vp&amp;gt;unsigned&amp;lt;/vp&amp;gt; number images is the same as for &amp;lt;vp&amp;gt;integer&amp;lt;/vp&amp;gt; numbers. The usage of minus sign (&amp;lt;vpbnf&amp;gt;&amp;lt;UnaryMinus&amp;gt;&amp;lt;/vpbnf&amp;gt;) is not allowed for an image of an &amp;lt;vp&amp;gt;unsigned&amp;lt;/vp&amp;gt; number.&lt;br /&gt;
&lt;br /&gt;
==== unsigned64 ====&lt;br /&gt;
&lt;br /&gt;
64 bit unsigned integer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;unsigned64&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 8 bytes.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is from &amp;lt;vp&amp;gt;0&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;2^64-1 = 18,446,744,073,709,551,615&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax for &amp;lt;vp&amp;gt;unsigned64&amp;lt;/vp&amp;gt; number images is the same as for &amp;lt;vp&amp;gt;integer64&amp;lt;/vp&amp;gt; numbers. The usage of minus sign (&amp;lt;vpbnf&amp;gt;&amp;lt;UnaryMinus&amp;gt;&amp;lt;/vpbnf&amp;gt;) is not allowed for an image of an &amp;lt;vp&amp;gt;unsigned64&amp;lt;/vp&amp;gt; number.&lt;br /&gt;
&lt;br /&gt;
The set of operations for &amp;lt;vp&amp;gt;unsigned64&amp;lt;/vp&amp;gt; is similar to the one for &amp;lt;vpbnf&amp;gt;&amp;lt;Unsigned&amp;gt;&amp;lt;/vpbnf&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== unsignedNative ====&lt;br /&gt;
&lt;br /&gt;
Unsigned integer number with platform size (32 bit in a 32 bit program; 64 bit in a 64 bit program).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;unsignedNative&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== real ====&lt;br /&gt;
&lt;br /&gt;
Float-pointing number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;real&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 8 bytes. This numerical real domain is introduced for the user&amp;#039;s convenience only. All arithmetic, comparison, and assignment operations are applied to values of &amp;lt;vp&amp;gt;real&amp;lt;/vp&amp;gt; domain.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is &amp;lt;vp&amp;gt;-1.7e+308&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;1.7e+308&amp;lt;/vp&amp;gt;. Values from integral domains are automatically converted to real numbers when necessary.&lt;br /&gt;
&lt;br /&gt;
The syntax for the floating-point number literal is determined by the &amp;lt;vpbnf&amp;gt;&amp;lt;Real&amp;gt;&amp;lt;/vpbnf&amp;gt; rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vipbnf&amp;gt;&amp;lt;Real&amp;gt; :&lt;br /&gt;
      &amp;lt;Add_operation&amp;gt;-opt &amp;lt;Fraction&amp;gt; &amp;lt;Exponent&amp;gt;-opt&lt;br /&gt;
&amp;lt;Fraction&amp;gt; :&lt;br /&gt;
      &amp;lt;Dec_number&amp;gt; &amp;lt;Fractional_part&amp;gt;-opt&lt;br /&gt;
&amp;lt;Fractional_part&amp;gt; :&lt;br /&gt;
      . &amp;lt;Dec_number&amp;gt;&lt;br /&gt;
&amp;lt;Exponent&amp;gt; :&lt;br /&gt;
      &amp;lt;Exp&amp;gt; &amp;lt;Add_operation&amp;gt;-opt &amp;lt;Dec_number&amp;gt;&lt;br /&gt;
&amp;lt;Exp&amp;gt; :&lt;br /&gt;
      e&lt;br /&gt;
      E&lt;br /&gt;
&amp;lt;Add_operation&amp;gt; :&lt;br /&gt;
      +&lt;br /&gt;
      -&lt;br /&gt;
&amp;lt;Dec_number&amp;gt; :&lt;br /&gt;
      &amp;lt;Dec_digit&amp;gt;-list&lt;br /&gt;
&amp;lt;Dec_digit&amp;gt; : one of&lt;br /&gt;
      0 1 2 3 4 5 6 7 8 9&amp;lt;/vipbnf&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== real32 ====&lt;br /&gt;
&lt;br /&gt;
Float-pointing number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;real32&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Values of this domain occupy 4 bytes. This numerical &amp;lt;vp&amp;gt;real32&amp;lt;/vp&amp;gt; domain is introduced for the user&amp;#039;s convenience only. All arithmetic, comparison, and assignment operations can be applied to values of &amp;lt;vp&amp;gt;real32&amp;lt;/vp&amp;gt; domain.&lt;br /&gt;
&lt;br /&gt;
The permitted number range is &amp;lt;vp&amp;gt;-3.4e+38&amp;lt;/vp&amp;gt; to &amp;lt;vp&amp;gt;3.4e+38&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The syntax of real32 literals is the same as &amp;lt;vp&amp;gt;real&amp;lt;/vp&amp;gt; lietrals.&lt;br /&gt;
&lt;br /&gt;
==== pointer ====&lt;br /&gt;
&lt;br /&gt;
A pointer to a memory address.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;pointer&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A pointer directly corresponds to memory addresses. Only the equality operation can be applied to the values of this domain. There is a built-in &amp;#039;&amp;#039;&amp;#039;null&amp;#039;&amp;#039;&amp;#039; constant for this type&lt;br /&gt;
&lt;br /&gt;
==== handle ====&lt;br /&gt;
&lt;br /&gt;
A handle is used for Windows API function call. Values of this domain has the same size as a pointer (i.e. 4 on 32bit platfor and 8 on 64bit platform).&lt;br /&gt;
&lt;br /&gt;
There are no operations for this domain and cannot be converted (except uncheckedConvert) to/from other domains.&lt;br /&gt;
&lt;br /&gt;
There is a built-in [[#nullHandle|nullHandle]] and [[#invalidHandle|invalidHandle]] constant  for this type&lt;br /&gt;
&lt;br /&gt;
==== boolean ====&lt;br /&gt;
&lt;br /&gt;
Boolean values.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;boolean&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This domain is introduced for the user convenience only. It is treated as usual compound domain with the following definition:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;domains&lt;br /&gt;
   boolean = false(); true().&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== factDB ====&lt;br /&gt;
&lt;br /&gt;
Descriptors of named internal databases.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;factDB&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This domain has the following hidden meta-declaration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;domains&lt;br /&gt;
   factDB = struct @factdb( named_internal_database_domain, object ).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All user-defined names of facts sections are the constants of this domain. The compiler automatically builds the corresponding compound terms from such constants whenever it&amp;#039;s in need. At the runtime the 1st field of this structure contains the address of the corresponding domain descriptor and the 2nd field contains either zero (for class facts sections) or pointer to an object (i.e. &amp;lt;vp&amp;gt;This&amp;lt;/vp&amp;gt;, for object facts sections).&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{LanguageReferenceSubarticle|Built-in entities/Domains}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Joachim Tilsted Kristensen</name></author>
	</entry>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Constants&amp;diff=4751</id>
		<title>Language Reference/Built-in entities/Constants</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Constants&amp;diff=4751"/>
		<updated>2020-12-19T15:53:46Z</updated>

		<summary type="html">&lt;p&gt;Joachim Tilsted Kristensen: /* invalidHandle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|{{prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|[[#compilation_date|compilation_date]]&lt;br /&gt;
|Compilation date.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compilation_time|compilation_time]]&lt;br /&gt;
|Compilation time.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compiler_buildDate|compiler_buildDate]]&lt;br /&gt;
|Build date of a compiler.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compiler_version|compiler_version]]&lt;br /&gt;
|A compiler version.&lt;br /&gt;
|-&lt;br /&gt;
|[[#maxFloatDigits|maxFloatDigits]]&lt;br /&gt;
|Defines the maximal value of &amp;quot;digits&amp;quot;, which is supported by the compiler.&lt;br /&gt;
|-&lt;br /&gt;
|[[#null|null]]&lt;br /&gt;
|The default NULL pointer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#nullHandle|nullHandle]]&lt;br /&gt;
|A special constant of a handle type with the zero value.&lt;br /&gt;
|-&lt;br /&gt;
|[[#invalidHandle|invalidHandle]]&lt;br /&gt;
|A special constant of a handle type with the invalid (-1) value.&lt;br /&gt;
|-&lt;br /&gt;
|[[#platform_bits|platform_bits]]&lt;br /&gt;
|Defines the digital capacity of compilation platform.&lt;br /&gt;
|-&lt;br /&gt;
|[[#platform_name|platform_name]]&lt;br /&gt;
|Defines the target platform name.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== compilation_date ====&lt;br /&gt;
&lt;br /&gt;
Compilation date. Here &amp;#039;&amp;#039;YYYY&amp;#039;&amp;#039; means the number of a year, &amp;#039;&amp;#039;MM&amp;#039;&amp;#039; means a month number, and &amp;#039;&amp;#039;DD&amp;#039;&amp;#039; means a day number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compilation_date : string = &amp;quot;YYYY-MM-DD&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compilation_time ====&lt;br /&gt;
&lt;br /&gt;
Compilation time. Here &amp;#039;&amp;#039;HH&amp;#039;&amp;#039; means hours, &amp;#039;&amp;#039;MM&amp;#039;&amp;#039; means minutes, and &amp;#039;&amp;#039;SS &amp;#039;&amp;#039;means seconds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compilation_time : string = &amp;quot;HH:MM:SS&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compiler_buildDate ====&lt;br /&gt;
&lt;br /&gt;
Build date of the compiler.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compiler_buildDate : string = &amp;quot;YYYY-MM-DD HH:MM&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compiler_version ====&lt;br /&gt;
&lt;br /&gt;
A compiler version. This value depends upon the compiler version.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compiler_version = 6003.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== maxFloatDigits ====&lt;br /&gt;
&lt;br /&gt;
Defines the maximal value of &amp;quot;digits&amp;quot;, which is supported by the compiler.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;maxFloatDigits = 16.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== null ====&lt;br /&gt;
&lt;br /&gt;
A constant of type &amp;quot;pointer&amp;quot; with the value &amp;quot;0&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;null : pointer = uncheckedConvert(pointer, 0).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== nullHandle ====&lt;br /&gt;
&lt;br /&gt;
A constant of type &amp;quot;handle&amp;quot; with the value &amp;quot;0&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;nullHandle : handle = uncheckedConvert(handle, 0).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== invalidHandle ====&lt;br /&gt;
&lt;br /&gt;
A constant of type &amp;quot;handle&amp;quot; with the invalid (for a handle) value &amp;quot;-1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;invalidHandle : handle = uncheckedConvert(handle, -1).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== platform_bits ====&lt;br /&gt;
&lt;br /&gt;
Defines the digital capacity of compilation platform.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;platform_bits = 32.&lt;br /&gt;
or&lt;br /&gt;
platform_bits = 64.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== platform_name ====&lt;br /&gt;
&lt;br /&gt;
Defines the target platform name.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;platform_name : string = &amp;quot;Windows 32bits&amp;quot;.&lt;br /&gt;
or&lt;br /&gt;
platform_name : string = &amp;quot;Windows 64bits&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{LanguageReferenceSubarticle|Built-in entities/Constants}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Joachim Tilsted Kristensen</name></author>
	</entry>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Constants&amp;diff=4750</id>
		<title>Language Reference/Built-in entities/Constants</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Constants&amp;diff=4750"/>
		<updated>2020-12-19T15:52:40Z</updated>

		<summary type="html">&lt;p&gt;Joachim Tilsted Kristensen: /* nullHandle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|{{prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|[[#compilation_date|compilation_date]]&lt;br /&gt;
|Compilation date.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compilation_time|compilation_time]]&lt;br /&gt;
|Compilation time.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compiler_buildDate|compiler_buildDate]]&lt;br /&gt;
|Build date of a compiler.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compiler_version|compiler_version]]&lt;br /&gt;
|A compiler version.&lt;br /&gt;
|-&lt;br /&gt;
|[[#maxFloatDigits|maxFloatDigits]]&lt;br /&gt;
|Defines the maximal value of &amp;quot;digits&amp;quot;, which is supported by the compiler.&lt;br /&gt;
|-&lt;br /&gt;
|[[#null|null]]&lt;br /&gt;
|The default NULL pointer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#nullHandle|nullHandle]]&lt;br /&gt;
|A special constant of a handle type with the zero value.&lt;br /&gt;
|-&lt;br /&gt;
|[[#invalidHandle|invalidHandle]]&lt;br /&gt;
|A special constant of a handle type with the invalid (-1) value.&lt;br /&gt;
|-&lt;br /&gt;
|[[#platform_bits|platform_bits]]&lt;br /&gt;
|Defines the digital capacity of compilation platform.&lt;br /&gt;
|-&lt;br /&gt;
|[[#platform_name|platform_name]]&lt;br /&gt;
|Defines the target platform name.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== compilation_date ====&lt;br /&gt;
&lt;br /&gt;
Compilation date. Here &amp;#039;&amp;#039;YYYY&amp;#039;&amp;#039; means the number of a year, &amp;#039;&amp;#039;MM&amp;#039;&amp;#039; means a month number, and &amp;#039;&amp;#039;DD&amp;#039;&amp;#039; means a day number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compilation_date : string = &amp;quot;YYYY-MM-DD&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compilation_time ====&lt;br /&gt;
&lt;br /&gt;
Compilation time. Here &amp;#039;&amp;#039;HH&amp;#039;&amp;#039; means hours, &amp;#039;&amp;#039;MM&amp;#039;&amp;#039; means minutes, and &amp;#039;&amp;#039;SS &amp;#039;&amp;#039;means seconds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compilation_time : string = &amp;quot;HH:MM:SS&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compiler_buildDate ====&lt;br /&gt;
&lt;br /&gt;
Build date of the compiler.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compiler_buildDate : string = &amp;quot;YYYY-MM-DD HH:MM&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compiler_version ====&lt;br /&gt;
&lt;br /&gt;
A compiler version. This value depends upon the compiler version.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compiler_version = 6003.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== maxFloatDigits ====&lt;br /&gt;
&lt;br /&gt;
Defines the maximal value of &amp;quot;digits&amp;quot;, which is supported by the compiler.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;maxFloatDigits = 16.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== null ====&lt;br /&gt;
&lt;br /&gt;
A constant of type &amp;quot;pointer&amp;quot; with the value &amp;quot;0&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;null : pointer = uncheckedConvert(pointer, 0).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== nullHandle ====&lt;br /&gt;
&lt;br /&gt;
A constant of type &amp;quot;handle&amp;quot; with the value &amp;quot;0&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;nullHandle : handle = uncheckedConvert(handle, 0).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== invalidHandle ====&lt;br /&gt;
&lt;br /&gt;
A special constant of a handle type with the invalid (-1) value.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;invalidHandle : handle = uncheckedConvert(handle, -1).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== platform_bits ====&lt;br /&gt;
&lt;br /&gt;
Defines the digital capacity of compilation platform.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;platform_bits = 32.&lt;br /&gt;
or&lt;br /&gt;
platform_bits = 64.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== platform_name ====&lt;br /&gt;
&lt;br /&gt;
Defines the target platform name.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;platform_name : string = &amp;quot;Windows 32bits&amp;quot;.&lt;br /&gt;
or&lt;br /&gt;
platform_name : string = &amp;quot;Windows 64bits&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{LanguageReferenceSubarticle|Built-in entities/Constants}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Joachim Tilsted Kristensen</name></author>
	</entry>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Constants&amp;diff=4749</id>
		<title>Language Reference/Built-in entities/Constants</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Constants&amp;diff=4749"/>
		<updated>2020-12-19T15:52:28Z</updated>

		<summary type="html">&lt;p&gt;Joachim Tilsted Kristensen: /* null */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|{{prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|[[#compilation_date|compilation_date]]&lt;br /&gt;
|Compilation date.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compilation_time|compilation_time]]&lt;br /&gt;
|Compilation time.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compiler_buildDate|compiler_buildDate]]&lt;br /&gt;
|Build date of a compiler.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compiler_version|compiler_version]]&lt;br /&gt;
|A compiler version.&lt;br /&gt;
|-&lt;br /&gt;
|[[#maxFloatDigits|maxFloatDigits]]&lt;br /&gt;
|Defines the maximal value of &amp;quot;digits&amp;quot;, which is supported by the compiler.&lt;br /&gt;
|-&lt;br /&gt;
|[[#null|null]]&lt;br /&gt;
|The default NULL pointer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#nullHandle|nullHandle]]&lt;br /&gt;
|A special constant of a handle type with the zero value.&lt;br /&gt;
|-&lt;br /&gt;
|[[#invalidHandle|invalidHandle]]&lt;br /&gt;
|A special constant of a handle type with the invalid (-1) value.&lt;br /&gt;
|-&lt;br /&gt;
|[[#platform_bits|platform_bits]]&lt;br /&gt;
|Defines the digital capacity of compilation platform.&lt;br /&gt;
|-&lt;br /&gt;
|[[#platform_name|platform_name]]&lt;br /&gt;
|Defines the target platform name.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== compilation_date ====&lt;br /&gt;
&lt;br /&gt;
Compilation date. Here &amp;#039;&amp;#039;YYYY&amp;#039;&amp;#039; means the number of a year, &amp;#039;&amp;#039;MM&amp;#039;&amp;#039; means a month number, and &amp;#039;&amp;#039;DD&amp;#039;&amp;#039; means a day number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compilation_date : string = &amp;quot;YYYY-MM-DD&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compilation_time ====&lt;br /&gt;
&lt;br /&gt;
Compilation time. Here &amp;#039;&amp;#039;HH&amp;#039;&amp;#039; means hours, &amp;#039;&amp;#039;MM&amp;#039;&amp;#039; means minutes, and &amp;#039;&amp;#039;SS &amp;#039;&amp;#039;means seconds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compilation_time : string = &amp;quot;HH:MM:SS&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compiler_buildDate ====&lt;br /&gt;
&lt;br /&gt;
Build date of the compiler.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compiler_buildDate : string = &amp;quot;YYYY-MM-DD HH:MM&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compiler_version ====&lt;br /&gt;
&lt;br /&gt;
A compiler version. This value depends upon the compiler version.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compiler_version = 6003.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== maxFloatDigits ====&lt;br /&gt;
&lt;br /&gt;
Defines the maximal value of &amp;quot;digits&amp;quot;, which is supported by the compiler.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;maxFloatDigits = 16.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== null ====&lt;br /&gt;
&lt;br /&gt;
A constant of type &amp;quot;pointer&amp;quot; with the value &amp;quot;0&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;null : pointer = uncheckedConvert(pointer, 0).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== nullHandle ====&lt;br /&gt;
&lt;br /&gt;
A constant of type &amp;quot;handle&amp;quot; with the value &amp;quot;zero&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;nullHandle : handle = uncheckedConvert(handle, 0).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== invalidHandle ====&lt;br /&gt;
&lt;br /&gt;
A special constant of a handle type with the invalid (-1) value.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;invalidHandle : handle = uncheckedConvert(handle, -1).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== platform_bits ====&lt;br /&gt;
&lt;br /&gt;
Defines the digital capacity of compilation platform.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;platform_bits = 32.&lt;br /&gt;
or&lt;br /&gt;
platform_bits = 64.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== platform_name ====&lt;br /&gt;
&lt;br /&gt;
Defines the target platform name.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;platform_name : string = &amp;quot;Windows 32bits&amp;quot;.&lt;br /&gt;
or&lt;br /&gt;
platform_name : string = &amp;quot;Windows 64bits&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{LanguageReferenceSubarticle|Built-in entities/Constants}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Joachim Tilsted Kristensen</name></author>
	</entry>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Constants&amp;diff=4748</id>
		<title>Language Reference/Built-in entities/Constants</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Constants&amp;diff=4748"/>
		<updated>2020-12-19T15:50:44Z</updated>

		<summary type="html">&lt;p&gt;Joachim Tilsted Kristensen: /* nullHandle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|{{prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|[[#compilation_date|compilation_date]]&lt;br /&gt;
|Compilation date.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compilation_time|compilation_time]]&lt;br /&gt;
|Compilation time.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compiler_buildDate|compiler_buildDate]]&lt;br /&gt;
|Build date of a compiler.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compiler_version|compiler_version]]&lt;br /&gt;
|A compiler version.&lt;br /&gt;
|-&lt;br /&gt;
|[[#maxFloatDigits|maxFloatDigits]]&lt;br /&gt;
|Defines the maximal value of &amp;quot;digits&amp;quot;, which is supported by the compiler.&lt;br /&gt;
|-&lt;br /&gt;
|[[#null|null]]&lt;br /&gt;
|The default NULL pointer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#nullHandle|nullHandle]]&lt;br /&gt;
|A special constant of a handle type with the zero value.&lt;br /&gt;
|-&lt;br /&gt;
|[[#invalidHandle|invalidHandle]]&lt;br /&gt;
|A special constant of a handle type with the invalid (-1) value.&lt;br /&gt;
|-&lt;br /&gt;
|[[#platform_bits|platform_bits]]&lt;br /&gt;
|Defines the digital capacity of compilation platform.&lt;br /&gt;
|-&lt;br /&gt;
|[[#platform_name|platform_name]]&lt;br /&gt;
|Defines the target platform name.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== compilation_date ====&lt;br /&gt;
&lt;br /&gt;
Compilation date. Here &amp;#039;&amp;#039;YYYY&amp;#039;&amp;#039; means the number of a year, &amp;#039;&amp;#039;MM&amp;#039;&amp;#039; means a month number, and &amp;#039;&amp;#039;DD&amp;#039;&amp;#039; means a day number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compilation_date : string = &amp;quot;YYYY-MM-DD&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compilation_time ====&lt;br /&gt;
&lt;br /&gt;
Compilation time. Here &amp;#039;&amp;#039;HH&amp;#039;&amp;#039; means hours, &amp;#039;&amp;#039;MM&amp;#039;&amp;#039; means minutes, and &amp;#039;&amp;#039;SS &amp;#039;&amp;#039;means seconds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compilation_time : string = &amp;quot;HH:MM:SS&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compiler_buildDate ====&lt;br /&gt;
&lt;br /&gt;
Build date of the compiler.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compiler_buildDate : string = &amp;quot;YYYY-MM-DD HH:MM&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compiler_version ====&lt;br /&gt;
&lt;br /&gt;
A compiler version. This value depends upon the compiler version.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compiler_version = 6003.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== maxFloatDigits ====&lt;br /&gt;
&lt;br /&gt;
Defines the maximal value of &amp;quot;digits&amp;quot;, which is supported by the compiler.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;maxFloatDigits = 16.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== null ====&lt;br /&gt;
&lt;br /&gt;
A constant of type pointer with the value zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;null : pointer = uncheckedConvert(pointer, 0).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== nullHandle ====&lt;br /&gt;
&lt;br /&gt;
A constant of type &amp;quot;handle&amp;quot; with the value &amp;quot;zero&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;nullHandle : handle = uncheckedConvert(handle, 0).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== invalidHandle ====&lt;br /&gt;
&lt;br /&gt;
A special constant of a handle type with the invalid (-1) value.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;invalidHandle : handle = uncheckedConvert(handle, -1).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== platform_bits ====&lt;br /&gt;
&lt;br /&gt;
Defines the digital capacity of compilation platform.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;platform_bits = 32.&lt;br /&gt;
or&lt;br /&gt;
platform_bits = 64.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== platform_name ====&lt;br /&gt;
&lt;br /&gt;
Defines the target platform name.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;platform_name : string = &amp;quot;Windows 32bits&amp;quot;.&lt;br /&gt;
or&lt;br /&gt;
platform_name : string = &amp;quot;Windows 64bits&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{LanguageReferenceSubarticle|Built-in entities/Constants}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Joachim Tilsted Kristensen</name></author>
	</entry>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Constants&amp;diff=4747</id>
		<title>Language Reference/Built-in entities/Constants</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Constants&amp;diff=4747"/>
		<updated>2020-12-19T15:50:12Z</updated>

		<summary type="html">&lt;p&gt;Joachim Tilsted Kristensen: /* null */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|{{prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|[[#compilation_date|compilation_date]]&lt;br /&gt;
|Compilation date.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compilation_time|compilation_time]]&lt;br /&gt;
|Compilation time.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compiler_buildDate|compiler_buildDate]]&lt;br /&gt;
|Build date of a compiler.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compiler_version|compiler_version]]&lt;br /&gt;
|A compiler version.&lt;br /&gt;
|-&lt;br /&gt;
|[[#maxFloatDigits|maxFloatDigits]]&lt;br /&gt;
|Defines the maximal value of &amp;quot;digits&amp;quot;, which is supported by the compiler.&lt;br /&gt;
|-&lt;br /&gt;
|[[#null|null]]&lt;br /&gt;
|The default NULL pointer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#nullHandle|nullHandle]]&lt;br /&gt;
|A special constant of a handle type with the zero value.&lt;br /&gt;
|-&lt;br /&gt;
|[[#invalidHandle|invalidHandle]]&lt;br /&gt;
|A special constant of a handle type with the invalid (-1) value.&lt;br /&gt;
|-&lt;br /&gt;
|[[#platform_bits|platform_bits]]&lt;br /&gt;
|Defines the digital capacity of compilation platform.&lt;br /&gt;
|-&lt;br /&gt;
|[[#platform_name|platform_name]]&lt;br /&gt;
|Defines the target platform name.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== compilation_date ====&lt;br /&gt;
&lt;br /&gt;
Compilation date. Here &amp;#039;&amp;#039;YYYY&amp;#039;&amp;#039; means the number of a year, &amp;#039;&amp;#039;MM&amp;#039;&amp;#039; means a month number, and &amp;#039;&amp;#039;DD&amp;#039;&amp;#039; means a day number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compilation_date : string = &amp;quot;YYYY-MM-DD&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compilation_time ====&lt;br /&gt;
&lt;br /&gt;
Compilation time. Here &amp;#039;&amp;#039;HH&amp;#039;&amp;#039; means hours, &amp;#039;&amp;#039;MM&amp;#039;&amp;#039; means minutes, and &amp;#039;&amp;#039;SS &amp;#039;&amp;#039;means seconds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compilation_time : string = &amp;quot;HH:MM:SS&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compiler_buildDate ====&lt;br /&gt;
&lt;br /&gt;
Build date of the compiler.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compiler_buildDate : string = &amp;quot;YYYY-MM-DD HH:MM&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compiler_version ====&lt;br /&gt;
&lt;br /&gt;
A compiler version. This value depends upon the compiler version.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compiler_version = 6003.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== maxFloatDigits ====&lt;br /&gt;
&lt;br /&gt;
Defines the maximal value of &amp;quot;digits&amp;quot;, which is supported by the compiler.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;maxFloatDigits = 16.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== null ====&lt;br /&gt;
&lt;br /&gt;
A constant of type pointer with the value zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;null : pointer = uncheckedConvert(pointer, 0).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== nullHandle ====&lt;br /&gt;
&lt;br /&gt;
A special constant of a handle type with the value zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;nullHandle : handle = uncheckedConvert(handle, 0).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== invalidHandle ====&lt;br /&gt;
&lt;br /&gt;
A special constant of a handle type with the invalid (-1) value.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;invalidHandle : handle = uncheckedConvert(handle, -1).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== platform_bits ====&lt;br /&gt;
&lt;br /&gt;
Defines the digital capacity of compilation platform.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;platform_bits = 32.&lt;br /&gt;
or&lt;br /&gt;
platform_bits = 64.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== platform_name ====&lt;br /&gt;
&lt;br /&gt;
Defines the target platform name.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;platform_name : string = &amp;quot;Windows 32bits&amp;quot;.&lt;br /&gt;
or&lt;br /&gt;
platform_name : string = &amp;quot;Windows 64bits&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{LanguageReferenceSubarticle|Built-in entities/Constants}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Joachim Tilsted Kristensen</name></author>
	</entry>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Constants&amp;diff=4746</id>
		<title>Language Reference/Built-in entities/Constants</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Constants&amp;diff=4746"/>
		<updated>2020-12-19T15:49:22Z</updated>

		<summary type="html">&lt;p&gt;Joachim Tilsted Kristensen: /* null */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|{{prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|[[#compilation_date|compilation_date]]&lt;br /&gt;
|Compilation date.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compilation_time|compilation_time]]&lt;br /&gt;
|Compilation time.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compiler_buildDate|compiler_buildDate]]&lt;br /&gt;
|Build date of a compiler.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compiler_version|compiler_version]]&lt;br /&gt;
|A compiler version.&lt;br /&gt;
|-&lt;br /&gt;
|[[#maxFloatDigits|maxFloatDigits]]&lt;br /&gt;
|Defines the maximal value of &amp;quot;digits&amp;quot;, which is supported by the compiler.&lt;br /&gt;
|-&lt;br /&gt;
|[[#null|null]]&lt;br /&gt;
|The default NULL pointer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#nullHandle|nullHandle]]&lt;br /&gt;
|A special constant of a handle type with the zero value.&lt;br /&gt;
|-&lt;br /&gt;
|[[#invalidHandle|invalidHandle]]&lt;br /&gt;
|A special constant of a handle type with the invalid (-1) value.&lt;br /&gt;
|-&lt;br /&gt;
|[[#platform_bits|platform_bits]]&lt;br /&gt;
|Defines the digital capacity of compilation platform.&lt;br /&gt;
|-&lt;br /&gt;
|[[#platform_name|platform_name]]&lt;br /&gt;
|Defines the target platform name.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== compilation_date ====&lt;br /&gt;
&lt;br /&gt;
Compilation date. Here &amp;#039;&amp;#039;YYYY&amp;#039;&amp;#039; means the number of a year, &amp;#039;&amp;#039;MM&amp;#039;&amp;#039; means a month number, and &amp;#039;&amp;#039;DD&amp;#039;&amp;#039; means a day number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compilation_date : string = &amp;quot;YYYY-MM-DD&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compilation_time ====&lt;br /&gt;
&lt;br /&gt;
Compilation time. Here &amp;#039;&amp;#039;HH&amp;#039;&amp;#039; means hours, &amp;#039;&amp;#039;MM&amp;#039;&amp;#039; means minutes, and &amp;#039;&amp;#039;SS &amp;#039;&amp;#039;means seconds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compilation_time : string = &amp;quot;HH:MM:SS&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compiler_buildDate ====&lt;br /&gt;
&lt;br /&gt;
Build date of the compiler.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compiler_buildDate : string = &amp;quot;YYYY-MM-DD HH:MM&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compiler_version ====&lt;br /&gt;
&lt;br /&gt;
A compiler version. This value depends upon the compiler version.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compiler_version = 6003.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== maxFloatDigits ====&lt;br /&gt;
&lt;br /&gt;
Defines the maximal value of &amp;quot;digits&amp;quot;, which is supported by the compiler.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;maxFloatDigits = 16.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== null ====&lt;br /&gt;
&lt;br /&gt;
A constant of type &amp;lt;vip&amp;gt; pointer &amp;lt;/vip&amp;gt; with the value zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;null : pointer = uncheckedConvert(pointer, 0).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== nullHandle ====&lt;br /&gt;
&lt;br /&gt;
A special constant of a handle type with the value zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;nullHandle : handle = uncheckedConvert(handle, 0).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== invalidHandle ====&lt;br /&gt;
&lt;br /&gt;
A special constant of a handle type with the invalid (-1) value.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;invalidHandle : handle = uncheckedConvert(handle, -1).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== platform_bits ====&lt;br /&gt;
&lt;br /&gt;
Defines the digital capacity of compilation platform.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;platform_bits = 32.&lt;br /&gt;
or&lt;br /&gt;
platform_bits = 64.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== platform_name ====&lt;br /&gt;
&lt;br /&gt;
Defines the target platform name.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;platform_name : string = &amp;quot;Windows 32bits&amp;quot;.&lt;br /&gt;
or&lt;br /&gt;
platform_name : string = &amp;quot;Windows 64bits&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{LanguageReferenceSubarticle|Built-in entities/Constants}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Joachim Tilsted Kristensen</name></author>
	</entry>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Constants&amp;diff=4745</id>
		<title>Language Reference/Built-in entities/Constants</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Constants&amp;diff=4745"/>
		<updated>2020-12-19T15:47:36Z</updated>

		<summary type="html">&lt;p&gt;Joachim Tilsted Kristensen: /* null */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|{{prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|[[#compilation_date|compilation_date]]&lt;br /&gt;
|Compilation date.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compilation_time|compilation_time]]&lt;br /&gt;
|Compilation time.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compiler_buildDate|compiler_buildDate]]&lt;br /&gt;
|Build date of a compiler.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compiler_version|compiler_version]]&lt;br /&gt;
|A compiler version.&lt;br /&gt;
|-&lt;br /&gt;
|[[#maxFloatDigits|maxFloatDigits]]&lt;br /&gt;
|Defines the maximal value of &amp;quot;digits&amp;quot;, which is supported by the compiler.&lt;br /&gt;
|-&lt;br /&gt;
|[[#null|null]]&lt;br /&gt;
|The default NULL pointer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#nullHandle|nullHandle]]&lt;br /&gt;
|A special constant of a handle type with the zero value.&lt;br /&gt;
|-&lt;br /&gt;
|[[#invalidHandle|invalidHandle]]&lt;br /&gt;
|A special constant of a handle type with the invalid (-1) value.&lt;br /&gt;
|-&lt;br /&gt;
|[[#platform_bits|platform_bits]]&lt;br /&gt;
|Defines the digital capacity of compilation platform.&lt;br /&gt;
|-&lt;br /&gt;
|[[#platform_name|platform_name]]&lt;br /&gt;
|Defines the target platform name.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== compilation_date ====&lt;br /&gt;
&lt;br /&gt;
Compilation date. Here &amp;#039;&amp;#039;YYYY&amp;#039;&amp;#039; means the number of a year, &amp;#039;&amp;#039;MM&amp;#039;&amp;#039; means a month number, and &amp;#039;&amp;#039;DD&amp;#039;&amp;#039; means a day number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compilation_date : string = &amp;quot;YYYY-MM-DD&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compilation_time ====&lt;br /&gt;
&lt;br /&gt;
Compilation time. Here &amp;#039;&amp;#039;HH&amp;#039;&amp;#039; means hours, &amp;#039;&amp;#039;MM&amp;#039;&amp;#039; means minutes, and &amp;#039;&amp;#039;SS &amp;#039;&amp;#039;means seconds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compilation_time : string = &amp;quot;HH:MM:SS&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compiler_buildDate ====&lt;br /&gt;
&lt;br /&gt;
Build date of the compiler.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compiler_buildDate : string = &amp;quot;YYYY-MM-DD HH:MM&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compiler_version ====&lt;br /&gt;
&lt;br /&gt;
A compiler version. This value depends upon the compiler version.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compiler_version = 6003.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== maxFloatDigits ====&lt;br /&gt;
&lt;br /&gt;
Defines the maximal value of &amp;quot;digits&amp;quot;, which is supported by the compiler.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;maxFloatDigits = 16.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== null ====&lt;br /&gt;
&lt;br /&gt;
A constant of a pointer type with the value zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;null : pointer = uncheckedConvert(pointer, 0).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== nullHandle ====&lt;br /&gt;
&lt;br /&gt;
A special constant of a handle type with the value zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;nullHandle : handle = uncheckedConvert(handle, 0).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== invalidHandle ====&lt;br /&gt;
&lt;br /&gt;
A special constant of a handle type with the invalid (-1) value.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;invalidHandle : handle = uncheckedConvert(handle, -1).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== platform_bits ====&lt;br /&gt;
&lt;br /&gt;
Defines the digital capacity of compilation platform.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;platform_bits = 32.&lt;br /&gt;
or&lt;br /&gt;
platform_bits = 64.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== platform_name ====&lt;br /&gt;
&lt;br /&gt;
Defines the target platform name.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;platform_name : string = &amp;quot;Windows 32bits&amp;quot;.&lt;br /&gt;
or&lt;br /&gt;
platform_name : string = &amp;quot;Windows 64bits&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{LanguageReferenceSubarticle|Built-in entities/Constants}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Joachim Tilsted Kristensen</name></author>
	</entry>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Constants&amp;diff=4744</id>
		<title>Language Reference/Built-in entities/Constants</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Constants&amp;diff=4744"/>
		<updated>2020-12-19T15:46:33Z</updated>

		<summary type="html">&lt;p&gt;Joachim Tilsted Kristensen: /* nullHandle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|{{prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|[[#compilation_date|compilation_date]]&lt;br /&gt;
|Compilation date.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compilation_time|compilation_time]]&lt;br /&gt;
|Compilation time.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compiler_buildDate|compiler_buildDate]]&lt;br /&gt;
|Build date of a compiler.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compiler_version|compiler_version]]&lt;br /&gt;
|A compiler version.&lt;br /&gt;
|-&lt;br /&gt;
|[[#maxFloatDigits|maxFloatDigits]]&lt;br /&gt;
|Defines the maximal value of &amp;quot;digits&amp;quot;, which is supported by the compiler.&lt;br /&gt;
|-&lt;br /&gt;
|[[#null|null]]&lt;br /&gt;
|The default NULL pointer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#nullHandle|nullHandle]]&lt;br /&gt;
|A special constant of a handle type with the zero value.&lt;br /&gt;
|-&lt;br /&gt;
|[[#invalidHandle|invalidHandle]]&lt;br /&gt;
|A special constant of a handle type with the invalid (-1) value.&lt;br /&gt;
|-&lt;br /&gt;
|[[#platform_bits|platform_bits]]&lt;br /&gt;
|Defines the digital capacity of compilation platform.&lt;br /&gt;
|-&lt;br /&gt;
|[[#platform_name|platform_name]]&lt;br /&gt;
|Defines the target platform name.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== compilation_date ====&lt;br /&gt;
&lt;br /&gt;
Compilation date. Here &amp;#039;&amp;#039;YYYY&amp;#039;&amp;#039; means the number of a year, &amp;#039;&amp;#039;MM&amp;#039;&amp;#039; means a month number, and &amp;#039;&amp;#039;DD&amp;#039;&amp;#039; means a day number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compilation_date : string = &amp;quot;YYYY-MM-DD&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compilation_time ====&lt;br /&gt;
&lt;br /&gt;
Compilation time. Here &amp;#039;&amp;#039;HH&amp;#039;&amp;#039; means hours, &amp;#039;&amp;#039;MM&amp;#039;&amp;#039; means minutes, and &amp;#039;&amp;#039;SS &amp;#039;&amp;#039;means seconds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compilation_time : string = &amp;quot;HH:MM:SS&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compiler_buildDate ====&lt;br /&gt;
&lt;br /&gt;
Build date of the compiler.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compiler_buildDate : string = &amp;quot;YYYY-MM-DD HH:MM&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compiler_version ====&lt;br /&gt;
&lt;br /&gt;
A compiler version. This value depends upon the compiler version.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compiler_version = 6003.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== maxFloatDigits ====&lt;br /&gt;
&lt;br /&gt;
Defines the maximal value of &amp;quot;digits&amp;quot;, which is supported by the compiler.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;maxFloatDigits = 16.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== null ====&lt;br /&gt;
&lt;br /&gt;
A special constant of a pointer type with the value zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;null : pointer = uncheckedConvert(pointer, 0).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== nullHandle ====&lt;br /&gt;
&lt;br /&gt;
A special constant of a handle type with the value zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;nullHandle : handle = uncheckedConvert(handle, 0).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== invalidHandle ====&lt;br /&gt;
&lt;br /&gt;
A special constant of a handle type with the invalid (-1) value.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;invalidHandle : handle = uncheckedConvert(handle, -1).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== platform_bits ====&lt;br /&gt;
&lt;br /&gt;
Defines the digital capacity of compilation platform.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;platform_bits = 32.&lt;br /&gt;
or&lt;br /&gt;
platform_bits = 64.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== platform_name ====&lt;br /&gt;
&lt;br /&gt;
Defines the target platform name.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;platform_name : string = &amp;quot;Windows 32bits&amp;quot;.&lt;br /&gt;
or&lt;br /&gt;
platform_name : string = &amp;quot;Windows 64bits&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{LanguageReferenceSubarticle|Built-in entities/Constants}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Joachim Tilsted Kristensen</name></author>
	</entry>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Constants&amp;diff=4743</id>
		<title>Language Reference/Built-in entities/Constants</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Language_Reference/Built-in_entities/Constants&amp;diff=4743"/>
		<updated>2020-12-19T15:46:06Z</updated>

		<summary type="html">&lt;p&gt;Joachim Tilsted Kristensen: /* null */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|{{prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|[[#compilation_date|compilation_date]]&lt;br /&gt;
|Compilation date.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compilation_time|compilation_time]]&lt;br /&gt;
|Compilation time.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compiler_buildDate|compiler_buildDate]]&lt;br /&gt;
|Build date of a compiler.&lt;br /&gt;
|-&lt;br /&gt;
|[[#compiler_version|compiler_version]]&lt;br /&gt;
|A compiler version.&lt;br /&gt;
|-&lt;br /&gt;
|[[#maxFloatDigits|maxFloatDigits]]&lt;br /&gt;
|Defines the maximal value of &amp;quot;digits&amp;quot;, which is supported by the compiler.&lt;br /&gt;
|-&lt;br /&gt;
|[[#null|null]]&lt;br /&gt;
|The default NULL pointer.&lt;br /&gt;
|-&lt;br /&gt;
|[[#nullHandle|nullHandle]]&lt;br /&gt;
|A special constant of a handle type with the zero value.&lt;br /&gt;
|-&lt;br /&gt;
|[[#invalidHandle|invalidHandle]]&lt;br /&gt;
|A special constant of a handle type with the invalid (-1) value.&lt;br /&gt;
|-&lt;br /&gt;
|[[#platform_bits|platform_bits]]&lt;br /&gt;
|Defines the digital capacity of compilation platform.&lt;br /&gt;
|-&lt;br /&gt;
|[[#platform_name|platform_name]]&lt;br /&gt;
|Defines the target platform name.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== compilation_date ====&lt;br /&gt;
&lt;br /&gt;
Compilation date. Here &amp;#039;&amp;#039;YYYY&amp;#039;&amp;#039; means the number of a year, &amp;#039;&amp;#039;MM&amp;#039;&amp;#039; means a month number, and &amp;#039;&amp;#039;DD&amp;#039;&amp;#039; means a day number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compilation_date : string = &amp;quot;YYYY-MM-DD&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compilation_time ====&lt;br /&gt;
&lt;br /&gt;
Compilation time. Here &amp;#039;&amp;#039;HH&amp;#039;&amp;#039; means hours, &amp;#039;&amp;#039;MM&amp;#039;&amp;#039; means minutes, and &amp;#039;&amp;#039;SS &amp;#039;&amp;#039;means seconds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compilation_time : string = &amp;quot;HH:MM:SS&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compiler_buildDate ====&lt;br /&gt;
&lt;br /&gt;
Build date of the compiler.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compiler_buildDate : string = &amp;quot;YYYY-MM-DD HH:MM&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== compiler_version ====&lt;br /&gt;
&lt;br /&gt;
A compiler version. This value depends upon the compiler version.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;compiler_version = 6003.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== maxFloatDigits ====&lt;br /&gt;
&lt;br /&gt;
Defines the maximal value of &amp;quot;digits&amp;quot;, which is supported by the compiler.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;maxFloatDigits = 16.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== null ====&lt;br /&gt;
&lt;br /&gt;
A special constant of a pointer type with the value zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;null : pointer = uncheckedConvert(pointer, 0).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== nullHandle ====&lt;br /&gt;
&lt;br /&gt;
A special constant of a handle type with the zero value.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;nullHandle : handle = uncheckedConvert(handle, 0).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== invalidHandle ====&lt;br /&gt;
&lt;br /&gt;
A special constant of a handle type with the invalid (-1) value.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;invalidHandle : handle = uncheckedConvert(handle, -1).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== platform_bits ====&lt;br /&gt;
&lt;br /&gt;
Defines the digital capacity of compilation platform.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;platform_bits = 32.&lt;br /&gt;
or&lt;br /&gt;
platform_bits = 64.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== platform_name ====&lt;br /&gt;
&lt;br /&gt;
Defines the target platform name.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;platform_name : string = &amp;quot;Windows 32bits&amp;quot;.&lt;br /&gt;
or&lt;br /&gt;
platform_name : string = &amp;quot;Windows 64bits&amp;quot;.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{LanguageReferenceSubarticle|Built-in entities/Constants}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Joachim Tilsted Kristensen</name></author>
	</entry>
</feed>