1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-02 23:14:57 +03:00

Further relation refactoring

This commit is contained in:
Graham Nelson 2021-01-31 23:44:57 +00:00
parent ccf70137ca
commit fb20b90d54
32 changed files with 767 additions and 727 deletions

View file

@ -134,8 +134,8 @@ of subsequent sentences, which also happens in the pre-pass.
<span class="plain-syntax"> </span><span class="string-syntax">"this is too long a name for a single relation to have"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"and would become unwieldy."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_new_relation_here</span><span class="plain-syntax">(</span><span class="identifier-syntax">V</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BinaryPredicates::make_pair_sketchily</span><span class="plain-syntax">(</span><span class="identifier-syntax">explicit_bp_family</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WordAssemblages::from_wording</span><span class="plain-syntax">(</span><span class="identifier-syntax">RW</span><span class="plain-syntax">), </span><span class="identifier-syntax">Relation_OtoO</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="5-er.html#SP5" class="function-link"><span class="function-syntax">Relations::Explicit::make_pair_sketchily</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WordAssemblages::from_wording</span><span class="plain-syntax">(</span><span class="identifier-syntax">RW</span><span class="plain-syntax">)));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
@ -485,6 +485,8 @@ splitting into cases.
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">storage_kind</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> what kind, if any, might be stored in it</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">storage_infs</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> summing these up</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">explicit_bp_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ED</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_explicit_bp_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">family_specific</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">rvno</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="comment-syntax"> relate values not objects?</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">dynamic</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="comment-syntax"> use dynamic memory allocation for storage?</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">provide_prn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="comment-syntax"> allocate the storage property to the kind?</span>
@ -497,7 +499,7 @@ splitting into cases.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">rvno</span><span class="plain-syntax">) { </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">relates_values_not_objects</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="identifier-syntax">bpr</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">relates_values_not_objects</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">RR</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">frf</span><span class="plain-syntax">) { </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">fast_route_finding</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; </span><span class="identifier-syntax">bpr</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">fast_route_finding</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">prn</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">i6_storage_property</span><span class="plain-syntax"> = </span><span class="identifier-syntax">prn</span><span class="plain-syntax">; </span><span class="identifier-syntax">bpr</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">i6_storage_property</span><span class="plain-syntax"> = </span><span class="identifier-syntax">prn</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ED</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">i6_storage_property</span><span class="plain-syntax"> = </span><span class="identifier-syntax">prn</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Properties::Valued::set_stored_relation</span><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><span class="plain-syntax">, </span><span class="identifier-syntax">bp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">dynamic</span><span class="plain-syntax">) {</span>
@ -576,8 +578,6 @@ splitting into cases.
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bpr</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">form_of_relation</span><span class="plain-syntax"> = </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">form_of_relation</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">RELATION_DEFINITIONS</span><span class="plain-syntax">, </span><span class="string-syntax">"Defined the binary predicate:\n$2\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">bp</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
@ -690,7 +690,6 @@ omitted from the index.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">PK</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Kinds::Behaviour::is_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">PK</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) </span><span class="identifier-syntax">Properties::Valued::set_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><span class="plain-syntax">, </span><span class="identifier-syntax">PK</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">storage_kind</span><span class="plain-syntax">) </span><span class="identifier-syntax">storage_infs</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Kinds::Knowledge::as_subject</span><span class="plain-syntax">(</span><span class="identifier-syntax">storage_kind</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">storage_infs</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="comment-syntax"> if (Kinds::Behaviour::is_object(storage_kind) == FALSE) bp-&gt;storage_kind = storage_kind;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (((</span><span class="identifier-syntax">RR</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">terms</span><span class="plain-syntax">[0].</span><span class="element-syntax">unique</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">RR</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">terms</span><span class="plain-syntax">[1].</span><span class="element-syntax">unique</span><span class="plain-syntax">)) &amp;&amp; (</span><span class="identifier-syntax">PK</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::is_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">PK</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Properties::Valued::now_used_for_non_typesafe_relation</span><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><span class="plain-syntax">);</span>
@ -726,7 +725,7 @@ and \(14D\) bytes on Glulx, where \(D\) is the size of the domain...
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">form_of_relation</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Relation_OtoO</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ED</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">form_of_relation</span><span class="plain-syntax"> = </span><span class="constant-syntax">Relation_OtoO</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">provide_prn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::is_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">storage_kind</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">task_functions</span><span class="plain-syntax">[</span><span class="identifier-syntax">NOW_ATOM_TRUE_TASK</span><span class="plain-syntax">] = </span><span class="identifier-syntax">Calculus::Schemas::new</span><span class="plain-syntax">(</span><span class="string-syntax">"Relation_Now1to1(*2,%n,*1)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">i6_prn_name</span><span class="plain-syntax">);</span>
@ -746,7 +745,7 @@ and \(14D\) bytes on Glulx, where \(D\) is the size of the domain...
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">form_of_relation</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Relation_OtoV</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ED</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">form_of_relation</span><span class="plain-syntax"> = </span><span class="constant-syntax">Relation_OtoV</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">provide_prn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::is_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">storage_kind</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">task_functions</span><span class="plain-syntax">[</span><span class="identifier-syntax">NOW_ATOM_TRUE_TASK</span><span class="plain-syntax">] = </span><span class="identifier-syntax">Calculus::Schemas::new</span><span class="plain-syntax">(</span><span class="string-syntax">"*2.%n = *1"</span><span class="plain-syntax">, </span><span class="identifier-syntax">i6_prn_name</span><span class="plain-syntax">);</span>
@ -766,7 +765,7 @@ and \(14D\) bytes on Glulx, where \(D\) is the size of the domain...
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">form_of_relation</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Relation_VtoO</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ED</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">form_of_relation</span><span class="plain-syntax"> = </span><span class="constant-syntax">Relation_VtoO</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">provide_prn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::is_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">storage_kind</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">task_functions</span><span class="plain-syntax">[</span><span class="identifier-syntax">NOW_ATOM_TRUE_TASK</span><span class="plain-syntax">] = </span><span class="identifier-syntax">Calculus::Schemas::new</span><span class="plain-syntax">(</span><span class="string-syntax">"*1.%n = *2"</span><span class="plain-syntax">, </span><span class="identifier-syntax">i6_prn_name</span><span class="plain-syntax">);</span>
@ -787,7 +786,7 @@ various K".
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">form_of_relation</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Relation_VtoV</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ED</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">form_of_relation</span><span class="plain-syntax"> = </span><span class="constant-syntax">Relation_VtoV</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BinaryPredicates::mark_as_needed</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">task_functions</span><span class="plain-syntax">[</span><span class="identifier-syntax">TEST_ATOM_TASK</span><span class="plain-syntax">] = </span><span class="identifier-syntax">Calculus::Schemas::new</span><span class="plain-syntax">(</span><span class="string-syntax">"(Relation_TestVtoV(*1,%n,*2,false))"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BinaryPredicates::iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">));</span>
@ -805,7 +804,7 @@ another".
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">form_of_relation</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Relation_Sym_OtoO</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ED</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">form_of_relation</span><span class="plain-syntax"> = </span><span class="constant-syntax">Relation_Sym_OtoO</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">provide_prn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::is_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">storage_kind</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">task_functions</span><span class="plain-syntax">[</span><span class="identifier-syntax">NOW_ATOM_TRUE_TASK</span><span class="plain-syntax">] = </span><span class="identifier-syntax">Calculus::Schemas::new</span><span class="plain-syntax">(</span><span class="string-syntax">"Relation_NowS1to1(*2,%n,*1)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">i6_prn_name</span><span class="plain-syntax">);</span>
@ -826,7 +825,7 @@ to each other".
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">form_of_relation</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Relation_Sym_VtoV</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ED</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">form_of_relation</span><span class="plain-syntax"> = </span><span class="constant-syntax">Relation_Sym_VtoV</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BinaryPredicates::mark_as_needed</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">task_functions</span><span class="plain-syntax">[</span><span class="identifier-syntax">TEST_ATOM_TASK</span><span class="plain-syntax">] = </span><span class="identifier-syntax">Calculus::Schemas::new</span><span class="plain-syntax">(</span><span class="string-syntax">"(Relation_TestVtoV(*1,%n,*2,true))"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BinaryPredicates::iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">));</span>
@ -844,10 +843,10 @@ other in groups".
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">form_of_relation</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Relation_Equiv</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ED</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">form_of_relation</span><span class="plain-syntax"> = </span><span class="constant-syntax">Relation_Equiv</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">equivalence_bp_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">D</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">equivalence_bp_data</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">D</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equivalence_partition</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">family_specific</span><span class="plain-syntax"> = </span><span class="identifier-syntax">STORE_POINTER_equivalence_bp_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">D</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ED</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equiv_data</span><span class="plain-syntax"> = </span><span class="identifier-syntax">D</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">provide_prn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::is_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">storage_kind</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">task_functions</span><span class="plain-syntax">[</span><span class="identifier-syntax">TEST_ATOM_TASK</span><span class="plain-syntax">] = </span><span class="identifier-syntax">Calculus::Schemas::new</span><span class="plain-syntax">(</span><span class="string-syntax">"(*1.%n == *2.%n)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">i6_prn_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">i6_prn_name</span><span class="plain-syntax">);</span>
@ -865,15 +864,16 @@ other in groups".
<span class="plain-syntax"> </span><span class="identifier-syntax">Properties::Valued::set_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_number</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-nrr.html#SP5">&#167;5</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5_11" class="paragraph-anchor"></a><b>&#167;5.11. </b>The <span class="extract"><span class="extract-syntax">Relation_ByRoutine</span></span> case, or relation tested by a routine: "R relates
K to L when (some condition)".
<p class="commentary firstcommentary"><a id="SP5_11" class="paragraph-anchor"></a><b>&#167;5.11. </b>The case of a relation tested by a routine: "R relates K to L when (some
condition)".
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Complete as a relation-by-routine BP</span><span class="named-paragraph-number">5.11</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">form_of_relation</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Relation_ByRoutine</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">relation_family</span><span class="plain-syntax"> = </span><span class="identifier-syntax">by_routine_bp_family</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">reversal</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">relation_family</span><span class="plain-syntax"> = </span><span class="identifier-syntax">by_routine_bp_family</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">package_request</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><span class="identifier-syntax">BinaryPredicates::package</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">by_routine_bp_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">D</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">by_routine_bp_data</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">D</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">condition_defn_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RR</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">CONW</span><span class="plain-syntax">;</span>

View file

@ -95,75 +95,160 @@ there are none.
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">bp_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">explicit_bp_family</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">bp_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">by_routine_bp_family</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">explicit_bp_data</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">form_of_relation</span><span class="plain-syntax">; </span><span class="comment-syntax"> one of the </span><span class="extract"><span class="extract-syntax">Relation_*</span></span><span class="comment-syntax"> constants defined below</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">i6_storage_property</span><span class="plain-syntax">; </span><span class="comment-syntax"> provides run-time storage</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">equivalence_bp_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">equiv_data</span><span class="plain-syntax">; </span><span class="comment-syntax"> only used for </span><span class="extract"><span class="extract-syntax">Relation_Equiv</span></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">v2v_bitmap_iname</span><span class="plain-syntax">; </span><span class="comment-syntax"> only used for </span><span class="extract"><span class="extract-syntax">Relation_VtoV</span></span><span class="comment-syntax"> and </span><span class="extract"><span class="extract-syntax">Relation_Sym_VtoV</span></span>
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">explicit_bp_data</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure explicit_bp_data is private to this section.</li></ul>
<ul class="endnotetexts"><li>The structure explicit_bp_data is accessed in 3/nrr and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Relations::Explicit::start</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Relations::Explicit::start</span></span>:<br/>Assertions Module - <a href="1-am.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">explicit_bp_family</span><span class="plain-syntax"> = </span><span class="identifier-syntax">BinaryPredicateFamilies::new</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">explicit_bp_family</span><span class="plain-syntax">, </span><span class="identifier-syntax">TYPECHECK_BPF_MTID</span><span class="plain-syntax">, </span><a href="5-er.html#SP3" class="function-link"><span class="function-syntax">Relations::Explicit::REL_typecheck</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">explicit_bp_family</span><span class="plain-syntax">, </span><span class="identifier-syntax">ASSERT_BPF_MTID</span><span class="plain-syntax">, </span><a href="5-er.html#SP4" class="function-link"><span class="function-syntax">Relations::Explicit::REL_assert</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">explicit_bp_family</span><span class="plain-syntax">, </span><span class="identifier-syntax">SCHEMA_BPF_MTID</span><span class="plain-syntax">, </span><a href="5-er.html#SP6" class="function-link"><span class="function-syntax">Relations::Explicit::REL_compile</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">explicit_bp_family</span><span class="plain-syntax">, </span><span class="identifier-syntax">DESCRIBE_FOR_PROBLEMS_BPF_MTID</span><span class="plain-syntax">, </span><a href="5-er.html#SP7" class="function-link"><span class="function-syntax">Relations::Explicit::REL_describe_for_problems</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">explicit_bp_family</span><span class="plain-syntax">, </span><span class="identifier-syntax">DESCRIBE_FOR_INDEX_BPF_MTID</span><span class="plain-syntax">, </span><a href="5-er.html#SP7" class="function-link"><span class="function-syntax">Relations::Explicit::REL_describe_briefly</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">explicit_bp_family</span><span class="plain-syntax">, </span><span class="identifier-syntax">TYPECHECK_BPF_MTID</span><span class="plain-syntax">, </span><a href="5-er.html#SP6" class="function-link"><span class="function-syntax">Relations::Explicit::REL_typecheck</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">explicit_bp_family</span><span class="plain-syntax">, </span><span class="identifier-syntax">ASSERT_BPF_MTID</span><span class="plain-syntax">, </span><a href="5-er.html#SP7" class="function-link"><span class="function-syntax">Relations::Explicit::REL_assert</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">explicit_bp_family</span><span class="plain-syntax">, </span><span class="identifier-syntax">SCHEMA_BPF_MTID</span><span class="plain-syntax">, </span><a href="5-er.html#SP9" class="function-link"><span class="function-syntax">Relations::Explicit::REL_compile</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">explicit_bp_family</span><span class="plain-syntax">, </span><span class="identifier-syntax">DESCRIBE_FOR_PROBLEMS_BPF_MTID</span><span class="plain-syntax">, </span><a href="5-er.html#SP10" class="function-link"><span class="function-syntax">Relations::Explicit::REL_describe_for_problems</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">explicit_bp_family</span><span class="plain-syntax">, </span><span class="identifier-syntax">DESCRIBE_FOR_INDEX_BPF_MTID</span><span class="plain-syntax">, </span><a href="5-er.html#SP10" class="function-link"><span class="function-syntax">Relations::Explicit::REL_describe_briefly</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">by_routine_bp_family</span><span class="plain-syntax"> = </span><span class="identifier-syntax">BinaryPredicateFamilies::new</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">by_routine_bp_family</span><span class="plain-syntax">, </span><span class="identifier-syntax">TYPECHECK_BPF_MTID</span><span class="plain-syntax">, </span><a href="5-er.html#SP6" class="function-link"><span class="function-syntax">Relations::Explicit::REL_typecheck</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">by_routine_bp_family</span><span class="plain-syntax">, </span><span class="identifier-syntax">ASSERT_BPF_MTID</span><span class="plain-syntax">, </span><a href="5-er.html#SP7" class="function-link"><span class="function-syntax">Relations::Explicit::REL_assert</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">by_routine_bp_family</span><span class="plain-syntax">, </span><span class="identifier-syntax">SCHEMA_BPF_MTID</span><span class="plain-syntax">, </span><a href="5-er.html#SP9" class="function-link"><span class="function-syntax">Relations::Explicit::REL_compile</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">by_routine_bp_family</span><span class="plain-syntax">, </span><span class="identifier-syntax">DESCRIBE_FOR_PROBLEMS_BPF_MTID</span><span class="plain-syntax">, </span><a href="5-er.html#SP10" class="function-link"><span class="function-syntax">Relations::Explicit::REL_describe_for_problems</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">by_routine_bp_family</span><span class="plain-syntax">, </span><span class="identifier-syntax">DESCRIBE_FOR_INDEX_BPF_MTID</span><span class="plain-syntax">, </span><a href="5-er.html#SP10" class="function-link"><span class="function-syntax">Relations::Explicit::REL_br_describe_briefly</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Relations::Explicit::is_explicit_with_runtime_storage</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Relations::Explicit::is_explicit_with_runtime_storage</span></span>:<br/><a href="5-er.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">relation_family</span><span class="plain-syntax"> == </span><span class="identifier-syntax">explicit_bp_family</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>They typecheck by the default rule only:
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>The following constants are numbered in a way which corresponds to some
run-time code supporting relations.
</p>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">Relation_Implicit</span><span class="plain-syntax"> -1 </span><span class="comment-syntax"> used to mean "none of the below"</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">Relation_OtoO</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax"> </span><span class="comment-syntax"> one to one: "R relates one K to one K"</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">Relation_OtoV</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax"> </span><span class="comment-syntax"> one to various: "R relates one K to various K"</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">Relation_VtoO</span><span class="plain-syntax"> </span><span class="constant-syntax">3</span><span class="plain-syntax"> </span><span class="comment-syntax"> various to one: "R relates various K to one K"</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">Relation_VtoV</span><span class="plain-syntax"> </span><span class="constant-syntax">4</span><span class="plain-syntax"> </span><span class="comment-syntax"> various to various: "R relates various K to various K"</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">Relation_Sym_OtoO</span><span class="plain-syntax"> </span><span class="constant-syntax">5</span><span class="plain-syntax"> </span><span class="comment-syntax"> symmetric one to one: "R relates one K to another"</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">Relation_Sym_VtoV</span><span class="plain-syntax"> </span><span class="constant-syntax">6</span><span class="plain-syntax"> </span><span class="comment-syntax"> symmetric various to various: "R relates K to each other"</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">Relation_Equiv</span><span class="plain-syntax"> </span><span class="constant-syntax">7</span><span class="plain-syntax"> </span><span class="comment-syntax"> equivalence relation: "R relates K to each other in groups"</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Relations::Explicit::allow_arbitrary_assertions</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Relations::Explicit::allow_arbitrary_assertions</span></span>:<br/><a href="5-er.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">f</span><span class="plain-syntax"> = </span><a href="5-er.html#SP5" class="function-link"><span class="function-syntax">Relations::Explicit::get_form_of_relation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">f</span><span class="plain-syntax"> == </span><span class="constant-syntax">Relation_Equiv</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">f</span><span class="plain-syntax"> == </span><span class="constant-syntax">Relation_VtoV</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">f</span><span class="plain-syntax"> == </span><span class="constant-syntax">Relation_Sym_VtoV</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>When the source text declares new relations, it turns out to be convenient
to make their BPs in a two-stage process: to make sketchy, mostly-blank BP
structures for them early on &mdash; but getting their names registered &mdash; and
then fill in the correct details later. This is where such sketchy pairs are
made:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Relations::Explicit::REL_typecheck</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Relations::Explicit::REL_typecheck</span></span>:<br/><a href="5-er.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">bp_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">self</span><span class="plain-syntax">, </span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">,</span>
<span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="function-syntax">Relations::Explicit::make_pair_sketchily</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Relations::Explicit::make_pair_sketchily</span></span>:<br/>New Relation Requests - <a href="3-nrr.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">relname</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">relname</span><span class="plain-syntax">, </span><span class="string-syntax">"%V"</span><span class="plain-syntax">, </span><span class="identifier-syntax">WordAssemblages::first_word</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">wa</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BinaryPredicates::make_pair</span><span class="plain-syntax">(</span><span class="identifier-syntax">explicit_bp_family</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BPTerms::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">), </span><span class="identifier-syntax">BPTerms::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">relname</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">wa</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">relname</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">explicit_bp_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ED</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">explicit_bp_data</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">family_specific</span><span class="plain-syntax"> = </span><span class="identifier-syntax">STORE_POINTER_explicit_bp_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">ED</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">reversal</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">family_specific</span><span class="plain-syntax"> = </span><span class="identifier-syntax">STORE_POINTER_explicit_bp_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">ED</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ED</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">equiv_data</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ED</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">i6_storage_property</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ED</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">form_of_relation</span><span class="plain-syntax"> = </span><span class="constant-syntax">Relation_OtoO</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ED</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">v2v_bitmap_iname</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">property</span><span class="plain-syntax"> *</span><span class="function-syntax">Relations::Explicit::get_i6_storage_property</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Relations::Explicit::get_i6_storage_property</span></span>:<br/><a href="5-er.html#SP8">&#167;8</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">relation_family</span><span class="plain-syntax"> != </span><span class="identifier-syntax">explicit_bp_family</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">explicit_bp_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ED</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_explicit_bp_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">family_specific</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">ED</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">i6_storage_property</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Relations::Explicit::get_form_of_relation</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Relations::Explicit::get_form_of_relation</span></span>:<br/><a href="5-er.html#SP4">&#167;4</a>, <a href="5-er.html#SP7">&#167;7</a>, <a href="5-er.html#SP8">&#167;8</a>, <a href="5-er.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">relation_family</span><span class="plain-syntax"> != </span><span class="identifier-syntax">explicit_bp_family</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">Relation_Implicit</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">explicit_bp_data</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ED</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_explicit_bp_data</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">family_specific</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">ED</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">form_of_relation</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="function-syntax">Relations::Explicit::form_to_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax">(</span><a href="5-er.html#SP5" class="function-link"><span class="function-syntax">Relations::Explicit::get_form_of_relation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">Relation_OtoO:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"Relation_OtoO"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">Relation_OtoV:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"Relation_OtoV"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">Relation_VtoO:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"Relation_VtoO"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">Relation_VtoV:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"Relation_VtoV"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">Relation_Sym_OtoO:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"Relation_Sym_OtoO"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">Relation_Sym_VtoV:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"Relation_Sym_VtoV"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">Relation_Equiv:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"Relation_Equiv"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">default:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"Relation_Implicit"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>They typecheck by the default rule only:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Relations::Explicit::REL_typecheck</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Relations::Explicit::REL_typecheck</span></span>:<br/><a href="5-er.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">bp_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">self</span><span class="plain-syntax">, </span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> **</span><span class="identifier-syntax">kinds_of_terms</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> **</span><span class="identifier-syntax">kinds_required</span><span class="plain-syntax">, </span><span class="identifier-syntax">tc_problem_kit</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tck</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">DECLINE_TO_MATCH</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>They are asserted thus. Note that if we have a symmetric relation then we need
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>They are asserted thus. Note that if we have a symmetric relation then we need
to behave as if \(B(y, x)\) had also been asserted whenever \(B(x, y)\) has, if
\(x\neq y\).
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Relations::Explicit::REL_assert</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Relations::Explicit::REL_assert</span></span>:<br/><a href="5-er.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">bp_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">self</span><span class="plain-syntax">, </span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Relations::Explicit::REL_assert</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">Relations::Explicit::REL_assert</span></span>:<br/><a href="5-er.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">bp_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">self</span><span class="plain-syntax">, </span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">infs0</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec0</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">infs1</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec1</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-er.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">Reject non-assertable relations</span><span class="named-paragraph-number">4.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-er.html#SP7_1" class="named-paragraph-link"><span class="named-paragraph">Reject non-assertable relations</span><span class="named-paragraph-number">7.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">BinaryPredicates::store_dynamically</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">World::Inferences::draw_relation_spec</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec0</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">infs0</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">infs1</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="5-er.html#SP4_2" class="named-paragraph-link"><span class="named-paragraph">Reject relationship with nothing</span><span class="named-paragraph-number">4.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">infs0</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">infs1</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="5-er.html#SP7_2" class="named-paragraph-link"><span class="named-paragraph">Reject relationship with nothing</span><span class="named-paragraph-number">7.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-er.html#SP4" class="function-link"><span class="function-syntax">Relations::Explicit::allow_arbitrary_assertions</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">World::Inferences::draw_relation</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="identifier-syntax">infs0</span><span class="plain-syntax">, </span><span class="identifier-syntax">infs1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">BinaryPredicates::get_form_of_relation</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) == </span><span class="identifier-syntax">Relation_Sym_VtoV</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">infs0</span><span class="plain-syntax"> != </span><span class="identifier-syntax">infs1</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><a href="5-er.html#SP5" class="function-link"><span class="function-syntax">Relations::Explicit::get_form_of_relation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) == </span><span class="constant-syntax">Relation_Sym_VtoV</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">infs0</span><span class="plain-syntax"> != </span><span class="identifier-syntax">infs1</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">World::Inferences::draw_relation</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="identifier-syntax">infs1</span><span class="plain-syntax">, </span><span class="identifier-syntax">infs0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">BinaryPredicates::is_explicit_with_runtime_storage</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><a href="5-er.html#SP5" class="function-link"><span class="function-syntax">Relations::Explicit::infer_property_based_relation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="identifier-syntax">infs1</span><span class="plain-syntax">, </span><span class="identifier-syntax">infs0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">BinaryPredicates::get_form_of_relation</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) == </span><span class="identifier-syntax">Relation_Sym_OtoO</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">infs0</span><span class="plain-syntax"> != </span><span class="identifier-syntax">infs1</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><a href="5-er.html#SP5" class="function-link"><span class="function-syntax">Relations::Explicit::infer_property_based_relation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="identifier-syntax">infs0</span><span class="plain-syntax">, </span><span class="identifier-syntax">infs1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-er.html#SP2" class="function-link"><span class="function-syntax">Relations::Explicit::is_explicit_with_runtime_storage</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><a href="5-er.html#SP8" class="function-link"><span class="function-syntax">Relations::Explicit::infer_property_based_relation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="identifier-syntax">infs1</span><span class="plain-syntax">, </span><span class="identifier-syntax">infs0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><a href="5-er.html#SP5" class="function-link"><span class="function-syntax">Relations::Explicit::get_form_of_relation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) == </span><span class="constant-syntax">Relation_Sym_OtoO</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">infs0</span><span class="plain-syntax"> != </span><span class="identifier-syntax">infs1</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><a href="5-er.html#SP8" class="function-link"><span class="function-syntax">Relations::Explicit::infer_property_based_relation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="identifier-syntax">infs0</span><span class="plain-syntax">, </span><span class="identifier-syntax">infs1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Relations::Explicit::allow_arbitrary_assertions</span><span class="plain-syntax">(</span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">form_of_relation</span><span class="plain-syntax"> == </span><span class="identifier-syntax">Relation_Equiv</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">form_of_relation</span><span class="plain-syntax"> == </span><span class="identifier-syntax">Relation_VtoV</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">form_of_relation</span><span class="plain-syntax"> == </span><span class="identifier-syntax">Relation_Sym_VtoV</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4_1" class="paragraph-anchor"></a><b>&#167;4.1. </b>This is the point at which non-assertable relations are thrown out.
<p class="commentary firstcommentary"><a id="SP7_1" class="paragraph-anchor"></a><b>&#167;7.1. </b>This is the point at which non-assertable relations are thrown out.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Reject non-assertable relations</span><span class="named-paragraph-number">4.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Reject non-assertable relations</span><span class="named-paragraph-number">7.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -177,8 +262,8 @@ to behave as if \(B(y, x)\) had also been asserted whenever \(B(x, y)\) has, if
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-er.html#SP4">&#167;4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_2" class="paragraph-anchor"></a><b>&#167;4.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Reject relationship with nothing</span><span class="named-paragraph-number">4.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="5-er.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_2" class="paragraph-anchor"></a><b>&#167;7.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Reject relationship with nothing</span><span class="named-paragraph-number">7.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -190,8 +275,8 @@ to behave as if \(B(y, x)\) had also been asserted whenever \(B(x, y)\) has, if
<span class="plain-syntax"> </span><span class="string-syntax">"to try to put 'Mr Cogito' and 'nothing' into a relationship."</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-er.html#SP4">&#167;4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>This routine converts the knowledge that \(R(ox, oy)\) into a single
<ul class="endnotetexts"><li>This code is used in <a href="5-er.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>This routine converts the knowledge that \(R(ox, oy)\) into a single
inference. It can only be used for a simple subclass of the relations:
those which store <span class="extract"><span class="extract-syntax">oy</span></span>, the only thing related to <span class="extract"><span class="extract-syntax">ox</span></span>, in a given property
of <span class="extract"><span class="extract-syntax">ox</span></span>. The beauty of this is that the "only thing related to" business
@ -201,32 +286,32 @@ inferences for \(y\) and \(z\).
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Relations::Explicit::infer_property_based_relation</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">Relations::Explicit::infer_property_based_relation</span></span>:<br/><a href="5-er.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">relation</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Relations::Explicit::infer_property_based_relation</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Relations::Explicit::infer_property_based_relation</span></span>:<br/><a href="5-er.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">infs0</span><span class="plain-syntax">, </span><span class="identifier-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">infs1</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">BinaryPredicates::get_form_of_relation</span><span class="plain-syntax">(</span><span class="identifier-syntax">relation</span><span class="plain-syntax">) == </span><span class="identifier-syntax">Relation_VtoO</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-er.html#SP5" class="function-link"><span class="function-syntax">Relations::Explicit::get_form_of_relation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) == </span><span class="constant-syntax">Relation_VtoO</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">swap</span><span class="plain-syntax">=</span><span class="identifier-syntax">infs0</span><span class="plain-syntax">; </span><span class="identifier-syntax">infs0</span><span class="plain-syntax">=</span><span class="identifier-syntax">infs1</span><span class="plain-syntax">; </span><span class="identifier-syntax">infs1</span><span class="plain-syntax">=</span><span class="identifier-syntax">swap</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">BinaryPredicates::get_i6_storage_property</span><span class="plain-syntax">(</span><span class="identifier-syntax">relation</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prn</span><span class="plain-syntax"> = </span><a href="5-er.html#SP5" class="function-link"><span class="function-syntax">Relations::Explicit::get_i6_storage_property</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">World::Inferences::draw_property</span><span class="plain-syntax">(</span><span class="identifier-syntax">infs0</span><span class="plain-syntax">, </span><span class="identifier-syntax">prn</span><span class="plain-syntax">, </span><span class="identifier-syntax">InferenceSubjects::as_constant</span><span class="plain-syntax">(</span><span class="identifier-syntax">infs1</span><span class="plain-syntax">));</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>We need do nothing special: these relations can be compiled from their schemas.
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b>We need do nothing special: these relations can be compiled from their schemas.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Relations::Explicit::REL_compile</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Relations::Explicit::REL_compile</span></span>:<br/><a href="5-er.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">bp_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">self</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">task</span><span class="plain-syntax">, </span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="identifier-syntax">annotated_i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">asch</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Relations::Explicit::REL_compile</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Relations::Explicit::REL_compile</span></span>:<br/><a href="5-er.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">bp_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">self</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">task</span><span class="plain-syntax">, </span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="identifier-syntax">annotated_i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">asch</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>Problem message text:
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </b>Problem message text:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Relations::Explicit::REL_describe_for_problems</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">Relations::Explicit::REL_describe_for_problems</span></span>:<br/><a href="5-er.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">bp_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">self</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Relations::Explicit::REL_describe_for_problems</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Relations::Explicit::REL_describe_for_problems</span></span>:<br/><a href="5-er.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">bp_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">self</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Relations::Explicit::REL_describe_briefly</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">Relations::Explicit::REL_describe_briefly</span></span>:<br/><a href="5-er.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">bp_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">self</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">form_of_relation</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Relations::Explicit::REL_describe_briefly</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">Relations::Explicit::REL_describe_briefly</span></span>:<br/><a href="5-er.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">bp_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">self</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><a href="5-er.html#SP5" class="function-link"><span class="function-syntax">Relations::Explicit::get_form_of_relation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">Relation_OtoO:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"one-to-one"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">Relation_OtoV:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"one-to-various"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">Relation_VtoO:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"various-to-one"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
@ -234,9 +319,11 @@ inferences for \(y\) and \(z\).
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">Relation_Sym_OtoO:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"one-to-another"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">Relation_Sym_VtoV:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"various-to-each-other"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">Relation_Equiv:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"in groups"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">Relation_ByRoutine:</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"defined"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Relations::Explicit::REL_br_describe_briefly</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">Relations::Explicit::REL_br_describe_briefly</span></span>:<br/><a href="5-er.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">bp_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">self</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"defined"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="5-tur.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-am.html">1</a></li><li class="progresschapter"><a href="2-bv.html">2</a></li><li class="progresschapter"><a href="3-dlr.html">3</a></li><li class="progresschapter"><a href="4-nr.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-kpr.html">kpr</a></li><li class="progresssection"><a href="5-tap.html">tap</a></li><li class="progresssection"><a href="5-tcp.html">tcp</a></li><li class="progresssection"><a href="5-terr.html">terr</a></li><li class="progresssection"><a href="5-qr.html">qr</a></li><li class="progresssection"><a href="5-tur.html">tur</a></li><li class="progresscurrent">er</li><li class="progresssection"><a href="5-am.html">am</a></li><li class="progresschapter"><a href="6-tc.html">6</a></li><li class="progressnext"><a href="5-am.html">&#10095;</a></li></ul></div>

View file

@ -112,7 +112,7 @@ which use this module:
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="reserved-syntax">pcalc_prop</span><span class="plain-syntax"> *, </span><a href="4-prp.html#SP7" class="function-link"><span class="function-syntax">Propositions::log</span></a><span class="plain-syntax">)</span>
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="reserved-syntax">pcalc_prop</span><span class="plain-syntax"> *, </span><a href="4-ap.html#SP14" class="function-link"><span class="function-syntax">Atoms::log</span></a><span class="plain-syntax">)</span>
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="reserved-syntax">pcalc_term</span><span class="plain-syntax"> *, </span><a href="4-trm.html#SP12" class="function-link"><span class="function-syntax">Terms::log</span></a><span class="plain-syntax">)</span>
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *, </span><a href="3-bp.html#SP18" class="function-link"><span class="function-syntax">BinaryPredicates::log</span></a><span class="plain-syntax">)</span>
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *, </span><a href="3-bp.html#SP16" class="function-link"><span class="function-syntax">BinaryPredicates::log</span></a><span class="plain-syntax">)</span>
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="reserved-syntax">unary_predicate</span><span class="plain-syntax"> *, </span><a href="2-up.html#SP2" class="function-link"><span class="function-syntax">UnaryPredicates::log</span></a><span class="plain-syntax">)</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CalculusModule::start</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
@ -121,7 +121,7 @@ which use this module:
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_WRITER</span><span class="plain-syntax">(</span><span class="character-syntax">'o'</span><span class="plain-syntax">, </span><a href="4-ap.html#SP14" class="function-link"><span class="function-syntax">Atoms::log</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_WRITER</span><span class="plain-syntax">(</span><span class="character-syntax">'r'</span><span class="plain-syntax">, </span><a href="2-up.html#SP2" class="function-link"><span class="function-syntax">UnaryPredicates::log</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_WRITER</span><span class="plain-syntax">(</span><span class="character-syntax">'0'</span><span class="plain-syntax">, </span><a href="4-trm.html#SP12" class="function-link"><span class="function-syntax">Terms::log</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_WRITER</span><span class="plain-syntax">(</span><span class="character-syntax">'2'</span><span class="plain-syntax">, </span><a href="3-bp.html#SP18" class="function-link"><span class="function-syntax">BinaryPredicates::log</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_WRITER</span><span class="plain-syntax">(</span><span class="character-syntax">'2'</span><span class="plain-syntax">, </span><a href="3-bp.html#SP16" class="function-link"><span class="function-syntax">BinaryPredicates::log</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Log::declare_aspect</span><span class="plain-syntax">(</span><span class="constant-syntax">PREDICATE_CALCULUS_DA</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"predicate calculus"</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Log::declare_aspect</span><span class="plain-syntax">(</span><span class="constant-syntax">PREDICATE_CALCULUS_WORKINGS_DA</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"predicate calculus workings"</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::declare_type</span><span class="plain-syntax">(</span><span class="constant-syntax">subject_term_ANNOT</span><span class="plain-syntax">,</span>

View file

@ -86,7 +86,7 @@ function togglePopup(material_id) {
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Services</a></li><li><a href="index.html">calculus</a></li><li><a href="index.html#3">Chapter 3: Binary Predicates</a></li><li><b>Binary Predicates</b></li></ul></div>
<p class="purpose">To create and manage binary predicates, which are the underlying data structures beneath Inform's relations.</p>
<ul class="toc"><li><a href="3-bp.html#SP12">&#167;12. Making the equality relation</a></li><li><a href="3-bp.html#SP13">&#167;13. Making a pair of relations</a></li><li><a href="3-bp.html#SP15">&#167;15. BP construction</a></li><li><a href="3-bp.html#SP16">&#167;16. The package</a></li><li><a href="3-bp.html#SP17">&#167;17. The handler</a></li><li><a href="3-bp.html#SP18">&#167;18. BP and term logging</a></li><li><a href="3-bp.html#SP19">&#167;19. Relation names</a></li><li><a href="3-bp.html#SP21">&#167;21. Miscellaneous access routines</a></li></ul><hr class="tocbar">
<ul class="toc"><li><a href="3-bp.html#SP11">&#167;11. Making the equality relation</a></li><li><a href="3-bp.html#SP12">&#167;12. Making a pair of relations</a></li><li><a href="3-bp.html#SP13">&#167;13. BP construction</a></li><li><a href="3-bp.html#SP14">&#167;14. The package</a></li><li><a href="3-bp.html#SP15">&#167;15. The handler</a></li><li><a href="3-bp.html#SP16">&#167;16. BP and term logging</a></li><li><a href="3-bp.html#SP17">&#167;17. Relation names</a></li><li><a href="3-bp.html#SP19">&#167;19. Miscellaneous access routines</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>Given any binary predicate \(B\), we may wish to do some or all of the
following at run-time:
@ -162,7 +162,6 @@ and "inside" the wrong way round.
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">bp_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">relation_family</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">form_of_relation</span><span class="plain-syntax">; </span><span class="comment-syntax"> one of the </span><span class="extract"><span class="extract-syntax">Relation_*</span></span><span class="comment-syntax"> constants defined below</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">relation_name</span><span class="plain-syntax">; </span><span class="comment-syntax"> (which might have length 0)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp_created_at</span><span class="plain-syntax">; </span><span class="comment-syntax"> where declared in the source text</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">debugging_log_name</span><span class="plain-syntax">; </span><span class="comment-syntax"> used when printing propositions to the debug log</span>
@ -171,7 +170,6 @@ and "inside" the wrong way round.
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">package_request</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp_package</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp_iname</span><span class="plain-syntax">; </span><span class="comment-syntax"> when referred to as a constant</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">handler_iname</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">v2v_bitmap_iname</span><span class="plain-syntax">; </span><span class="comment-syntax"> only relevant for some relations</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">initialiser_iname</span><span class="plain-syntax">; </span><span class="comment-syntax"> if stored in dynamically allocated memory</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
@ -189,10 +187,6 @@ and "inside" the wrong way round.
<span class="plain-syntax"> </span><span class="comment-syntax"> for optimisation of run-time code:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">dynamic_memory</span><span class="plain-syntax">; </span><span class="comment-syntax"> stored in dynamically allocated memory</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">i6_storage_property</span><span class="plain-syntax">; </span><span class="comment-syntax"> provides run-time storage</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">storage_kindXXX</span><span class="plain-syntax">; </span><span class="comment-syntax"> kind of property owner</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">allow_function_simplification</span><span class="plain-syntax">; </span><span class="comment-syntax"> allow Inform to make use of any </span>\(f_i\)<span class="comment-syntax"> functions?</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">fast_route_finding</span><span class="plain-syntax">; </span><span class="comment-syntax"> use fast rather than slow route-finding algorithm?</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">loop_parent_optimisation_proviso</span><span class="plain-syntax">; </span><span class="comment-syntax"> if not NULL, optimise loops using object tree</span>
@ -206,29 +200,12 @@ and "inside" the wrong way round.
<span class="plain-syntax">} </span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure binary_predicate is accessed in 3/bpf and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>The following constants are used to identify the "form" of a BP (in that the
<span class="extract"><span class="extract-syntax">form_of_relation</span></span> field of any BP always equals one of these and never changes).
These constant names (and values) exactly match a set of constants compiled
into every I6 program created by Inform, so they can be used freely both in
the Inform source code and also in the I6 template layer.
</p>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">Relation_Implicit</span><span class="plain-syntax"> -1 </span><span class="comment-syntax"> all implicit BPs have this form, and all others are explicit</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">Relation_OtoO</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax"> </span><span class="comment-syntax"> one to one: "R relates one K to one K"</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">Relation_OtoV</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax"> </span><span class="comment-syntax"> one to various: "R relates one K to various K"</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">Relation_VtoO</span><span class="plain-syntax"> </span><span class="constant-syntax">3</span><span class="plain-syntax"> </span><span class="comment-syntax"> various to one: "R relates various K to one K"</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">Relation_VtoV</span><span class="plain-syntax"> </span><span class="constant-syntax">4</span><span class="plain-syntax"> </span><span class="comment-syntax"> various to various: "R relates various K to various K"</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">Relation_Sym_OtoO</span><span class="plain-syntax"> </span><span class="constant-syntax">5</span><span class="plain-syntax"> </span><span class="comment-syntax"> symmetric one to one: "R relates one K to another"</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">Relation_Sym_VtoV</span><span class="plain-syntax"> </span><span class="constant-syntax">6</span><span class="plain-syntax"> </span><span class="comment-syntax"> symmetric various to various: "R relates K to each other"</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">Relation_Equiv</span><span class="plain-syntax"> </span><span class="constant-syntax">7</span><span class="plain-syntax"> </span><span class="comment-syntax"> equivalence relation: "R relates K to each other in groups"</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">Relation_ByRoutine</span><span class="plain-syntax"> </span><span class="constant-syntax">8</span><span class="plain-syntax"> </span><span class="comment-syntax"> relation tested by a routine: "R relates K to L when (some condition)"</span>
</pre>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>That completes the catalogue of the one-off cases, and we can move on
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>That completes the catalogue of the one-off cases, and we can move on
to the five families of implicit relations which correspond to other
structures in the source text.
</p>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>The second family of implicit relations corresponds to any property which has
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>The second family of implicit relations corresponds to any property which has
been given as the meaning of a verb, as in the example
</p>
@ -240,7 +217,7 @@ been given as the meaning of a verb, as in the example
\(w\) a weight.
</p>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>The third family corresponds to defined adjectives which perform a
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>The third family corresponds to defined adjectives which perform a
numerical comparison in a particular way, as here:
</p>
@ -252,7 +229,7 @@ numerical comparison in a particular way, as here:
if woman \(x\) is taller than woman \(y\).
</p>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>The fourth family corresponds to value properties, so that
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>The fourth family corresponds to value properties, so that
</p>
<blockquote>
@ -263,7 +240,7 @@ if woman \(x\) is taller than woman \(y\).
doors \(d_1\) and \(d_2\) have the same street number.
</p>
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b>The fifth family corresponds to names of table columns. If any table includes
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>The fifth family corresponds to names of table columns. If any table includes
a column headed "eggs per clutch" then that will implicitly construct a
relation \(LEPC(n, T)\) which is true if and only if the number \(n\) is listed
as one of the eggs-per-clutch entries in the table \(T\), where \(T\) has to be
@ -271,11 +248,11 @@ one of the tables which has a column of this name.
</p>
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">VERB_MEANING_LINGUISTICS_TYPE</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">binary_predicate</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">VERB_MEANING_REVERSAL_LINGUISTICS_CALLBACK</span><span class="plain-syntax"> </span><a href="3-bp.html#SP23" class="function-link"><span class="function-syntax">BinaryPredicates::get_reversal</span></a>
<span class="definition-keyword">define</span> <span class="constant-syntax">VERB_MEANING_REVERSAL_LINGUISTICS_CALLBACK</span><span class="plain-syntax"> </span><a href="3-bp.html#SP21" class="function-link"><span class="function-syntax">BinaryPredicates::get_reversal</span></a>
<span class="definition-keyword">define</span> <span class="constant-syntax">VERB_MEANING_EQUALITY</span><span class="plain-syntax"> </span><span class="identifier-syntax">R_equality</span>
<span class="definition-keyword">define</span> <span class="constant-syntax">VERB_MEANING_POSSESSION</span><span class="plain-syntax"> </span><span class="identifier-syntax">a_has_b_predicate</span>
</pre>
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </b>Combining these:
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b>Combining these:
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -288,7 +265,7 @@ one of the tables which has a column of this name.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Kinds::binary_con</span><span class="plain-syntax">(</span><span class="identifier-syntax">CON_relation</span><span class="plain-syntax">, </span><span class="identifier-syntax">K0</span><span class="plain-syntax">, </span><span class="identifier-syntax">K1</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. </b>And as a convenience:
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </b>And as a convenience:
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -303,7 +280,7 @@ one of the tables which has a column of this name.
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>&#167;12. Making the equality relation. </b>As we shall see below, BPs are almost always created in matched pairs. There
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. Making the equality relation. </b>As we shall see below, BPs are almost always created in matched pairs. There
is one and only one exception to this rule: the equality predicate where
\(EQ(x, y)\) if \(x = y\). Equality plays a special role in the system of logic
we'll be using. Since \(x = y\) and \(y = x\) are exactly equivalent, it is safe
@ -322,7 +299,7 @@ this effect. For now, we give \(EQ\) entirely blank term details.
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="function-syntax">BinaryPredicates::make_equality</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">BinaryPredicates::make_equality</span></span>:<br/>The Equality Relation - <a href="3-ter.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">bp_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">family</span><span class="plain-syntax">, </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">WA</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> = </span><a href="3-bp.html#SP15" class="function-link"><span class="function-syntax">BinaryPredicates::make_single</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">family</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> = </span><a href="3-bp.html#SP13" class="function-link"><span class="function-syntax">BinaryPredicates::make_single</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">family</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="3-bptd.html#SP2" class="function-link"><span class="function-syntax">BPTerms::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">), </span><a href="3-bptd.html#SP2" class="function-link"><span class="function-syntax">BPTerms::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"is"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">WA</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">reversal</span><span class="plain-syntax"> = </span><span class="identifier-syntax">bp</span><span class="plain-syntax">; </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">right_way_round</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
@ -332,7 +309,7 @@ this effect. For now, we give \(EQ\) entirely blank term details.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>&#167;13. Making a pair of relations. </b>Every other BP belongs to a matched pair, in which each is the reversal of
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>&#167;12. Making a pair of relations. </b>Every other BP belongs to a matched pair, in which each is the reversal of
the other, but only one is designated as being "the right way round".
The left-hand term of one behaves like the right-hand term of the other,
and vice versa.
@ -344,7 +321,7 @@ how to compile the BP for the one which is the right way round.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="function-syntax">BinaryPredicates::make_pair</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">BinaryPredicates::make_pair</span></span>:<br/><a href="3-bp.html#SP14">&#167;14</a><br/>The Equality Relation - <a href="3-ter.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">bp_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">family</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="function-syntax">BinaryPredicates::make_pair</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">BinaryPredicates::make_pair</span></span>:<br/>The Equality Relation - <a href="3-ter.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">bp_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">family</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">bp_term_details</span><span class="plain-syntax"> </span><span class="identifier-syntax">left_term</span><span class="plain-syntax">, </span><span class="reserved-syntax">bp_term_details</span><span class="plain-syntax"> </span><span class="identifier-syntax">right_term</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">namer</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mtf</span><span class="plain-syntax">, </span><span class="reserved-syntax">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tf</span><span class="plain-syntax">, </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">source_name</span><span class="plain-syntax">) {</span>
@ -356,9 +333,9 @@ how to compile the BP for the one which is the right way round.
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::copy</span><span class="plain-syntax">(</span><span class="identifier-syntax">nr</span><span class="plain-syntax">, </span><span class="identifier-syntax">namer</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">nr</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">nr</span><span class="plain-syntax">, </span><span class="string-syntax">"%S-r"</span><span class="plain-syntax">, </span><span class="identifier-syntax">n</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax"> = </span><a href="3-bp.html#SP15" class="function-link"><span class="function-syntax">BinaryPredicates::make_single</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">family</span><span class="plain-syntax">, </span><span class="identifier-syntax">left_term</span><span class="plain-syntax">, </span><span class="identifier-syntax">right_term</span><span class="plain-syntax">, </span><span class="identifier-syntax">n</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax"> = </span><a href="3-bp.html#SP13" class="function-link"><span class="function-syntax">BinaryPredicates::make_single</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">family</span><span class="plain-syntax">, </span><span class="identifier-syntax">left_term</span><span class="plain-syntax">, </span><span class="identifier-syntax">right_term</span><span class="plain-syntax">, </span><span class="identifier-syntax">n</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">mtf</span><span class="plain-syntax">, </span><span class="identifier-syntax">tf</span><span class="plain-syntax">, </span><span class="identifier-syntax">source_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bpr</span><span class="plain-syntax"> = </span><a href="3-bp.html#SP15" class="function-link"><span class="function-syntax">BinaryPredicates::make_single</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">family</span><span class="plain-syntax">, </span><span class="identifier-syntax">right_term</span><span class="plain-syntax">, </span><span class="identifier-syntax">left_term</span><span class="plain-syntax">, </span><span class="identifier-syntax">nr</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bpr</span><span class="plain-syntax"> = </span><a href="3-bp.html#SP13" class="function-link"><span class="function-syntax">BinaryPredicates::make_single</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">family</span><span class="plain-syntax">, </span><span class="identifier-syntax">right_term</span><span class="plain-syntax">, </span><span class="identifier-syntax">left_term</span><span class="plain-syntax">, </span><span class="identifier-syntax">nr</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">WordAssemblages::lit_0</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">reversal</span><span class="plain-syntax"> = </span><span class="identifier-syntax">bpr</span><span class="plain-syntax">; </span><span class="identifier-syntax">bpr</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">reversal</span><span class="plain-syntax"> = </span><span class="identifier-syntax">bp</span><span class="plain-syntax">;</span>
@ -373,29 +350,7 @@ how to compile the BP for the one which is the right way round.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>&#167;14. </b>When the source text declares new relations, it turns out to be convenient
to make their BPs in a two-stage process: to make sketchy, mostly-blank BP
structures for them early on &mdash; but getting their names registered &mdash; and
then fill in the correct details later. This is where such sketchy pairs are
made:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="function-syntax">BinaryPredicates::make_pair_sketchily</span><span class="plain-syntax">(</span><span class="reserved-syntax">bp_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">family</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">wa</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">f</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">relname</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">relname</span><span class="plain-syntax">, </span><span class="string-syntax">"%V"</span><span class="plain-syntax">, </span><span class="identifier-syntax">WordAssemblages::first_word</span><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">wa</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="3-bp.html#SP13" class="function-link"><span class="function-syntax">BinaryPredicates::make_pair</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">family</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="3-bptd.html#SP2" class="function-link"><span class="function-syntax">BPTerms::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">), </span><a href="3-bptd.html#SP2" class="function-link"><span class="function-syntax">BPTerms::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">relname</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">wa</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">relname</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">form_of_relation</span><span class="plain-syntax"> = </span><span class="identifier-syntax">f</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">reversal</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">form_of_relation</span><span class="plain-syntax"> = </span><span class="identifier-syntax">f</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>&#167;15. BP construction. </b>The following routine should only ever be called from the two above: provided
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>&#167;13. BP construction. </b>The following routine should only ever be called from the two above: provided
we stick to that, we ensure the golden rule that {\it every BP has a reversal
and a BP equals its reversal if and only if it is the equality relation}.
</p>
@ -408,13 +363,12 @@ would always be <span class="extract"><span class="extract-syntax">NULL</span></
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="function-syntax">BinaryPredicates::make_single</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">BinaryPredicates::make_single</span></span>:<br/><a href="3-bp.html#SP12">&#167;12</a>, <a href="3-bp.html#SP13">&#167;13</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">bp_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">family</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="function-syntax">BinaryPredicates::make_single</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">BinaryPredicates::make_single</span></span>:<br/><a href="3-bp.html#SP11">&#167;11</a>, <a href="3-bp.html#SP12">&#167;12</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">bp_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">family</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">bp_term_details</span><span class="plain-syntax"> </span><span class="identifier-syntax">left_term</span><span class="plain-syntax">, </span><span class="reserved-syntax">bp_term_details</span><span class="plain-syntax"> </span><span class="identifier-syntax">right_term</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mtf</span><span class="plain-syntax">, </span><span class="reserved-syntax">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tf</span><span class="plain-syntax">, </span><span class="identifier-syntax">word_assemblage</span><span class="plain-syntax"> </span><span class="identifier-syntax">rn</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">relation_family</span><span class="plain-syntax"> = </span><span class="identifier-syntax">family</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">form_of_relation</span><span class="plain-syntax"> = </span><span class="constant-syntax">Relation_Implicit</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">relation_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">rn</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">bp_created_at</span><span class="plain-syntax"> = </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">debugging_log_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
@ -423,7 +377,6 @@ would always be <span class="extract"><span class="extract-syntax">NULL</span></
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">bp_package</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">bp_iname</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">handler_iname</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">v2v_bitmap_iname</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">initialiser_iname</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
@ -449,10 +402,6 @@ would always be <span class="extract"><span class="extract-syntax">NULL</span></
<span class="plain-syntax"> </span><span class="comment-syntax"> for optimisation of run-time code</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">dynamic_memory</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">i6_storage_property</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="comment-syntax"> bp-&gt;storage_kind = NULL;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">allow_function_simplification</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">fast_route_finding</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">loop_parent_optimisation_proviso</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
@ -465,11 +414,11 @@ would always be <span class="extract"><span class="extract-syntax">NULL</span></
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP16" class="paragraph-anchor"></a><b>&#167;16. The package. </b></p>
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>&#167;14. The package. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">#</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
<span class="identifier-syntax">package_request</span><span class="plain-syntax"> *</span><span class="function-syntax">BinaryPredicates::package</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">BinaryPredicates::package</span></span>:<br/><a href="3-bp.html#SP17">&#167;17</a>, <a href="3-bp.html#SP26">&#167;26</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">package_request</span><span class="plain-syntax"> *</span><span class="function-syntax">BinaryPredicates::package</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">BinaryPredicates::package</span></span>:<br/><a href="3-bp.html#SP15">&#167;15</a>, <a href="3-bp.html#SP24">&#167;24</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"null bp"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">bp_package</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">bp_package</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Hierarchy::package</span><span class="plain-syntax">(</span><span class="identifier-syntax">CompilationUnits::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">bp_created_at</span><span class="plain-syntax">), </span><span class="identifier-syntax">RELATIONS_HAP</span><span class="plain-syntax">);</span>
@ -477,20 +426,20 @@ would always be <span class="extract"><span class="extract-syntax">NULL</span></
<span class="plain-syntax">}</span>
<span class="plain-syntax">#</span><span class="identifier-syntax">endif</span>
</pre>
<p class="commentary firstcommentary"><a id="SP17" class="paragraph-anchor"></a><b>&#167;17. The handler. </b></p>
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>&#167;15. The handler. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">#</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">BinaryPredicates::handler_iname</span><span class="plain-syntax">(</span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">handler_iname</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">package_request</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax"> = </span><a href="3-bp.html#SP16" class="function-link"><span class="function-syntax">BinaryPredicates::package</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">package_request</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R</span><span class="plain-syntax"> = </span><a href="3-bp.html#SP14" class="function-link"><span class="function-syntax">BinaryPredicates::package</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">handler_iname</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Hierarchy::make_iname_in</span><span class="plain-syntax">(</span><span class="identifier-syntax">HANDLER_FN_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">R</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">handler_iname</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="plain-syntax">#</span><span class="identifier-syntax">endif</span>
</pre>
<p class="commentary firstcommentary"><a id="SP18" class="paragraph-anchor"></a><b>&#167;18. BP and term logging. </b></p>
<p class="commentary firstcommentary"><a id="SP16" class="paragraph-anchor"></a><b>&#167;16. BP and term logging. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">BinaryPredicates::log_term_details</span><span class="plain-syntax">(</span><span class="reserved-syntax">bp_term_details</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bptd</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">) {</span>
@ -503,21 +452,23 @@ would always be <span class="extract"><span class="extract-syntax">NULL</span></
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">BinaryPredicates::log</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">BinaryPredicates::log</span></span>:<br/>Calculus Module - <a href="1-cm.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) { </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;null-BP&gt;\n"</span><span class="plain-syntax">); </span><span class="reserved-syntax">return</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"BP%d &lt;%S&gt; - %s way round - %s\n"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">, </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">debugging_log_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">right_way_round</span><span class="plain-syntax">?</span><span class="string-syntax">"right"</span><span class="plain-syntax">:</span><span class="string-syntax">"wrong"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="3-bp.html#SP21" class="function-link"><span class="function-syntax">BinaryPredicates::form_to_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;2; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><a href="3-bp.html#SP18" class="function-link"><span class="function-syntax">BinaryPredicates::log_term_details</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">term_details</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">], </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Relations::Explicit::form_to_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifndef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"BP%d &lt;%S&gt; - %s way round\n"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">, </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">debugging_log_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">right_way_round</span><span class="plain-syntax">?</span><span class="string-syntax">"right"</span><span class="plain-syntax">:</span><span class="string-syntax">"wrong"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;2; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><a href="3-bp.html#SP16" class="function-link"><span class="function-syntax">BinaryPredicates::log_term_details</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">term_details</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">], </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" test: $i\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">task_functions</span><span class="plain-syntax">[</span><span class="constant-syntax">TEST_ATOM_TASK</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" make true: $i\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">task_functions</span><span class="plain-syntax">[</span><span class="constant-syntax">NOW_ATOM_TRUE_TASK</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" make false: $i\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">task_functions</span><span class="plain-syntax">[</span><span class="constant-syntax">NOW_ATOM_FALSE_TASK</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" storage property: $Y\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">i6_storage_property</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> #</span><span class="identifier-syntax">endif</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>&#167;19. Relation names. </b>A useful little nonterminal to spot the names of relation, such as
<p class="commentary firstcommentary"><a id="SP17" class="paragraph-anchor"></a><b>&#167;17. Relation names. </b>A useful little nonterminal to spot the names of relation, such as
"adjacency". (Note: not "adjacency relation".) This is only used when there
is good reason to suspect that the word in question is the name of a relation,
so the fact that it runs relatively slowly does not matter.
@ -533,71 +484,47 @@ so the fact that it runs relatively slowly does not matter.
<span class="plain-syntax"> ==&gt; { </span><span class="identifier-syntax">fail</span><span class="plain-syntax"> </span><span class="identifier-syntax">nonterminal</span><span class="plain-syntax"> };</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP20" class="paragraph-anchor"></a><b>&#167;20. </b></p>
<p class="commentary firstcommentary"><a id="SP18" class="paragraph-anchor"></a><b>&#167;18. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">BinaryPredicates::get_log_name</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">BinaryPredicates::get_log_name</span></span>:<br/>Atomic Propositions - <a href="4-ap.html#SP14_3">&#167;14.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">debugging_log_name</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP21" class="paragraph-anchor"></a><b>&#167;21. Miscellaneous access routines. </b></p>
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>&#167;19. Miscellaneous access routines. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">BinaryPredicates::get_form_of_relation</span><span class="plain-syntax">(</span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">form_of_relation</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">BinaryPredicates::is_explicit_with_runtime_storage</span><span class="plain-syntax">(</span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">right_way_round</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">bp</span><span class="plain-syntax"> = </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">reversal</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">form_of_relation</span><span class="plain-syntax"> == </span><span class="constant-syntax">Relation_Implicit</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">form_of_relation</span><span class="plain-syntax"> == </span><span class="constant-syntax">Relation_ByRoutine</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="function-syntax">BinaryPredicates::form_to_text</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">BinaryPredicates::form_to_text</span></span>:<br/><a href="3-bp.html#SP18">&#167;18</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">form_of_relation</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">Relation_Implicit:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"Relation_Implicit"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">Relation_OtoO:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"Relation_OtoO"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">Relation_OtoV:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"Relation_OtoV"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">Relation_VtoO:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"Relation_VtoO"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">Relation_VtoV:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"Relation_VtoV"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">Relation_Sym_OtoO:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"Relation_Sym_OtoO"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">Relation_Sym_VtoV:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"Relation_Sym_VtoV"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">Relation_Equiv:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"Relation_Equiv"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">Relation_ByRoutine:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"Relation_ByRoutine"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">default:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"formless-BP"</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">BinaryPredicates::get_bp_created_at</span><span class="plain-syntax">(</span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">bp_created_at</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP22" class="paragraph-anchor"></a><b>&#167;22. </b>Details of the terms:
<p class="commentary firstcommentary"><a id="SP20" class="paragraph-anchor"></a><b>&#167;20. </b>Details of the terms:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">BinaryPredicates::term_kind</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">BinaryPredicates::term_kind</span></span>:<br/>Binary Predicate Families - <a href="3-bpf.html#SP6">&#167;6</a><br/>Type Check Propositions - <a href="4-tcp.html#SP7">&#167;7</a>, <a href="4-tcp.html#SP9_1">&#167;9.1</a><br/>Simplifications - <a href="5-smp.html#SP2_2">&#167;2.2</a>, <a href="5-smp.html#SP7">&#167;7</a>, <a href="5-smp.html#SP14">&#167;14</a><br/>Sentence Conversions - <a href="5-sc.html#SP1_8">&#167;1.8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">BinaryPredicates::term_kind</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">BinaryPredicates::term_kind</span></span>:<br/>Binary Predicate Families - <a href="3-bpf.html#SP6">&#167;6</a><br/>Type Check Propositions - <a href="4-tcp.html#SP7">&#167;7</a>, <a href="4-tcp.html#SP9_1">&#167;9.1</a><br/>Simplifications - <a href="5-smp.html#SP2_2">&#167;2.2</a>, <a href="5-smp.html#SP7">&#167;7</a>, <a href="5-smp.html#SP14">&#167;14</a><br/>Sentence Conversions - <a href="5-sc.html#SP1_8">&#167;1.8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"tried to find kind of null relation"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="3-bptd.html#SP7" class="function-link"><span class="function-syntax">BPTerms::kind</span></a><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">term_details</span><span class="plain-syntax">[</span><span class="identifier-syntax">t</span><span class="plain-syntax">]));</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">i6_schema</span><span class="plain-syntax"> *</span><span class="function-syntax">BinaryPredicates::get_term_as_fn_of_other</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">BinaryPredicates::get_term_as_fn_of_other</span></span>:<br/>Terms - <a href="4-trm.html#SP11">&#167;11</a>, <a href="4-trm.html#SP12">&#167;12</a><br/>Simplifications - <a href="5-smp.html#SP12">&#167;12</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">i6_schema</span><span class="plain-syntax"> *</span><span class="function-syntax">BinaryPredicates::get_term_as_fn_of_other</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">BinaryPredicates::get_term_as_fn_of_other</span></span>:<br/>Terms - <a href="4-trm.html#SP11">&#167;11</a>, <a href="4-trm.html#SP12">&#167;12</a><br/>Simplifications - <a href="5-smp.html#SP12">&#167;12</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">t</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"tried to find function of null relation"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">term_details</span><span class="plain-syntax">[</span><span class="identifier-syntax">t</span><span class="plain-syntax">].</span><span class="element-syntax">function_of_other</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP23" class="paragraph-anchor"></a><b>&#167;23. </b>Reversing:
<p class="commentary firstcommentary"><a id="SP21" class="paragraph-anchor"></a><b>&#167;21. </b>Reversing:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="function-syntax">BinaryPredicates::get_reversal</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">BinaryPredicates::get_reversal</span></span>:<br/><a href="3-bp.html#SP9">&#167;9</a><br/>Simplifications - <a href="5-smp.html#SP10">&#167;10</a><br/>Sentence Conversions - <a href="5-sc.html#SP1_13_1">&#167;1.13.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="function-syntax">BinaryPredicates::get_reversal</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">BinaryPredicates::get_reversal</span></span>:<br/><a href="3-bp.html#SP8">&#167;8</a><br/>Simplifications - <a href="5-smp.html#SP10">&#167;10</a><br/>Sentence Conversions - <a href="5-sc.html#SP1_13_1">&#167;1.13.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"tried to find reversal of null relation"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">reversal</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">BinaryPredicates::is_the_wrong_way_round</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">BinaryPredicates::is_the_wrong_way_round</span></span>:<br/>Type Check Propositions - <a href="4-tcp.html#SP4_6">&#167;4.6</a><br/>Simplifications - <a href="5-smp.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">BinaryPredicates::is_the_wrong_way_round</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">BinaryPredicates::is_the_wrong_way_round</span></span>:<br/>Type Check Propositions - <a href="4-tcp.html#SP4_6">&#167;4.6</a><br/>Simplifications - <a href="5-smp.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">right_way_round</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP24" class="paragraph-anchor"></a><b>&#167;24. </b>For compiling code from conditions:
<p class="commentary firstcommentary"><a id="SP22" class="paragraph-anchor"></a><b>&#167;22. </b>For compiling code from conditions:
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -610,7 +537,7 @@ so the fact that it runs relatively slowly does not matter.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP25" class="paragraph-anchor"></a><b>&#167;25. </b>For the A-parser. The real code is all elsewhere; note that the
<p class="commentary firstcommentary"><a id="SP23" class="paragraph-anchor"></a><b>&#167;23. </b>For the A-parser. The real code is all elsewhere; note that the
<span class="extract"><span class="extract-syntax">assertions</span></span> field, which is used only for relations between values rather
than objects, is a linked list. (Information about objects is stored in
linked lists pointed to from the <span class="extract"><span class="extract-syntax">instance</span></span> structure in question; that
@ -629,23 +556,18 @@ relation itself.)
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">knowledge_about_bp</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP26" class="paragraph-anchor"></a><b>&#167;26. </b>For use when optimising code.
<p class="commentary firstcommentary"><a id="SP24" class="paragraph-anchor"></a><b>&#167;24. </b>For use when optimising code.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax">#</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
<span class="identifier-syntax">property</span><span class="plain-syntax"> *</span><span class="function-syntax">BinaryPredicates::get_i6_storage_property</span><span class="plain-syntax">(</span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">i6_storage_property</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="plain-syntax">#</span><span class="identifier-syntax">endif</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">BinaryPredicates::allows_function_simplification</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">BinaryPredicates::allows_function_simplification</span></span>:<br/>Simplifications - <a href="5-smp.html#SP12">&#167;12</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">BinaryPredicates::allows_function_simplification</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">BinaryPredicates::allows_function_simplification</span></span>:<br/>Simplifications - <a href="5-smp.html#SP12">&#167;12</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">allow_function_simplification</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="plain-syntax">#</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">CORE_MODULE</span>
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">default_rr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">BinaryPredicates::mark_as_needed</span><span class="plain-syntax">(</span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">record_needed</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">bp_iname</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Hierarchy::make_iname_in</span><span class="plain-syntax">(</span><span class="identifier-syntax">RELATION_RECORD_HL</span><span class="plain-syntax">, </span><a href="3-bp.html#SP16" class="function-link"><span class="function-syntax">BinaryPredicates::package</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">bp_iname</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Hierarchy::make_iname_in</span><span class="plain-syntax">(</span><span class="identifier-syntax">RELATION_RECORD_HL</span><span class="plain-syntax">, </span><a href="3-bp.html#SP14" class="function-link"><span class="function-syntax">BinaryPredicates::package</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">default_rr</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">default_rr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">bp_iname</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">iname</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Hierarchy::find</span><span class="plain-syntax">(</span><span class="identifier-syntax">MEANINGLESS_RR_HL</span><span class="plain-syntax">);</span>
@ -664,7 +586,7 @@ relation itself.)
<span class="plain-syntax">}</span>
<span class="plain-syntax">#</span><span class="identifier-syntax">endif</span>
</pre>
<p class="commentary firstcommentary"><a id="SP27" class="paragraph-anchor"></a><b>&#167;27. </b>The predicate-calculus engine compiles much better loops if
<p class="commentary firstcommentary"><a id="SP25" class="paragraph-anchor"></a><b>&#167;25. </b>The predicate-calculus engine compiles much better loops if
we can help it by providing an I6 schema of a loop header solving the
following problem:
</p>
@ -681,18 +603,18 @@ of looping over all \(x\) in the left domain of \(R\) and testing every possible
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">BinaryPredicates::write_optimised_loop_schema</span><span class="plain-syntax">(</span><span class="reserved-syntax">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-bp.html#SP27_1" class="named-paragraph-link"><span class="named-paragraph">Try loop ranger optimisation</span><span class="named-paragraph-number">27.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-bp.html#SP27_2" class="named-paragraph-link"><span class="named-paragraph">Try loop parent optimisation subject to a proviso</span><span class="named-paragraph-number">27.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-bp.html#SP25_1" class="named-paragraph-link"><span class="named-paragraph">Try loop ranger optimisation</span><span class="named-paragraph-number">25.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-bp.html#SP25_2" class="named-paragraph-link"><span class="named-paragraph">Try loop parent optimisation subject to a proviso</span><span class="named-paragraph-number">25.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP27_1" class="paragraph-anchor"></a><b>&#167;27.1. </b>Some relations \(R\) provide a "ranger" routine, <span class="extract"><span class="extract-syntax">R</span></span>, which is such that
<p class="commentary firstcommentary"><a id="SP25_1" class="paragraph-anchor"></a><b>&#167;25.1. </b>Some relations \(R\) provide a "ranger" routine, <span class="extract"><span class="extract-syntax">R</span></span>, which is such that
<span class="extract"><span class="extract-syntax">R(t)</span></span> supplies the first "child" of \(t\) and <span class="extract"><span class="extract-syntax">R(t, n)</span></span> supplies the next
"child" after \(n\). Thus <span class="extract"><span class="extract-syntax">R</span></span> iterates through some linked list of all the
objects \(x\) such that \(R(x, t)\).
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Try loop ranger optimisation</span><span class="named-paragraph-number">27.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Try loop ranger optimisation</span><span class="named-paragraph-number">25.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -704,8 +626,8 @@ objects \(x\) such that \(R(x, t)\).
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-bp.html#SP27">&#167;27</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP27_2" class="paragraph-anchor"></a><b>&#167;27.2. </b>Other relations make use of the I6 object tree, in cases where \(R(x, t)\)
<ul class="endnotetexts"><li>This code is used in <a href="3-bp.html#SP25">&#167;25</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP25_2" class="paragraph-anchor"></a><b>&#167;25.2. </b>Other relations make use of the I6 object tree, in cases where \(R(x, t)\)
is true if and only if \(t\) is an object which is the parent of \(x\) in the
I6 object tree and some routine associated with \(R\), called its
proviso <span class="extract"><span class="extract-syntax">P</span></span>, is such that <span class="extract"><span class="extract-syntax">P(x) == t</span></span>. For example, \({\it worn-by}(x, t)\)
@ -714,7 +636,7 @@ ensures that we don't falsely pick up, say, items carried by \(t\) which
aren't being worn, or aren't even clothing.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Try loop parent optimisation subject to a proviso</span><span class="named-paragraph-number">27.2</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Try loop parent optimisation subject to a proviso</span><span class="named-paragraph-number">25.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -725,7 +647,7 @@ aren't being worn, or aren't even clothing.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-bp.html#SP27">&#167;27</a>.</li></ul>
<ul class="endnotetexts"><li>This code is used in <a href="3-bp.html#SP25">&#167;25</a>.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="3-bptd.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-cm.html">1</a></li><li class="progresschapter"><a href="2-up.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-bpf.html">bpf</a></li><li class="progresssection"><a href="3-bptd.html">bptd</a></li><li class="progresscurrent">bp</li><li class="progresssection"><a href="3-ter.html">ter</a></li><li class="progresschapter"><a href="4-trm.html">4</a></li><li class="progresschapter"><a href="5-cs.html">5</a></li><li class="progressnext"><a href="3-ter.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->

View file

@ -231,8 +231,8 @@ fields, when they are mentioned in problem messages.
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"a"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" relation"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K0</span><span class="plain-syntax"> = </span><a href="3-bp.html#SP22" class="function-link"><span class="function-syntax">BinaryPredicates::term_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">); </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K0</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">K0</span><span class="plain-syntax"> = </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K1</span><span class="plain-syntax"> = </span><a href="3-bp.html#SP22" class="function-link"><span class="function-syntax">BinaryPredicates::term_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">); </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K1</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">K1</span><span class="plain-syntax"> = </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K0</span><span class="plain-syntax"> = </span><a href="3-bp.html#SP20" class="function-link"><span class="function-syntax">BinaryPredicates::term_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">); </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K0</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">K0</span><span class="plain-syntax"> = </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K1</span><span class="plain-syntax"> = </span><a href="3-bp.html#SP20" class="function-link"><span class="function-syntax">BinaryPredicates::term_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">); </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K1</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">K1</span><span class="plain-syntax"> = </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" (between "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">K0</span><span class="plain-syntax">, </span><span class="identifier-syntax">K1</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Kinds::Textual::write_plural</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">K0</span><span class="plain-syntax">);</span>

View file

@ -128,7 +128,7 @@ the ideas are exactly the same.
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">bp_term_details</span><span class="plain-syntax"> </span><span class="function-syntax">BPTerms::new</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">BPTerms::new</span></span>:<br/><a href="3-bptd.html#SP3">&#167;3</a><br/>Binary Predicates - <a href="3-bp.html#SP12">&#167;12</a>, <a href="3-bp.html#SP14">&#167;14</a><br/>The Equality Relation - <a href="3-ter.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="constant-syntax">TERM_DOMAIN_CALCULUS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">infs</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">bp_term_details</span><span class="plain-syntax"> </span><span class="function-syntax">BPTerms::new</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">BPTerms::new</span></span>:<br/><a href="3-bptd.html#SP3">&#167;3</a><br/>Binary Predicates - <a href="3-bp.html#SP11">&#167;11</a><br/>The Equality Relation - <a href="3-ter.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="constant-syntax">TERM_DOMAIN_CALCULUS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">infs</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">bp_term_details</span><span class="plain-syntax"> </span><span class="identifier-syntax">bptd</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bptd</span><span class="plain-syntax">.</span><span class="element-syntax">called_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bptd</span><span class="plain-syntax">.</span><span class="element-syntax">function_of_other</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
@ -228,7 +228,7 @@ container (if any) is at present directly containing \(y\).
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">BPTerms::kind</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">BPTerms::kind</span></span>:<br/>Binary Predicates - <a href="3-bp.html#SP10">&#167;10</a>, <a href="3-bp.html#SP22">&#167;22</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">bp_term_details</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bptd</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">BPTerms::kind</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">BPTerms::kind</span></span>:<br/>Binary Predicates - <a href="3-bp.html#SP9">&#167;9</a>, <a href="3-bp.html#SP20">&#167;20</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">bp_term_details</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bptd</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bptd</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bptd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">implies_kind</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">bptd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">implies_kind</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TERM_DOMAIN_TO_KIND_FUNCTION</span><span class="plain-syntax">(</span><span class="identifier-syntax">bptd</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">implies_infs</span><span class="plain-syntax">);</span>

View file

@ -113,16 +113,16 @@ since (alone among binary predicates) it has no distinct reversal.
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Calculus::Equality::stock</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Calculus::Equality::stock</span></span>:<br/><a href="3-ter.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">bp_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">self</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">n</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">R_equality</span><span class="plain-syntax"> = </span><a href="3-bp.html#SP12" class="function-link"><span class="function-syntax">BinaryPredicates::make_equality</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">equality_bp_family</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">R_equality</span><span class="plain-syntax"> = </span><a href="3-bp.html#SP11" class="function-link"><span class="function-syntax">BinaryPredicates::make_equality</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">equality_bp_family</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PreformUtilities::wording</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;relation-names&gt;</span><span class="plain-syntax">, </span><span class="identifier-syntax">EQUALITY_RELATION_NAME</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="3-bp.html#SP11" class="function-link"><span class="function-syntax">BinaryPredicates::set_index_details</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">R_equality</span><span class="plain-syntax">, </span><span class="string-syntax">"value"</span><span class="plain-syntax">, </span><span class="string-syntax">"value"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-bp.html#SP10" class="function-link"><span class="function-syntax">BinaryPredicates::set_index_details</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">R_equality</span><span class="plain-syntax">, </span><span class="string-syntax">"value"</span><span class="plain-syntax">, </span><span class="string-syntax">"value"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Calculus::Equality::stock_spatial</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Calculus::Equality::stock_spatial</span></span>:<br/><a href="3-ter.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">bp_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">self</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">n</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">a_has_b_predicate</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="3-bp.html#SP13" class="function-link"><span class="function-syntax">BinaryPredicates::make_pair</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spatial_bp_family</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="3-bp.html#SP12" class="function-link"><span class="function-syntax">BinaryPredicates::make_pair</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spatial_bp_family</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="3-bptd.html#SP3" class="function-link"><span class="function-syntax">BPTerms::new_full</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><a href="3-bptd.html#SP2" class="function-link"><span class="function-syntax">BPTerms::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="string-syntax">"has"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"is-had-by"</span><span class="plain-syntax">,</span>

View file

@ -403,7 +403,7 @@ quantifier is:
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_binary_predicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">prop</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">predicate</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"?bad-bp?"</span><span class="plain-syntax">); </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><a href="3-bp.html#SP20" class="function-link"><span class="function-syntax">BinaryPredicates::get_log_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"?bad-bp?"</span><span class="plain-syntax">); </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><a href="3-bp.html#SP18" class="function-link"><span class="function-syntax">BinaryPredicates::get_log_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">));</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-ap.html#SP14">&#167;14</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP14_4" class="paragraph-anchor"></a><b>&#167;14.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Log a comma-separated list of terms for this atomic proposition</span><span class="named-paragraph-number">14.4</span></span><span class="comment-syntax"> =</span>

View file

@ -359,7 +359,7 @@ would work instead. If it would, we make the change within the proposition.
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_binary_predicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">pl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">predicate</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-bp.html#SP23" class="function-link"><span class="function-syntax">BinaryPredicates::is_the_wrong_way_round</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">)) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"BP wrong way round"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-bp.html#SP21" class="function-link"><span class="function-syntax">BinaryPredicates::is_the_wrong_way_round</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">)) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"BP wrong way round"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="4-tcp.html#SP9" class="function-link"><span class="function-syntax">Propositions::Checker::type_check_binary_predicate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pl</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">vta</span><span class="plain-syntax">, </span><span class="identifier-syntax">tck</span><span class="plain-syntax">) == </span><span class="identifier-syntax">NEVER_MATCH</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> == </span><span class="identifier-syntax">R_equality</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">unary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">alt</span><span class="plain-syntax"> = </span><a href="4-trm.html#SP10" class="function-link"><span class="function-syntax">Terms::noun_to_adj_conversion</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">terms</span><span class="plain-syntax">[1]);</span>
@ -461,7 +461,7 @@ function.
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">Propositions::Checker::approximate_argument_kind</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Propositions::Checker::approximate_argument_kind</span></span>:<br/><a href="4-tcp.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><a href="3-bp.html#SP22" class="function-link"><span class="function-syntax">BinaryPredicates::term_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><a href="3-bp.html#SP20" class="function-link"><span class="function-syntax">BinaryPredicates::term_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Kinds::weaken</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
@ -545,7 +545,7 @@ produce a <span class="extract"><span class="extract-syntax">kinds_required</spa
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&lt;2; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Kinds::weaken</span><span class="plain-syntax">(</span><a href="3-bp.html#SP22" class="function-link"><span class="function-syntax">BinaryPredicates::term_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">), </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Kinds::weaken</span><span class="plain-syntax">(</span><a href="3-bp.html#SP20" class="function-link"><span class="function-syntax">BinaryPredicates::term_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">), </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kinds_required</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">] = </span><span class="identifier-syntax">K</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>

View file

@ -344,7 +344,7 @@ value, because this might not yet have been checked otherwise.
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">.</span><span class="identifier-syntax">function</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">.</span><span class="element-syntax">function</span><span class="plain-syntax">)-&gt;</span><span class="element-syntax">bp</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">fn</span><span class="plain-syntax"> = </span><a href="3-bp.html#SP22" class="function-link"><span class="function-syntax">BinaryPredicates::get_term_as_fn_of_other</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">-</span><span class="identifier-syntax">pt</span><span class="plain-syntax">.</span><span class="element-syntax">function</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">from_term</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">fn</span><span class="plain-syntax"> = </span><a href="3-bp.html#SP20" class="function-link"><span class="function-syntax">BinaryPredicates::get_term_as_fn_of_other</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">-</span><span class="identifier-syntax">pt</span><span class="plain-syntax">.</span><span class="element-syntax">function</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">from_term</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">fn</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"function of non-functional predicate"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-cs.html#SP6" class="function-link"><span class="function-syntax">Calculus::Schemas::emit_expand_from_terms</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">fn</span><span class="plain-syntax">, &amp;(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">.</span><span class="element-syntax">function</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">fn_of</span><span class="plain-syntax">), </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
@ -378,7 +378,7 @@ concisely and without fuss.
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::log_node</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">C</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">function</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">function</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">bp</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">fn</span><span class="plain-syntax"> = </span><a href="3-bp.html#SP22" class="function-link"><span class="function-syntax">BinaryPredicates::get_term_as_fn_of_other</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">-</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">function</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">from_term</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">fn</span><span class="plain-syntax"> = </span><a href="3-bp.html#SP20" class="function-link"><span class="function-syntax">BinaryPredicates::get_term_as_fn_of_other</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">-</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">function</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">from_term</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">fn</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"function of non-functional predicate"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-cs.html#SP10" class="function-link"><span class="function-syntax">Calculus::Schemas::write_applied</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">fn</span><span class="plain-syntax">, &amp;(</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">function</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">fn_of</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pt</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">variable</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>

View file

@ -167,7 +167,7 @@ error.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Calculus::Schemas::modify</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Calculus::Schemas::modify</span></span>:<br/>Binary Predicates - <a href="3-bp.html#SP27_1">&#167;27.1</a>, <a href="3-bp.html#SP27_2">&#167;27.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">fmt</span><span class="plain-syntax">, ...) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Calculus::Schemas::modify</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Calculus::Schemas::modify</span></span>:<br/>Binary Predicates - <a href="3-bp.html#SP25_1">&#167;25.1</a>, <a href="3-bp.html#SP25_2">&#167;25.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">fmt</span><span class="plain-syntax">, ...) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">va_list</span><span class="plain-syntax"> </span><span class="identifier-syntax">ap</span><span class="plain-syntax">; </span><span class="comment-syntax"> the variable argument list signified by the dots</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sch</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">prototype</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Streams::new_buffer</span><span class="plain-syntax">(</span><span class="constant-syntax">TYPICAL_I6_SCHEMA_LENGTH</span><span class="plain-syntax">, </span><span class="identifier-syntax">sch</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">prototype_storage</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sch</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">no_quoted_inames</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>

View file

@ -317,13 +317,13 @@ we apply it independently to the SP and OP:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">subject_K</span><span class="plain-syntax"> = </span><a href="3-bp.html#SP22" class="function-link"><span class="function-syntax">BinaryPredicates::term_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">verb_phrase_relation</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">subject_K</span><span class="plain-syntax"> = </span><a href="3-bp.html#SP20" class="function-link"><span class="function-syntax">BinaryPredicates::term_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">verb_phrase_relation</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::is_subkind_of_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">subject_K</span><span class="plain-syntax">)) </span><span class="identifier-syntax">subject_K</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">subject_phrase_prop</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="5-sc.html#SP2" class="function-link"><span class="function-syntax">Propositions::FromSentences::NP_subtree_to_proposition</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">subject_phrase_term</span><span class="plain-syntax">, </span><span class="identifier-syntax">subject_phrase_subtree</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">subject_K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">object_K</span><span class="plain-syntax"> = </span><a href="3-bp.html#SP22" class="function-link"><span class="function-syntax">BinaryPredicates::term_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">verb_phrase_relation</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">object_K</span><span class="plain-syntax"> = </span><a href="3-bp.html#SP20" class="function-link"><span class="function-syntax">BinaryPredicates::term_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">verb_phrase_relation</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::is_subkind_of_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">object_K</span><span class="plain-syntax">)) </span><span class="identifier-syntax">object_K</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">object_phrase_prop</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="5-sc.html#SP2" class="function-link"><span class="function-syntax">Propositions::FromSentences::NP_subtree_to_proposition</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">object_phrase_term</span><span class="plain-syntax">, </span><span class="identifier-syntax">object_phrase_subtree</span><span class="plain-syntax">,</span>
@ -515,7 +515,7 @@ is irregular because it differs from "something" and "someone".)
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">k_atom</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><a href="2-kp.html#SP3" class="function-link"><span class="function-syntax">KindPredicates::get_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">k_atom</span><span class="plain-syntax">), </span><span class="identifier-syntax">K_room</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">verb_phrase_relation</span><span class="plain-syntax"> == </span><span class="identifier-syntax">R_equality</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">room_containment_predicate</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><a href="2-kp.html#SP4" class="function-link"><span class="function-syntax">KindPredicates::set_composited</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">k_atom</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">verb_phrase_relation</span><span class="plain-syntax"> = </span><a href="3-bp.html#SP23" class="function-link"><span class="function-syntax">BinaryPredicates::get_reversal</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">room_containment_predicate</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">verb_phrase_relation</span><span class="plain-syntax"> = </span><a href="3-bp.html#SP21" class="function-link"><span class="function-syntax">BinaryPredicates::get_reversal</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">room_containment_predicate</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">PREDICATE_CALCULUS</span><span class="plain-syntax">, </span><span class="string-syntax">"[%d] Decompositing object: $D\n"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">conv_log_depth</span><span class="plain-syntax">, </span><span class="identifier-syntax">object_phrase_prop</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>

View file

@ -206,9 +206,9 @@ the view that a double negative is a positive.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">i</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">position</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pl_prev</span><span class="plain-syntax">; </span><span class="comment-syntax"> ...but up close to the predicate if it's the OP</span>
<span class="plain-syntax"> </span><span class="comment-syntax"> insert four atoms, in reverse order, at this position:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">prop</span><span class="plain-syntax"> = </span><a href="4-prp.html#SP18" class="function-link"><span class="function-syntax">Propositions::insert_atom</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prop</span><span class="plain-syntax">, </span><span class="identifier-syntax">position</span><span class="plain-syntax">, </span><a href="4-ap.html#SP4" class="function-link"><span class="function-syntax">Atoms::new</span></a><span class="plain-syntax">(</span><span class="constant-syntax">DOMAIN_CLOSE_ATOM</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-bp.html#SP22" class="function-link"><span class="function-syntax">BinaryPredicates::term_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-bp.html#SP20" class="function-link"><span class="function-syntax">BinaryPredicates::term_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">prop</span><span class="plain-syntax"> = </span><a href="4-prp.html#SP18" class="function-link"><span class="function-syntax">Propositions::insert_atom</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prop</span><span class="plain-syntax">, </span><span class="identifier-syntax">position</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="2-kp.html#SP3" class="function-link"><span class="function-syntax">KindPredicates::new_atom</span></a><span class="plain-syntax">(</span><a href="3-bp.html#SP22" class="function-link"><span class="function-syntax">BinaryPredicates::term_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">), </span><span class="identifier-syntax">new_var</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="2-kp.html#SP3" class="function-link"><span class="function-syntax">KindPredicates::new_atom</span></a><span class="plain-syntax">(</span><a href="3-bp.html#SP20" class="function-link"><span class="function-syntax">BinaryPredicates::term_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">), </span><span class="identifier-syntax">new_var</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">prop</span><span class="plain-syntax"> = </span><a href="4-prp.html#SP18" class="function-link"><span class="function-syntax">Propositions::insert_atom</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prop</span><span class="plain-syntax">, </span><span class="identifier-syntax">position</span><span class="plain-syntax">, </span><a href="4-ap.html#SP4" class="function-link"><span class="function-syntax">Atoms::new</span></a><span class="plain-syntax">(</span><span class="constant-syntax">DOMAIN_OPEN_ATOM</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">prop</span><span class="plain-syntax"> = </span><a href="4-prp.html#SP18" class="function-link"><span class="function-syntax">Propositions::insert_atom</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prop</span><span class="plain-syntax">, </span><span class="identifier-syntax">position</span><span class="plain-syntax">, </span><a href="4-ap.html#SP6" class="function-link"><span class="function-syntax">Atoms::QUANTIFIER_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">not_exists_quantifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">nv</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">));</span>
</pre>
@ -477,7 +477,7 @@ because the code testing them is written to cope properly with bogus values.
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">i</span><span class="plain-syntax">=1; </span><span class="identifier-syntax">i</span><span class="plain-syntax">&gt;=0; </span><span class="identifier-syntax">i</span><span class="plain-syntax">--) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">v</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">terms</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</span><span class="plain-syntax">].</span><span class="element-syntax">variable</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">v</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><a href="3-bp.html#SP22" class="function-link"><span class="function-syntax">BinaryPredicates::term_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><a href="3-bp.html#SP20" class="function-link"><span class="function-syntax">BinaryPredicates::term_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">pcalc_prop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_KIND</span><span class="plain-syntax"> = </span><a href="2-kp.html#SP3" class="function-link"><span class="function-syntax">KindPredicates::new_atom</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><a href="4-trm.html#SP4" class="function-link"><span class="function-syntax">Terms::new_variable</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">v</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">new_KIND</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">saved_bp</span><span class="plain-syntax"> = </span><span class="identifier-syntax">bp</span><span class="plain-syntax">;</span>
@ -834,11 +834,11 @@ would matter if they were.)
<span class="plain-syntax"> </span><span class="identifier-syntax">TRAVERSE_PROPOSITION</span><span class="plain-syntax">(</span><span class="identifier-syntax">pl</span><span class="plain-syntax">, </span><span class="identifier-syntax">prop</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> = </span><a href="4-ap.html#SP10" class="function-link"><span class="function-syntax">Atoms::is_binary_predicate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pl</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) &amp;&amp; (</span><a href="3-bp.html#SP23" class="function-link"><span class="function-syntax">BinaryPredicates::is_the_wrong_way_round</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) &amp;&amp; (</span><a href="3-bp.html#SP21" class="function-link"><span class="function-syntax">BinaryPredicates::is_the_wrong_way_round</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">pcalc_term</span><span class="plain-syntax"> </span><span class="identifier-syntax">pt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">terms</span><span class="plain-syntax">[0];</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">terms</span><span class="plain-syntax">[0] = </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">terms</span><span class="plain-syntax">[1];</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">terms</span><span class="plain-syntax">[1] = </span><span class="identifier-syntax">pt</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">predicate</span><span class="plain-syntax"> = </span><span class="identifier-syntax">STORE_POINTER_binary_predicate</span><span class="plain-syntax">(</span><a href="3-bp.html#SP23" class="function-link"><span class="function-syntax">BinaryPredicates::get_reversal</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">predicate</span><span class="plain-syntax"> = </span><span class="identifier-syntax">STORE_POINTER_binary_predicate</span><span class="plain-syntax">(</span><a href="3-bp.html#SP21" class="function-link"><span class="function-syntax">BinaryPredicates::get_reversal</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PROPOSITION_EDITED</span><span class="plain-syntax">(</span><span class="identifier-syntax">pl</span><span class="plain-syntax">, </span><span class="identifier-syntax">prop</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
@ -935,8 +935,8 @@ why it was necessary to separate the two out.
<span class="plain-syntax"> </span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> = </span><a href="4-ap.html#SP10" class="function-link"><span class="function-syntax">Atoms::is_binary_predicate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pl</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">j</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">j</span><span class="plain-syntax">&lt;2; </span><span class="identifier-syntax">j</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><a href="3-bp.html#SP22" class="function-link"><span class="function-syntax">BinaryPredicates::get_term_as_fn_of_other</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="identifier-syntax">j</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><a href="3-bp.html#SP26" class="function-link"><span class="function-syntax">BinaryPredicates::allows_function_simplification</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><a href="3-bp.html#SP20" class="function-link"><span class="function-syntax">BinaryPredicates::get_term_as_fn_of_other</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="identifier-syntax">j</span><span class="plain-syntax">)) &amp;&amp;</span>
<span class="plain-syntax"> (</span><a href="3-bp.html#SP24" class="function-link"><span class="function-syntax">BinaryPredicates::allows_function_simplification</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">terms</span><span class="plain-syntax">[1-</span><span class="identifier-syntax">j</span><span class="plain-syntax">] = </span><a href="4-trm.html#SP4" class="function-link"><span class="function-syntax">Terms::new_function</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">terms</span><span class="plain-syntax">[1-</span><span class="identifier-syntax">j</span><span class="plain-syntax">], </span><span class="constant-syntax">1</span><span class="plain-syntax">-</span><span class="identifier-syntax">j</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">pl</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">predicate</span><span class="plain-syntax"> = </span><span class="identifier-syntax">STORE_POINTER_binary_predicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">R_equality</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PROPOSITION_EDITED</span><span class="plain-syntax">(</span><span class="identifier-syntax">pl</span><span class="plain-syntax">, </span><span class="identifier-syntax">prop</span><span class="plain-syntax">);</span>
@ -1119,7 +1119,7 @@ they have no "not a valid case" value analogous to the non-object <span class="e
<span class="plain-syntax"> </span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">pcalc_term</span><span class="plain-syntax"> </span><span class="identifier-syntax">KIND_term</span><span class="plain-syntax"> = </span><span class="identifier-syntax">kind_atom</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">terms</span><span class="plain-syntax">[0];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">KIND_term</span><span class="plain-syntax">.</span><span class="element-syntax">function</span><span class="plain-syntax">) </span><span class="identifier-syntax">bp</span><span class="plain-syntax"> = </span><span class="identifier-syntax">KIND_term</span><span class="plain-syntax">.</span><span class="element-syntax">function</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">bp</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><a href="3-bp.html#SP22" class="function-link"><span class="function-syntax">BinaryPredicates::term_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">)))) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><a href="3-bp.html#SP20" class="function-link"><span class="function-syntax">BinaryPredicates::term_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">)))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">prop</span><span class="plain-syntax"> = </span><a href="4-prp.html#SP34" class="function-link"><span class="function-syntax">Propositions::ungroup_after</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prop</span><span class="plain-syntax">, </span><span class="identifier-syntax">pl_prev</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">); </span><span class="comment-syntax"> remove negation grouping</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">prop</span><span class="plain-syntax"> = </span><a href="4-prp.html#SP19" class="function-link"><span class="function-syntax">Propositions::delete_atom</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prop</span><span class="plain-syntax">, </span><span class="identifier-syntax">pl_prev</span><span class="plain-syntax">); </span><span class="comment-syntax"> remove </span><span class="extract"><span class="extract-syntax">kind=K</span></span>
<span class="plain-syntax"> </span><span class="comment-syntax"> now insert equality predicate:</span>

View file

@ -269,12 +269,12 @@ the containment relation and the wearing relation. To avoid scaring the horses,
binary predicates are called "relations" in all of the Inform documentation.
</p>
<p class="commentary">New BPs can be constructed with <a href="3-bp.html#SP13" class="internal">BinaryPredicates::make_pair</a>. The term "pair"
<p class="commentary">New BPs can be constructed with <a href="3-bp.html#SP12" class="internal">BinaryPredicates::make_pair</a>. The term "pair"
is used because every \(B\) has a "reversal" \(B^r\), such that \(B^r(s, t)\) is true
if and only if \(B(t, s)\). \(B\) and \(B^r\) are created in pairs.<sup id="fnref:7"><a href="#fn:7" rel="footnote">7</a></sup>
</p>
<ul class="footnotetexts"><li class="footnote" id="fn:7"><p class="inwebfootnote"><sup id="fnref:7"><a href="#fn:7" rel="footnote">7</a></sup> Except for equality, which is its own reversal. See <a href="3-bp.html#SP12" class="internal">BinaryPredicates::make_equality</a>.
<ul class="footnotetexts"><li class="footnote" id="fn:7"><p class="inwebfootnote"><sup id="fnref:7"><a href="#fn:7" rel="footnote">7</a></sup> Except for equality, which is its own reversal. See <a href="3-bp.html#SP11" class="internal">BinaryPredicates::make_equality</a>.
<a href="#fnref:7" title="return to text"> &#x21A9;</a></p></li></ul>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. Making propositions. </b>Propositions are built incrementally, like Lego, with a sequence of function
calls.

View file

@ -462,7 +462,7 @@ sentence. In effect, this is a read-evaluate-print loop.
<span class="plain-syntax"> </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">S</span><span class="plain-syntax"> = </span><a href="../../../inweb/docs/foundation-module/4-sm.html#SP2" class="function-link"><span class="function-syntax">Str::new</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="string-syntax">"%W"</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="../calculus-module/3-bp.html#SP13" class="function-link"><span class="function-syntax">BinaryPredicates::make_pair</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">test_bp_family</span><span class="plain-syntax">, </span><span class="identifier-syntax">t0</span><span class="plain-syntax">, </span><span class="identifier-syntax">t1</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="../calculus-module/3-bp.html#SP12" class="function-link"><span class="function-syntax">BinaryPredicates::make_pair</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">test_bp_family</span><span class="plain-syntax">, </span><span class="identifier-syntax">t0</span><span class="plain-syntax">, </span><span class="identifier-syntax">t1</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="../calculus-module/5-cs.html#SP4" class="function-link"><span class="function-syntax">Calculus::Schemas::new</span></a><span class="plain-syntax">(</span><span class="string-syntax">"%S(*1, *2)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">S</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><a href="../words-module/2-wa.html#SP3" class="function-link"><span class="function-syntax">WordAssemblages::from_wording</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">f0n</span><span class="plain-syntax">)</span>

View file

@ -1017,10 +1017,10 @@ nothing else.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">BinaryPredicates::get_i6_storage_property</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Relations::Explicit::get_i6_storage_property</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">reverse</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">BinaryPredicates::is_the_wrong_way_round</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">)) </span><span class="identifier-syntax">reverse</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">BinaryPredicates::get_form_of_relation</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) == </span><span class="identifier-syntax">Relation_VtoO</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Relations::Explicit::get_form_of_relation</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) == </span><span class="identifier-syntax">Relation_VtoO</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">reverse</span><span class="plain-syntax">) </span><span class="identifier-syntax">reverse</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">; </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">reverse</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">prn</span><span class="plain-syntax">) {</span>

View file

@ -94,7 +94,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> = </span><a href="3-is.html#SP18" class="function-link"><span class="function-syntax">InferenceSubjects::as_bp</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">infs</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">BinaryPredicates::store_dynamically</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax">; </span><span class="comment-syntax"> handled at run-time instead</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">BinaryPredicates::get_form_of_relation</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) == </span><span class="identifier-syntax">Relation_Equiv</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">right_way_round</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Relations::Explicit::get_form_of_relation</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) == </span><span class="identifier-syntax">Relation_Equiv</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">right_way_round</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RTRelations::equivalence_relation_make_singleton_partitions</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="identifier-syntax">domain_size</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inference</span><span class="plain-syntax"> *</span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">POSITIVE_KNOWLEDGE_LOOP</span><span class="plain-syntax">(</span><span class="identifier-syntax">i</span><span class="plain-syntax">, </span><span class="identifier-syntax">BinaryPredicates::as_subject</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">), </span><span class="constant-syntax">ARBITRARY_RELATION_INF</span><span class="plain-syntax">) {</span>
@ -109,13 +109,10 @@ function togglePopup(material_id) {
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">KnowledgeAboutRelations::SUBJ_check_model</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">KnowledgeAboutRelations::SUBJ_check_model</span></span>:<br/>Inference Subjects - <a href="3-is.html#SP27">&#167;27</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">infs</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> = </span><a href="3-is.html#SP18" class="function-link"><span class="function-syntax">InferenceSubjects::as_bp</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">infs</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">right_way_round</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> ((</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">form_of_relation</span><span class="plain-syntax"> == </span><span class="identifier-syntax">Relation_OtoO</span><span class="plain-syntax">) ||</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">form_of_relation</span><span class="plain-syntax"> == </span><span class="identifier-syntax">Relation_Sym_OtoO</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">f</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Relations::Explicit::get_form_of_relation</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">right_way_round</span><span class="plain-syntax">) &amp;&amp; ((</span><span class="identifier-syntax">f</span><span class="plain-syntax"> == </span><span class="identifier-syntax">Relation_OtoO</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">f</span><span class="plain-syntax"> == </span><span class="identifier-syntax">Relation_Sym_OtoO</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><a href="3-kar.html#SP2" class="function-link"><span class="function-syntax">KnowledgeAboutRelations::check_OtoO_relation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">right_way_round</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> ((</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">form_of_relation</span><span class="plain-syntax"> == </span><span class="identifier-syntax">Relation_OtoV</span><span class="plain-syntax">) ||</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">form_of_relation</span><span class="plain-syntax"> == </span><span class="identifier-syntax">Relation_VtoO</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">right_way_round</span><span class="plain-syntax">) &amp;&amp; ((</span><span class="identifier-syntax">f</span><span class="plain-syntax"> == </span><span class="identifier-syntax">Relation_OtoV</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">f</span><span class="plain-syntax"> == </span><span class="identifier-syntax">Relation_VtoO</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><a href="3-kar.html#SP2" class="function-link"><span class="function-syntax">KnowledgeAboutRelations::check_OtoV_relation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
@ -149,8 +146,8 @@ function togglePopup(material_id) {
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Routines::end</span><span class="plain-syntax">(</span><span class="identifier-syntax">save</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">form_of_relation</span><span class="plain-syntax"> == </span><span class="identifier-syntax">Relation_VtoV</span><span class="plain-syntax">) ||</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">form_of_relation</span><span class="plain-syntax"> == </span><span class="identifier-syntax">Relation_Sym_VtoV</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">f</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Relations::Explicit::get_form_of_relation</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">f</span><span class="plain-syntax"> == </span><span class="identifier-syntax">Relation_VtoV</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">f</span><span class="plain-syntax"> == </span><span class="identifier-syntax">Relation_Sym_VtoV</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RTRelations::compile_vtov_storage</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
@ -174,7 +171,7 @@ checking in.
<span class="plain-syntax"> </span><span class="reserved-syntax">inference</span><span class="plain-syntax"> **</span><span class="identifier-syntax">right_second</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">inference</span><span class="plain-syntax"> **)</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">Memory::calloc</span><span class="plain-syntax">(</span><span class="identifier-syntax">nc</span><span class="plain-syntax">, </span><span class="reserved-syntax">sizeof</span><span class="plain-syntax">(</span><span class="reserved-syntax">inference</span><span class="plain-syntax"> *), </span><span class="constant-syntax">OBJECT_COMPILATION_MREASON</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">BinaryPredicates::get_i6_storage_property</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Relations::Explicit::get_i6_storage_property</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">infs</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">infs</span><span class="plain-syntax">, </span><span class="reserved-syntax">inference_subject</span><span class="plain-syntax">) </span><span class="identifier-syntax">right_counts</span><span class="plain-syntax">[</span><span class="identifier-syntax">infs</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">] = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
@ -259,7 +256,7 @@ checking in.
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">form_of_relation</span><span class="plain-syntax"> == </span><span class="identifier-syntax">Relation_VtoO</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Relations::Explicit::get_form_of_relation</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) == </span><span class="identifier-syntax">Relation_VtoO</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">infs</span><span class="plain-syntax">, </span><span class="reserved-syntax">inference_subject</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">left_counts</span><span class="plain-syntax">[</span><span class="identifier-syntax">infs</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">] &gt;= </span><span class="constant-syntax">2</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::infs_contradiction_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_RelationVtoOContradiction</span><span class="plain-syntax">),</span>

View file

@ -84,7 +84,7 @@ function togglePopup(material_id) {
<span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I7_generation_tree</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="function-syntax">Emit::tree</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Emit::tree</span></span>:<br/><a href="2-emt.html#SP3">&#167;3</a>, <a href="2-emt.html#SP4">&#167;4</a><br/>Hierarchy - <a href="2-hrr.html#SP4">&#167;4</a><br/>Compilation Units - <a href="2-cu.html#SP2">&#167;2</a><br/>Adjectives by Condition - <a href="3-abc.html#SP1">&#167;1</a><br/>Fundamental Constants - <a href="4-fc.html#SP1">&#167;1</a>, <a href="4-fc.html#SP2">&#167;2</a><br/>List Together - <a href="4-lt.html#SP3_1">&#167;3.1</a><br/>Compiled Text - <a href="4-ct.html#SP7">&#167;7</a><br/>Routines - <a href="4-rtn.html#SP3">&#167;3</a>, <a href="4-rtn.html#SP4">&#167;4</a>, <a href="4-rtn.html#SP4_1">&#167;4.1</a>, <a href="4-rtn.html#SP4_1_2">&#167;4.1.2</a>, <a href="4-rtn.html#SP4_1_3">&#167;4.1.3</a>, <a href="4-rtn.html#SP4_1_4">&#167;4.1.4</a>, <a href="4-rtn.html#SP4_1_5">&#167;4.1.5</a><br/>Test Scripts - <a href="4-ts.html#SP3">&#167;3</a><br/>Internal Test Cases - <a href="4-itc.html#SP4">&#167;4</a>, <a href="4-itc.html#SP5">&#167;5</a><br/>Use Options at Run Time - <a href="4-uoart.html#SP1_1">&#167;1.1</a>, <a href="4-uoart.html#SP1_2">&#167;1.2</a>, <a href="4-uoart.html#SP2">&#167;2</a><br/>Runtime Support for Kinds - <a href="4-rsfk.html#SP5">&#167;5</a>, <a href="4-rsfk.html#SP6">&#167;6</a>, <a href="4-rsfk.html#SP9">&#167;9</a>, <a href="4-rsfk.html#SP11">&#167;11</a>, <a href="4-rsfk.html#SP14">&#167;14</a>, <a href="4-rsfk.html#SP18_3">&#167;18.3</a>, <a href="4-rsfk.html#SP21">&#167;21</a>, <a href="4-rsfk.html#SP26">&#167;26</a>, <a href="4-rsfk.html#SP26_1">&#167;26.1</a>, <a href="4-rsfk.html#SP26_2">&#167;26.2</a>, <a href="4-rsfk.html#SP26_3">&#167;26.3</a>, <a href="4-rsfk.html#SP26_4_1">&#167;26.4.1</a>, <a href="4-rsfk.html#SP26_4_2">&#167;26.4.2</a>, <a href="4-rsfk.html#SP26_5">&#167;26.5</a>, <a href="4-rsfk.html#SP26_5_1">&#167;26.5.1</a>, <a href="4-rsfk.html#SP26_6_1">&#167;26.6.1</a>, <a href="4-rsfk.html#SP26_6_2">&#167;26.6.2</a>, <a href="4-rsfk.html#SP26_6_3">&#167;26.6.3</a>, <a href="4-rsfk.html#SP26_6_4">&#167;26.6.4</a>, <a href="4-rsfk.html#SP26_6_5">&#167;26.6.5</a>, <a href="4-rsfk.html#SP26_6_6">&#167;26.6.6</a>, <a href="4-rsfk.html#SP27">&#167;27</a><br/>Extension Files at Run Time - <a href="4-efart.html#SP1">&#167;1</a><br/>Verbs at Run Time - <a href="4-vart.html#SP3">&#167;3</a>, <a href="4-vart.html#SP4">&#167;4</a>, <a href="4-vart.html#SP4_1">&#167;4.1</a>, <a href="4-vart.html#SP4_2">&#167;4.2</a>, <a href="4-vart.html#SP4_1_2">&#167;4.1.2</a>, <a href="4-vart.html#SP4_1_2_1">&#167;4.1.2.1</a>, <a href="4-vart.html#SP4_1_2_2">&#167;4.1.2.2</a>, <a href="4-vart.html#SP5">&#167;5</a><br/>Relations at Run Time - <a href="4-rart.html#SP2">&#167;2</a>, <a href="4-rart.html#SP3">&#167;3</a>, <a href="4-rart.html#SP3_2">&#167;3.2</a>, <a href="4-rart.html#SP3_2_1">&#167;3.2.1</a>, <a href="4-rart.html#SP3_2_2">&#167;3.2.2</a>, <a href="4-rart.html#SP3_2_3">&#167;3.2.3</a>, <a href="4-rart.html#SP3_2_4">&#167;3.2.4</a>, <a href="4-rart.html#SP3_2_5">&#167;3.2.5</a>, <a href="4-rart.html#SP3_2_5_1">&#167;3.2.5.1</a>, <a href="4-rart.html#SP3_2_6">&#167;3.2.6</a>, <a href="4-rart.html#SP3_2_7">&#167;3.2.7</a>, <a href="4-rart.html#SP3_2_8">&#167;3.2.8</a>, <a href="4-rart.html#SP3_2_9">&#167;3.2.9</a>, <a href="4-rart.html#SP3_2_10">&#167;3.2.10</a>, <a href="4-rart.html#SP3_2_11">&#167;3.2.11</a>, <a href="4-rart.html#SP3_2_12">&#167;3.2.12</a>, <a href="4-rart.html#SP3_2_9_1">&#167;3.2.9.1</a>, <a href="4-rart.html#SP3_2_10_1">&#167;3.2.10.1</a>, <a href="4-rart.html#SP3_2_12_1">&#167;3.2.12.1</a>, <a href="4-rart.html#SP5">&#167;5</a>, <a href="4-rart.html#SP17">&#167;17</a>, <a href="4-rart.html#SP17_1">&#167;17.1</a>, <a href="4-rart.html#SP17_2">&#167;17.2</a>, <a href="4-rart.html#SP17_3">&#167;17.3</a>, <a href="4-rart.html#SP17_4">&#167;17.4</a>, <a href="4-rart.html#SP17_5">&#167;17.5</a>, <a href="4-rart.html#SP17_6">&#167;17.6</a>, <a href="4-rart.html#SP18">&#167;18</a>, <a href="4-rart.html#SP19">&#167;19</a><br/>Runtime Support for Tables - <a href="4-rsft.html#SP1_2">&#167;1.2</a>, <a href="4-rsft.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="function-syntax">Emit::tree</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Emit::tree</span></span>:<br/><a href="2-emt.html#SP3">&#167;3</a>, <a href="2-emt.html#SP4">&#167;4</a><br/>Hierarchy - <a href="2-hrr.html#SP4">&#167;4</a><br/>Compilation Units - <a href="2-cu.html#SP2">&#167;2</a><br/>Adjectives by Condition - <a href="3-abc.html#SP1">&#167;1</a><br/>Fundamental Constants - <a href="4-fc.html#SP1">&#167;1</a>, <a href="4-fc.html#SP2">&#167;2</a><br/>List Together - <a href="4-lt.html#SP3_1">&#167;3.1</a><br/>Compiled Text - <a href="4-ct.html#SP7">&#167;7</a><br/>Routines - <a href="4-rtn.html#SP3">&#167;3</a>, <a href="4-rtn.html#SP4">&#167;4</a>, <a href="4-rtn.html#SP4_1">&#167;4.1</a>, <a href="4-rtn.html#SP4_1_2">&#167;4.1.2</a>, <a href="4-rtn.html#SP4_1_3">&#167;4.1.3</a>, <a href="4-rtn.html#SP4_1_4">&#167;4.1.4</a>, <a href="4-rtn.html#SP4_1_5">&#167;4.1.5</a><br/>Test Scripts - <a href="4-ts.html#SP3">&#167;3</a><br/>Internal Test Cases - <a href="4-itc.html#SP4">&#167;4</a>, <a href="4-itc.html#SP5">&#167;5</a><br/>Use Options at Run Time - <a href="4-uoart.html#SP1_1">&#167;1.1</a>, <a href="4-uoart.html#SP1_2">&#167;1.2</a>, <a href="4-uoart.html#SP2">&#167;2</a><br/>Runtime Support for Kinds - <a href="4-rsfk.html#SP5">&#167;5</a>, <a href="4-rsfk.html#SP6">&#167;6</a>, <a href="4-rsfk.html#SP9">&#167;9</a>, <a href="4-rsfk.html#SP11">&#167;11</a>, <a href="4-rsfk.html#SP14">&#167;14</a>, <a href="4-rsfk.html#SP18_3">&#167;18.3</a>, <a href="4-rsfk.html#SP21">&#167;21</a>, <a href="4-rsfk.html#SP26">&#167;26</a>, <a href="4-rsfk.html#SP26_1">&#167;26.1</a>, <a href="4-rsfk.html#SP26_2">&#167;26.2</a>, <a href="4-rsfk.html#SP26_3">&#167;26.3</a>, <a href="4-rsfk.html#SP26_4_1">&#167;26.4.1</a>, <a href="4-rsfk.html#SP26_4_2">&#167;26.4.2</a>, <a href="4-rsfk.html#SP26_5">&#167;26.5</a>, <a href="4-rsfk.html#SP26_5_1">&#167;26.5.1</a>, <a href="4-rsfk.html#SP26_6_1">&#167;26.6.1</a>, <a href="4-rsfk.html#SP26_6_2">&#167;26.6.2</a>, <a href="4-rsfk.html#SP26_6_3">&#167;26.6.3</a>, <a href="4-rsfk.html#SP26_6_4">&#167;26.6.4</a>, <a href="4-rsfk.html#SP26_6_5">&#167;26.6.5</a>, <a href="4-rsfk.html#SP26_6_6">&#167;26.6.6</a>, <a href="4-rsfk.html#SP27">&#167;27</a><br/>Extension Files at Run Time - <a href="4-efart.html#SP1">&#167;1</a><br/>Verbs at Run Time - <a href="4-vart.html#SP3">&#167;3</a>, <a href="4-vart.html#SP4">&#167;4</a>, <a href="4-vart.html#SP4_1">&#167;4.1</a>, <a href="4-vart.html#SP4_2">&#167;4.2</a>, <a href="4-vart.html#SP4_1_2">&#167;4.1.2</a>, <a href="4-vart.html#SP4_1_2_1">&#167;4.1.2.1</a>, <a href="4-vart.html#SP4_1_2_2">&#167;4.1.2.2</a>, <a href="4-vart.html#SP5">&#167;5</a><br/>Relations at Run Time - <a href="4-rart.html#SP3">&#167;3</a>, <a href="4-rart.html#SP4">&#167;4</a>, <a href="4-rart.html#SP4_2">&#167;4.2</a>, <a href="4-rart.html#SP4_2_1">&#167;4.2.1</a>, <a href="4-rart.html#SP4_2_2">&#167;4.2.2</a>, <a href="4-rart.html#SP4_2_3">&#167;4.2.3</a>, <a href="4-rart.html#SP4_2_4">&#167;4.2.4</a>, <a href="4-rart.html#SP4_2_5">&#167;4.2.5</a>, <a href="4-rart.html#SP4_2_5_1">&#167;4.2.5.1</a>, <a href="4-rart.html#SP4_2_6">&#167;4.2.6</a>, <a href="4-rart.html#SP4_2_7">&#167;4.2.7</a>, <a href="4-rart.html#SP4_2_8">&#167;4.2.8</a>, <a href="4-rart.html#SP4_2_9">&#167;4.2.9</a>, <a href="4-rart.html#SP4_2_10">&#167;4.2.10</a>, <a href="4-rart.html#SP4_2_11">&#167;4.2.11</a>, <a href="4-rart.html#SP4_2_12">&#167;4.2.12</a>, <a href="4-rart.html#SP4_2_9_1">&#167;4.2.9.1</a>, <a href="4-rart.html#SP4_2_10_1">&#167;4.2.10.1</a>, <a href="4-rart.html#SP4_2_12_1">&#167;4.2.12.1</a>, <a href="4-rart.html#SP6">&#167;6</a>, <a href="4-rart.html#SP18">&#167;18</a>, <a href="4-rart.html#SP18_1">&#167;18.1</a>, <a href="4-rart.html#SP18_2">&#167;18.2</a>, <a href="4-rart.html#SP18_3">&#167;18.3</a>, <a href="4-rart.html#SP18_4">&#167;18.4</a>, <a href="4-rart.html#SP18_5">&#167;18.5</a>, <a href="4-rart.html#SP18_6">&#167;18.6</a>, <a href="4-rart.html#SP19">&#167;19</a>, <a href="4-rart.html#SP20">&#167;20</a><br/>Runtime Support for Tables - <a href="4-rsft.html#SP1_2">&#167;1.2</a>, <a href="4-rsft.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">I7_generation_tree</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -349,7 +349,7 @@ insert them into the Inter stream close to the top.
<span class="plain-syntax"> </span><span class="identifier-syntax">Packaging::exit</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">save</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">Emit::named_numeric_constant</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">Emit::named_numeric_constant</span></span>:<br/>Fundamental Constants - <a href="4-fc.html#SP1">&#167;1</a><br/>Use Options at Run Time - <a href="4-uoart.html#SP1">&#167;1</a>, <a href="4-uoart.html#SP2">&#167;2</a><br/>Runtime Support for Kinds - <a href="4-rsfk.html#SP26">&#167;26</a><br/>Relations at Run Time - <a href="4-rart.html#SP8_3">&#167;8.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">Emit::named_numeric_constant</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">Emit::named_numeric_constant</span></span>:<br/>Fundamental Constants - <a href="4-fc.html#SP1">&#167;1</a><br/>Use Options at Run Time - <a href="4-uoart.html#SP1">&#167;1</a>, <a href="4-uoart.html#SP2">&#167;2</a><br/>Runtime Support for Kinds - <a href="4-rsfk.html#SP26">&#167;26</a><br/>Relations at Run Time - <a href="4-rart.html#SP9_3">&#167;9.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Packaging::enter_home_of</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">con_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Produce::define_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::guard</span><span class="plain-syntax">(</span><span class="identifier-syntax">Inter::Constant::new_numerical</span><span class="plain-syntax">(</span><span class="identifier-syntax">Packaging::at</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">()), </span><span class="identifier-syntax">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">Packaging::at</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">()), </span><span class="identifier-syntax">con_name</span><span class="plain-syntax">), </span><span class="identifier-syntax">Inter::SymbolsTables::id_from_IRS_and_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">Packaging::at</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">()), </span><span class="identifier-syntax">int_interk</span><span class="plain-syntax">), </span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="identifier-syntax">Produce::baseline</span><span class="plain-syntax">(</span><span class="identifier-syntax">Packaging::at</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">())), </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">));</span>
@ -393,7 +393,7 @@ insert them into the Inter stream close to the top.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="function-syntax">Emit::named_byte_array_begin</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Emit::named_byte_array_begin</span></span>:<br/>Test Scripts - <a href="4-ts.html#SP3">&#167;3</a><br/>Relations at Run Time - <a href="4-rart.html#SP8_3">&#167;8.3</a><br/>Runtime Support for Tables - <a href="4-rsft.html#SP1_2">&#167;1.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="function-syntax">Emit::named_byte_array_begin</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Emit::named_byte_array_begin</span></span>:<br/>Test Scripts - <a href="4-ts.html#SP3">&#167;3</a><br/>Relations at Run Time - <a href="4-rart.html#SP9_3">&#167;9.3</a><br/>Runtime Support for Tables - <a href="4-rsft.html#SP1_2">&#167;1.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax"> = </span><a href="2-emt.html#SP3" class="function-link"><span class="function-syntax">Emit::named_array_begin</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::annotate_iname_i</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">BYTEARRAY_IANN</span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax">;</span>
@ -496,13 +496,13 @@ insert them into the Inter stream close to the top.
<span class="plain-syntax"> </span><span class="identifier-syntax">current_A</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">no_entries</span><span class="plain-syntax">++;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="function-syntax">Emit::sum_constant_begin</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">Emit::sum_constant_begin</span></span>:<br/>Relations at Run Time - <a href="4-rart.html#SP3_1_2">&#167;3.1.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="function-syntax">Emit::sum_constant_begin</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">Emit::sum_constant_begin</span></span>:<br/>Relations at Run Time - <a href="4-rart.html#SP4_1_2">&#167;4.1.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax"> = </span><a href="2-emt.html#SP3" class="function-link"><span class="function-syntax">Emit::named_array_begin</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_A</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">array_form</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CONSTANT_SUM_LIST</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="function-syntax">Emit::named_array_begin</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">Emit::named_array_begin</span></span>:<br/>List Together - <a href="4-lt.html#SP3_1">&#167;3.1</a><br/>Jump Labels - <a href="4-jl.html#SP5">&#167;5</a><br/>Test Scripts - <a href="4-ts.html#SP3">&#167;3</a><br/>Runtime Support for Kinds - <a href="4-rsfk.html#SP18_1">&#167;18.1</a><br/>Verbs at Run Time - <a href="4-vart.html#SP4">&#167;4</a><br/>Relations at Run Time - <a href="4-rart.html#SP3_1">&#167;3.1</a>, <a href="4-rart.html#SP4">&#167;4</a>, <a href="4-rart.html#SP8">&#167;8</a>, <a href="4-rart.html#SP8_3">&#167;8.3</a><br/>Runtime Support for Tables - <a href="4-rsft.html#SP1_3">&#167;1.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="function-syntax">Emit::named_array_begin</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">Emit::named_array_begin</span></span>:<br/>List Together - <a href="4-lt.html#SP3_1">&#167;3.1</a><br/>Jump Labels - <a href="4-jl.html#SP5">&#167;5</a><br/>Test Scripts - <a href="4-ts.html#SP3">&#167;3</a><br/>Runtime Support for Kinds - <a href="4-rsfk.html#SP18_1">&#167;18.1</a><br/>Verbs at Run Time - <a href="4-vart.html#SP4">&#167;4</a><br/>Relations at Run Time - <a href="4-rart.html#SP4_1">&#167;4.1</a>, <a href="4-rart.html#SP5">&#167;5</a>, <a href="4-rart.html#SP9">&#167;9</a>, <a href="4-rart.html#SP9_3">&#167;9.3</a><br/>Runtime Support for Tables - <a href="4-rsft.html#SP1_3">&#167;1.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Packaging::enter_home_of</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">symb</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Produce::define_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-emt.html#SP3" class="function-link"><span class="function-syntax">Emit::push_array</span></a><span class="plain-syntax">();</span>
@ -512,7 +512,7 @@ insert them into the Inter stream close to the top.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Emit::array_iname_entry</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">Emit::array_iname_entry</span></span>:<br/>List Together - <a href="4-lt.html#SP3_1">&#167;3.1</a><br/>Test Scripts - <a href="4-ts.html#SP3">&#167;3</a><br/>Runtime Support for Kinds - <a href="4-rsfk.html#SP5">&#167;5</a>, <a href="4-rsfk.html#SP11">&#167;11</a>, <a href="4-rsfk.html#SP14">&#167;14</a><br/>Verbs at Run Time - <a href="4-vart.html#SP4">&#167;4</a><br/>Relations at Run Time - <a href="4-rart.html#SP3_1_2">&#167;3.1.2</a>, <a href="4-rart.html#SP3_1_2_1">&#167;3.1.2.1</a>, <a href="4-rart.html#SP3_1_3">&#167;3.1.3</a>, <a href="4-rart.html#SP3_1_6">&#167;3.1.6</a>, <a href="4-rart.html#SP4">&#167;4</a>, <a href="4-rart.html#SP8_2">&#167;8.2</a><br/>Runtime Support for Tables - <a href="4-rsft.html#SP1_1_1_1">&#167;1.1.1.1</a>, <a href="4-rsft.html#SP1_1_1_1_1_5">&#167;1.1.1.1.1.5</a>, <a href="4-rsft.html#SP1_3">&#167;1.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">iname</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Emit::array_iname_entry</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">Emit::array_iname_entry</span></span>:<br/>List Together - <a href="4-lt.html#SP3_1">&#167;3.1</a><br/>Test Scripts - <a href="4-ts.html#SP3">&#167;3</a><br/>Runtime Support for Kinds - <a href="4-rsfk.html#SP5">&#167;5</a>, <a href="4-rsfk.html#SP11">&#167;11</a>, <a href="4-rsfk.html#SP14">&#167;14</a><br/>Verbs at Run Time - <a href="4-vart.html#SP4">&#167;4</a><br/>Relations at Run Time - <a href="4-rart.html#SP4_1_2">&#167;4.1.2</a>, <a href="4-rart.html#SP4_1_2_1">&#167;4.1.2.1</a>, <a href="4-rart.html#SP4_1_3">&#167;4.1.3</a>, <a href="4-rart.html#SP4_1_6">&#167;4.1.6</a>, <a href="4-rart.html#SP5">&#167;5</a>, <a href="4-rart.html#SP9_2">&#167;9.2</a><br/>Runtime Support for Tables - <a href="4-rsft.html#SP1_1_1_1">&#167;1.1.1.1</a>, <a href="4-rsft.html#SP1_1_1_1_1_5">&#167;1.1.1.1.1.5</a>, <a href="4-rsft.html#SP1_3">&#167;1.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">iname</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_A</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"entry outside of inter array"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">alias</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">iname</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">alias</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Site::veneer_symbol</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">NOTHING_VSYMB</span><span class="plain-syntax">);</span>
@ -523,7 +523,7 @@ insert them into the Inter stream close to the top.
<span class="plain-syntax"> </span><a href="2-emt.html#SP3" class="function-link"><span class="function-syntax">Emit::add_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">val1</span><span class="plain-syntax">, </span><span class="identifier-syntax">val2</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Emit::array_null_entry</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">Emit::array_null_entry</span></span>:<br/>Relations at Run Time - <a href="4-rart.html#SP3_1">&#167;3.1</a>, <a href="4-rart.html#SP4">&#167;4</a><br/>Runtime Support for Tables - <a href="4-rsft.html#SP1_1_1_1_1_3">&#167;1.1.1.1.1.3</a>, <a href="4-rsft.html#SP1_2">&#167;1.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Emit::array_null_entry</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">Emit::array_null_entry</span></span>:<br/>Relations at Run Time - <a href="4-rart.html#SP4_1">&#167;4.1</a>, <a href="4-rart.html#SP5">&#167;5</a><br/>Runtime Support for Tables - <a href="4-rsft.html#SP1_1_1_1_1_3">&#167;1.1.1.1.1.3</a>, <a href="4-rsft.html#SP1_2">&#167;1.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-emt.html#SP3" class="function-link"><span class="function-syntax">Emit::array_iname_entry</span></a><span class="plain-syntax">(</span><a href="2-hrr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::find</span></a><span class="plain-syntax">(</span><span class="constant-syntax">NULL_HL</span><span class="plain-syntax">));</span>
<span class="plain-syntax">}</span>
@ -547,7 +547,7 @@ insert them into the Inter stream close to the top.
<span class="plain-syntax">}</span>
<span class="plain-syntax">#</span><span class="identifier-syntax">endif</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Emit::array_text_entry</span><button class="popup" onclick="togglePopup('usagePopup18')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup18">Usage of <span class="code-font"><span class="function-syntax">Emit::array_text_entry</span></span>:<br/>Test Scripts - <a href="4-ts.html#SP3">&#167;3</a><br/>Relations at Run Time - <a href="4-rart.html#SP3_1_1">&#167;3.1.1</a>, <a href="4-rart.html#SP3_1_5">&#167;3.1.5</a>, <a href="4-rart.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">content</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Emit::array_text_entry</span><button class="popup" onclick="togglePopup('usagePopup18')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup18">Usage of <span class="code-font"><span class="function-syntax">Emit::array_text_entry</span></span>:<br/>Test Scripts - <a href="4-ts.html#SP3">&#167;3</a><br/>Relations at Run Time - <a href="4-rart.html#SP4_1_1">&#167;4.1.1</a>, <a href="4-rart.html#SP4_1_5">&#167;4.1.5</a>, <a href="4-rart.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">content</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_A</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"entry outside of inter array"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">v1</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">v2</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::text_value</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), &amp;</span><span class="identifier-syntax">v1</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">v2</span><span class="plain-syntax">, </span><span class="identifier-syntax">content</span><span class="plain-syntax">);</span>
@ -568,7 +568,7 @@ insert them into the Inter stream close to the top.
<span class="plain-syntax"> </span><a href="2-emt.html#SP3" class="function-link"><span class="function-syntax">Emit::add_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">v1</span><span class="plain-syntax">, </span><span class="identifier-syntax">v2</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Emit::array_numeric_entry</span><button class="popup" onclick="togglePopup('usagePopup19')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup19">Usage of <span class="code-font"><span class="function-syntax">Emit::array_numeric_entry</span></span>:<br/>Jump Labels - <a href="4-jl.html#SP5">&#167;5</a><br/>Test Scripts - <a href="4-ts.html#SP3">&#167;3</a><br/>Runtime Support for Kinds - <a href="4-rsfk.html#SP5">&#167;5</a>, <a href="4-rsfk.html#SP11">&#167;11</a>, <a href="4-rsfk.html#SP18_1_1_1">&#167;18.1.1.1</a>, <a href="4-rsfk.html#SP18_1_1_2">&#167;18.1.1.2</a>, <a href="4-rsfk.html#SP22">&#167;22</a><br/>Verbs at Run Time - <a href="4-vart.html#SP4">&#167;4</a><br/>Relations at Run Time - <a href="4-rart.html#SP3_1">&#167;3.1</a>, <a href="4-rart.html#SP3_1_3">&#167;3.1.3</a>, <a href="4-rart.html#SP4">&#167;4</a>, <a href="4-rart.html#SP7">&#167;7</a>, <a href="4-rart.html#SP8_2">&#167;8.2</a>, <a href="4-rart.html#SP8_3">&#167;8.3</a><br/>Runtime Support for Tables - <a href="4-rsft.html#SP1_1_1_1_1_3">&#167;1.1.1.1.1.3</a>, <a href="4-rsft.html#SP1_1_1_1_1_4">&#167;1.1.1.1.1.4</a>, <a href="4-rsft.html#SP1_2_3">&#167;1.2.3</a>, <a href="4-rsft.html#SP1_3">&#167;1.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Emit::array_numeric_entry</span><button class="popup" onclick="togglePopup('usagePopup19')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup19">Usage of <span class="code-font"><span class="function-syntax">Emit::array_numeric_entry</span></span>:<br/>Jump Labels - <a href="4-jl.html#SP5">&#167;5</a><br/>Test Scripts - <a href="4-ts.html#SP3">&#167;3</a><br/>Runtime Support for Kinds - <a href="4-rsfk.html#SP5">&#167;5</a>, <a href="4-rsfk.html#SP11">&#167;11</a>, <a href="4-rsfk.html#SP18_1_1_1">&#167;18.1.1.1</a>, <a href="4-rsfk.html#SP18_1_1_2">&#167;18.1.1.2</a>, <a href="4-rsfk.html#SP22">&#167;22</a><br/>Verbs at Run Time - <a href="4-vart.html#SP4">&#167;4</a><br/>Relations at Run Time - <a href="4-rart.html#SP4_1">&#167;4.1</a>, <a href="4-rart.html#SP4_1_3">&#167;4.1.3</a>, <a href="4-rart.html#SP5">&#167;5</a>, <a href="4-rart.html#SP8">&#167;8</a>, <a href="4-rart.html#SP9_2">&#167;9.2</a>, <a href="4-rart.html#SP9_3">&#167;9.3</a><br/>Runtime Support for Tables - <a href="4-rsft.html#SP1_1_1_1_1_3">&#167;1.1.1.1.1.3</a>, <a href="4-rsft.html#SP1_1_1_1_1_4">&#167;1.1.1.1.1.4</a>, <a href="4-rsft.html#SP1_2_3">&#167;1.2.3</a>, <a href="4-rsft.html#SP1_3">&#167;1.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_A</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"entry outside of inter array"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-emt.html#SP3" class="function-link"><span class="function-syntax">Emit::add_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">LITERAL_IVAL</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
@ -586,7 +586,7 @@ insert them into the Inter stream close to the top.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">IBM</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Emit::array_end</span><button class="popup" onclick="togglePopup('usagePopup20')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup20">Usage of <span class="code-font"><span class="function-syntax">Emit::array_end</span></span>:<br/>List Together - <a href="4-lt.html#SP3_1">&#167;3.1</a><br/>Jump Labels - <a href="4-jl.html#SP5">&#167;5</a><br/>Test Scripts - <a href="4-ts.html#SP3">&#167;3</a><br/>Runtime Support for Kinds - <a href="4-rsfk.html#SP5">&#167;5</a>, <a href="4-rsfk.html#SP18_1">&#167;18.1</a><br/>Verbs at Run Time - <a href="4-vart.html#SP4">&#167;4</a><br/>Relations at Run Time - <a href="4-rart.html#SP3_1">&#167;3.1</a>, <a href="4-rart.html#SP3_1_2">&#167;3.1.2</a>, <a href="4-rart.html#SP4">&#167;4</a>, <a href="4-rart.html#SP8">&#167;8</a>, <a href="4-rart.html#SP8_3">&#167;8.3</a><br/>Runtime Support for Tables - <a href="4-rsft.html#SP1_1_1_1">&#167;1.1.1.1</a>, <a href="4-rsft.html#SP1_1_1_1_1">&#167;1.1.1.1.1</a>, <a href="4-rsft.html#SP1_2">&#167;1.2</a>, <a href="4-rsft.html#SP1_3">&#167;1.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Emit::array_end</span><button class="popup" onclick="togglePopup('usagePopup20')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup20">Usage of <span class="code-font"><span class="function-syntax">Emit::array_end</span></span>:<br/>List Together - <a href="4-lt.html#SP3_1">&#167;3.1</a><br/>Jump Labels - <a href="4-jl.html#SP5">&#167;5</a><br/>Test Scripts - <a href="4-ts.html#SP3">&#167;3</a><br/>Runtime Support for Kinds - <a href="4-rsfk.html#SP5">&#167;5</a>, <a href="4-rsfk.html#SP18_1">&#167;18.1</a><br/>Verbs at Run Time - <a href="4-vart.html#SP4">&#167;4</a><br/>Relations at Run Time - <a href="4-rart.html#SP4_1">&#167;4.1</a>, <a href="4-rart.html#SP4_1_2">&#167;4.1.2</a>, <a href="4-rart.html#SP5">&#167;5</a>, <a href="4-rart.html#SP9">&#167;9</a>, <a href="4-rart.html#SP9_3">&#167;9.3</a><br/>Runtime Support for Tables - <a href="4-rsft.html#SP1_1_1_1">&#167;1.1.1.1</a>, <a href="4-rsft.html#SP1_1_1_1_1">&#167;1.1.1.1.1</a>, <a href="4-rsft.html#SP1_2">&#167;1.2</a>, <a href="4-rsft.html#SP1_3">&#167;1.3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">current_A</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"inter array not opened"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">con_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">current_A</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">array_name_symbol</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_bookmark</span><span class="plain-syntax"> *</span><span class="identifier-syntax">IBM</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Packaging::at</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
@ -633,7 +633,7 @@ insert them into the Inter stream close to the top.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">name</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">Emit::named_numeric_constant_hex</span><button class="popup" onclick="togglePopup('usagePopup21')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup21">Usage of <span class="code-font"><span class="function-syntax">Emit::named_numeric_constant_hex</span></span>:<br/>Fundamental Constants - <a href="4-fc.html#SP1">&#167;1</a><br/>Relations at Run Time - <a href="4-rart.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">Emit::named_numeric_constant_hex</span><button class="popup" onclick="togglePopup('usagePopup21')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup21">Usage of <span class="code-font"><span class="function-syntax">Emit::named_numeric_constant_hex</span></span>:<br/>Fundamental Constants - <a href="4-fc.html#SP1">&#167;1</a><br/>Relations at Run Time - <a href="4-rart.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Packaging::enter_home_of</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">con_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Produce::define_symbol</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::annotate_symbol_i</span><span class="plain-syntax">(</span><span class="identifier-syntax">con_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">HEX_IANN</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>

View file

@ -1722,11 +1722,11 @@ function togglePopup(material_id) {
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">Hierarchy::find</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Hierarchy::find</span></span>:<br/>Emitting Inter - <a href="2-emt.html#SP2">&#167;2</a>, <a href="2-emt.html#SP3">&#167;3</a><br/>Fundamental Constants - <a href="4-fc.html#SP1">&#167;1</a>, <a href="4-fc.html#SP2">&#167;2</a><br/>List Together - <a href="4-lt.html#SP3_1">&#167;3.1</a><br/>Routines - <a href="4-rtn.html#SP4_1_2">&#167;4.1.2</a>, <a href="4-rtn.html#SP4_1_3">&#167;4.1.3</a>, <a href="4-rtn.html#SP4_1_4">&#167;4.1.4</a><br/>Test Scripts - <a href="4-ts.html#SP3">&#167;3</a><br/>Internal Test Cases - <a href="4-itc.html#SP4">&#167;4</a>, <a href="4-itc.html#SP5">&#167;5</a><br/>Use Options at Run Time - <a href="4-uoart.html#SP1">&#167;1</a>, <a href="4-uoart.html#SP1_1">&#167;1.1</a>, <a href="4-uoart.html#SP2">&#167;2</a><br/>Runtime Support for Kinds - <a href="4-rsfk.html#SP5">&#167;5</a>, <a href="4-rsfk.html#SP6">&#167;6</a>, <a href="4-rsfk.html#SP18_3">&#167;18.3</a>, <a href="4-rsfk.html#SP20_1">&#167;20.1</a>, <a href="4-rsfk.html#SP21">&#167;21</a>, <a href="4-rsfk.html#SP26">&#167;26</a>, <a href="4-rsfk.html#SP26_5">&#167;26.5</a>, <a href="4-rsfk.html#SP26_5_1">&#167;26.5.1</a>, <a href="4-rsfk.html#SP26_6_1">&#167;26.6.1</a>, <a href="4-rsfk.html#SP26_6_2">&#167;26.6.2</a>, <a href="4-rsfk.html#SP26_6_3">&#167;26.6.3</a>, <a href="4-rsfk.html#SP26_6_4">&#167;26.6.4</a>, <a href="4-rsfk.html#SP26_6_5">&#167;26.6.5</a>, <a href="4-rsfk.html#SP26_6_6">&#167;26.6.6</a>, <a href="4-rsfk.html#SP27">&#167;27</a><br/>Extension Files at Run Time - <a href="4-efart.html#SP1">&#167;1</a><br/>Verbs at Run Time - <a href="4-vart.html#SP3">&#167;3</a>, <a href="4-vart.html#SP4">&#167;4</a>, <a href="4-vart.html#SP4_1">&#167;4.1</a>, <a href="4-vart.html#SP4_2">&#167;4.2</a><br/>Relations at Run Time - <a href="4-rart.html#SP2">&#167;2</a>, <a href="4-rart.html#SP3">&#167;3</a>, <a href="4-rart.html#SP3_1_2">&#167;3.1.2</a>, <a href="4-rart.html#SP3_2">&#167;3.2</a>, <a href="4-rart.html#SP3_2_1">&#167;3.2.1</a>, <a href="4-rart.html#SP3_2_5_1">&#167;3.2.5.1</a>, <a href="4-rart.html#SP3_2_6">&#167;3.2.6</a>, <a href="4-rart.html#SP3_2_9">&#167;3.2.9</a>, <a href="4-rart.html#SP3_2_10">&#167;3.2.10</a>, <a href="4-rart.html#SP3_2_11">&#167;3.2.11</a>, <a href="4-rart.html#SP3_2_12">&#167;3.2.12</a>, <a href="4-rart.html#SP3_2_9_1">&#167;3.2.9.1</a>, <a href="4-rart.html#SP3_2_10_1">&#167;3.2.10.1</a>, <a href="4-rart.html#SP3_2_12_1">&#167;3.2.12.1</a>, <a href="4-rart.html#SP4">&#167;4</a>, <a href="4-rart.html#SP5">&#167;5</a>, <a href="4-rart.html#SP17_1">&#167;17.1</a>, <a href="4-rart.html#SP17_5">&#167;17.5</a>, <a href="4-rart.html#SP17_6">&#167;17.6</a><br/>Runtime Support for Tables - <a href="4-rsft.html#SP1_1_1_1_1_5">&#167;1.1.1.1.1.5</a>, <a href="4-rsft.html#SP1_2">&#167;1.2</a>, <a href="4-rsft.html#SP1_3">&#167;1.3</a>, <a href="4-rsft.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">Hierarchy::find</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Hierarchy::find</span></span>:<br/>Emitting Inter - <a href="2-emt.html#SP2">&#167;2</a>, <a href="2-emt.html#SP3">&#167;3</a><br/>Fundamental Constants - <a href="4-fc.html#SP1">&#167;1</a>, <a href="4-fc.html#SP2">&#167;2</a><br/>List Together - <a href="4-lt.html#SP3_1">&#167;3.1</a><br/>Routines - <a href="4-rtn.html#SP4_1_2">&#167;4.1.2</a>, <a href="4-rtn.html#SP4_1_3">&#167;4.1.3</a>, <a href="4-rtn.html#SP4_1_4">&#167;4.1.4</a><br/>Test Scripts - <a href="4-ts.html#SP3">&#167;3</a><br/>Internal Test Cases - <a href="4-itc.html#SP4">&#167;4</a>, <a href="4-itc.html#SP5">&#167;5</a><br/>Use Options at Run Time - <a href="4-uoart.html#SP1">&#167;1</a>, <a href="4-uoart.html#SP1_1">&#167;1.1</a>, <a href="4-uoart.html#SP2">&#167;2</a><br/>Runtime Support for Kinds - <a href="4-rsfk.html#SP5">&#167;5</a>, <a href="4-rsfk.html#SP6">&#167;6</a>, <a href="4-rsfk.html#SP18_3">&#167;18.3</a>, <a href="4-rsfk.html#SP20_1">&#167;20.1</a>, <a href="4-rsfk.html#SP21">&#167;21</a>, <a href="4-rsfk.html#SP26">&#167;26</a>, <a href="4-rsfk.html#SP26_5">&#167;26.5</a>, <a href="4-rsfk.html#SP26_5_1">&#167;26.5.1</a>, <a href="4-rsfk.html#SP26_6_1">&#167;26.6.1</a>, <a href="4-rsfk.html#SP26_6_2">&#167;26.6.2</a>, <a href="4-rsfk.html#SP26_6_3">&#167;26.6.3</a>, <a href="4-rsfk.html#SP26_6_4">&#167;26.6.4</a>, <a href="4-rsfk.html#SP26_6_5">&#167;26.6.5</a>, <a href="4-rsfk.html#SP26_6_6">&#167;26.6.6</a>, <a href="4-rsfk.html#SP27">&#167;27</a><br/>Extension Files at Run Time - <a href="4-efart.html#SP1">&#167;1</a><br/>Verbs at Run Time - <a href="4-vart.html#SP3">&#167;3</a>, <a href="4-vart.html#SP4">&#167;4</a>, <a href="4-vart.html#SP4_1">&#167;4.1</a>, <a href="4-vart.html#SP4_2">&#167;4.2</a><br/>Relations at Run Time - <a href="4-rart.html#SP3">&#167;3</a>, <a href="4-rart.html#SP4">&#167;4</a>, <a href="4-rart.html#SP4_1_2">&#167;4.1.2</a>, <a href="4-rart.html#SP4_2">&#167;4.2</a>, <a href="4-rart.html#SP4_2_1">&#167;4.2.1</a>, <a href="4-rart.html#SP4_2_5_1">&#167;4.2.5.1</a>, <a href="4-rart.html#SP4_2_6">&#167;4.2.6</a>, <a href="4-rart.html#SP4_2_9">&#167;4.2.9</a>, <a href="4-rart.html#SP4_2_10">&#167;4.2.10</a>, <a href="4-rart.html#SP4_2_11">&#167;4.2.11</a>, <a href="4-rart.html#SP4_2_12">&#167;4.2.12</a>, <a href="4-rart.html#SP4_2_9_1">&#167;4.2.9.1</a>, <a href="4-rart.html#SP4_2_10_1">&#167;4.2.10.1</a>, <a href="4-rart.html#SP4_2_12_1">&#167;4.2.12.1</a>, <a href="4-rart.html#SP5">&#167;5</a>, <a href="4-rart.html#SP6">&#167;6</a>, <a href="4-rart.html#SP18_1">&#167;18.1</a>, <a href="4-rart.html#SP18_5">&#167;18.5</a>, <a href="4-rart.html#SP18_6">&#167;18.6</a><br/>Runtime Support for Tables - <a href="4-rsft.html#SP1_1_1_1_1_5">&#167;1.1.1.1.1.5</a>, <a href="4-rsft.html#SP1_2">&#167;1.2</a>, <a href="4-rsft.html#SP1_3">&#167;1.3</a>, <a href="4-rsft.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">HierarchyLocations::find</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">id</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Hierarchy::make_available</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Hierarchy::make_available</span></span>:<br/>Fundamental Constants - <a href="4-fc.html#SP1">&#167;1</a>, <a href="4-fc.html#SP2">&#167;2</a><br/>Test Scripts - <a href="4-ts.html#SP3">&#167;3</a><br/>Internal Test Cases - <a href="4-itc.html#SP4">&#167;4</a><br/>Use Options at Run Time - <a href="4-uoart.html#SP2">&#167;2</a><br/>Runtime Support for Kinds - <a href="4-rsfk.html#SP18_3">&#167;18.3</a>, <a href="4-rsfk.html#SP26">&#167;26</a>, <a href="4-rsfk.html#SP26_6_1">&#167;26.6.1</a>, <a href="4-rsfk.html#SP26_6_2">&#167;26.6.2</a>, <a href="4-rsfk.html#SP26_6_3">&#167;26.6.3</a>, <a href="4-rsfk.html#SP26_6_4">&#167;26.6.4</a>, <a href="4-rsfk.html#SP26_6_5">&#167;26.6.5</a>, <a href="4-rsfk.html#SP26_6_6">&#167;26.6.6</a>, <a href="4-rsfk.html#SP27">&#167;27</a><br/>Extension Files at Run Time - <a href="4-efart.html#SP1">&#167;1</a><br/>Verbs at Run Time - <a href="4-vart.html#SP4">&#167;4</a><br/>Relations at Run Time - <a href="4-rart.html#SP2">&#167;2</a>, <a href="4-rart.html#SP3">&#167;3</a>, <a href="4-rart.html#SP5">&#167;5</a><br/>Runtime Support for Tables - <a href="4-rsft.html#SP1_2">&#167;1.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">iname</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Hierarchy::make_available</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Hierarchy::make_available</span></span>:<br/>Fundamental Constants - <a href="4-fc.html#SP1">&#167;1</a>, <a href="4-fc.html#SP2">&#167;2</a><br/>Test Scripts - <a href="4-ts.html#SP3">&#167;3</a><br/>Internal Test Cases - <a href="4-itc.html#SP4">&#167;4</a><br/>Use Options at Run Time - <a href="4-uoart.html#SP2">&#167;2</a><br/>Runtime Support for Kinds - <a href="4-rsfk.html#SP18_3">&#167;18.3</a>, <a href="4-rsfk.html#SP26">&#167;26</a>, <a href="4-rsfk.html#SP26_6_1">&#167;26.6.1</a>, <a href="4-rsfk.html#SP26_6_2">&#167;26.6.2</a>, <a href="4-rsfk.html#SP26_6_3">&#167;26.6.3</a>, <a href="4-rsfk.html#SP26_6_4">&#167;26.6.4</a>, <a href="4-rsfk.html#SP26_6_5">&#167;26.6.5</a>, <a href="4-rsfk.html#SP26_6_6">&#167;26.6.6</a>, <a href="4-rsfk.html#SP27">&#167;27</a><br/>Extension Files at Run Time - <a href="4-efart.html#SP1">&#167;1</a><br/>Verbs at Run Time - <a href="4-vart.html#SP4">&#167;4</a><br/>Relations at Run Time - <a href="4-rart.html#SP3">&#167;3</a>, <a href="4-rart.html#SP4">&#167;4</a>, <a href="4-rart.html#SP6">&#167;6</a><br/>Runtime Support for Tables - <a href="4-rsft.html#SP1_2">&#167;1.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_tree</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">iname</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ma_as</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Produce::get_translation</span><span class="plain-syntax">(</span><span class="identifier-syntax">iname</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">ma_as</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">ma_as</span><span class="plain-syntax"> = </span><a href="2-emt.html#SP4" class="function-link"><span class="function-syntax">Emit::to_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">iname</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PackageTypes::get</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"_linkage"</span><span class="plain-syntax">);</span>
@ -1754,7 +1754,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">HierarchyLocations::attach_new_package</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">super</span><span class="plain-syntax">, </span><span class="identifier-syntax">hap_id</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">Hierarchy::make_iname_in</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Hierarchy::make_iname_in</span></span>:<br/>List Together - <a href="4-lt.html#SP2">&#167;2</a><br/>Jump Labels - <a href="4-jl.html#SP2">&#167;2</a><br/>Test Scripts - <a href="4-ts.html#SP2">&#167;2</a><br/>Runtime Support for Kinds - <a href="4-rsfk.html#SP5">&#167;5</a>, <a href="4-rsfk.html#SP15_1_1">&#167;15.1.1</a>, <a href="4-rsfk.html#SP17">&#167;17</a><br/>Verbs at Run Time - <a href="4-vart.html#SP2">&#167;2</a><br/>Relations at Run Time - <a href="4-rart.html#SP3_1_2">&#167;3.1.2</a>, <a href="4-rart.html#SP8">&#167;8</a>, <a href="4-rart.html#SP8_3">&#167;8.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">package_request</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">Hierarchy::make_iname_in</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">Hierarchy::make_iname_in</span></span>:<br/>List Together - <a href="4-lt.html#SP2">&#167;2</a><br/>Jump Labels - <a href="4-jl.html#SP2">&#167;2</a><br/>Test Scripts - <a href="4-ts.html#SP2">&#167;2</a><br/>Runtime Support for Kinds - <a href="4-rsfk.html#SP5">&#167;5</a>, <a href="4-rsfk.html#SP15_1_1">&#167;15.1.1</a>, <a href="4-rsfk.html#SP17">&#167;17</a><br/>Verbs at Run Time - <a href="4-vart.html#SP2">&#167;2</a><br/>Relations at Run Time - <a href="4-rart.html#SP1">&#167;1</a>, <a href="4-rart.html#SP4_1_2">&#167;4.1.2</a>, <a href="4-rart.html#SP9">&#167;9</a>, <a href="4-rart.html#SP9_3">&#167;9.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">package_request</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">HierarchyLocations::find_in_package</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, -1, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>

View file

@ -457,7 +457,7 @@ exceptional case.
<span class="plain-syntax"> </span><a href="4-ct.html#SP5" class="function-link"><span class="function-syntax">CompiledText::from_text_with_options</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CompiledText::from_text</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">CompiledText::from_text</span></span>:<br/>Relations at Run Time - <a href="4-rart.html#SP3_1_5">&#167;3.1.5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CompiledText::from_text</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">CompiledText::from_text</span></span>:<br/>Relations at Run Time - <a href="4-rart.html#SP4_1_5">&#167;4.1.5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="4-ct.html#SP5" class="function-link"><span class="function-syntax">CompiledText::from_text_with_options</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>

File diff suppressed because it is too large Load diff

View file

@ -125,7 +125,7 @@ kinds being compiled to an I6 <span class="extract"><span class="extract-syntax"
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::RunTime::I6_classname</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Kinds::RunTime::I6_classname</span></span>:<br/><a href="4-rsfk.html#SP27">&#167;27</a><br/>Relations at Run Time - <a href="4-rart.html#SP17_2">&#167;17.2</a>, <a href="4-rart.html#SP17_3">&#167;17.3</a>, <a href="4-rart.html#SP17_4">&#167;17.4</a>, <a href="4-rart.html#SP17_5">&#167;17.5</a>, <a href="4-rart.html#SP17_6">&#167;17.6</a>, <a href="4-rart.html#SP19">&#167;19</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">Kinds::RunTime::I6_classname</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Kinds::RunTime::I6_classname</span></span>:<br/><a href="4-rsfk.html#SP27">&#167;27</a><br/>Relations at Run Time - <a href="4-rart.html#SP18_2">&#167;18.2</a>, <a href="4-rart.html#SP18_3">&#167;18.3</a>, <a href="4-rart.html#SP18_4">&#167;18.4</a>, <a href="4-rart.html#SP18_5">&#167;18.5</a>, <a href="4-rart.html#SP18_6">&#167;18.6</a>, <a href="4-rart.html#SP20">&#167;20</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::is_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-rsfk.html#SP24" class="function-link"><span class="function-syntax">Kinds::RunTime::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no I6 classname available"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
@ -222,7 +222,7 @@ chosen), but no problem message has been issued about this, or
<span class="plain-syntax"> </span><span class="identifier-syntax">package_request</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PR</span><span class="plain-syntax"> = </span><a href="2-hrr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::package_in_enclosure</span></a><span class="plain-syntax">(</span><span class="constant-syntax">BLOCK_CONSTANTS_HAP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">N</span><span class="plain-syntax"> = </span><a href="2-hrr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::make_iname_in</span></a><span class="plain-syntax">(</span><span class="constant-syntax">BLOCK_CONSTANT_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">PR</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax"> = </span><a href="2-emt.html#SP3" class="function-link"><span class="function-syntax">Emit::named_late_array_begin</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">N</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-rart.html#SP4" class="function-link"><span class="function-syntax">RTRelations::compile_blank_relation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-rart.html#SP5" class="function-link"><span class="function-syntax">RTRelations::compile_blank_relation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-emt.html#SP3" class="function-link"><span class="function-syntax">Emit::array_end</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">save</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">N</span><span class="plain-syntax">) </span><a href="2-emt.html#SP4" class="function-link"><span class="function-syntax">Emit::holster</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">N</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
@ -673,7 +673,7 @@ turns up. This means remembering everything we've seen, using a new structure:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::RunTime::emit_strong_id</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Kinds::RunTime::emit_strong_id</span></span>:<br/><a href="4-rsfk.html#SP18_1_1">&#167;18.1.1</a>, <a href="4-rsfk.html#SP18_1_1_1">&#167;18.1.1.1</a>, <a href="4-rsfk.html#SP18_1_1_2">&#167;18.1.1.2</a><br/>Relations at Run Time - <a href="4-rart.html#SP3_1_4">&#167;3.1.4</a>, <a href="4-rart.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::RunTime::emit_strong_id</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Kinds::RunTime::emit_strong_id</span></span>:<br/><a href="4-rsfk.html#SP18_1_1">&#167;18.1.1</a>, <a href="4-rsfk.html#SP18_1_1_1">&#167;18.1.1.1</a>, <a href="4-rsfk.html#SP18_1_1_2">&#167;18.1.1.2</a><br/>Relations at Run Time - <a href="4-rart.html#SP4_1_4">&#167;4.1.4</a>, <a href="4-rart.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">runtime_kind_structure</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rks</span><span class="plain-syntax"> = </span><a href="4-rsfk.html#SP15" class="function-link"><span class="function-syntax">Kinds::RunTime::get_rks</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">rks</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-emt.html#SP3" class="function-link"><span class="function-syntax">Emit::array_iname_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">rks</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">rks_iname</span><span class="plain-syntax">);</span>
@ -682,7 +682,7 @@ turns up. This means remembering everything we've seen, using a new structure:
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::RunTime::emit_strong_id_as_val</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Kinds::RunTime::emit_strong_id_as_val</span></span>:<br/><a href="4-rsfk.html#SP18_3">&#167;18.3</a>, <a href="4-rsfk.html#SP21">&#167;21</a><br/>Relations at Run Time - <a href="4-rart.html#SP3">&#167;3</a>, <a href="4-rart.html#SP3_2_9_1">&#167;3.2.9.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::RunTime::emit_strong_id_as_val</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Kinds::RunTime::emit_strong_id_as_val</span></span>:<br/><a href="4-rsfk.html#SP18_3">&#167;18.3</a>, <a href="4-rsfk.html#SP21">&#167;21</a><br/>Relations at Run Time - <a href="4-rart.html#SP4">&#167;4</a>, <a href="4-rart.html#SP4_2_9_1">&#167;4.2.9.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">runtime_kind_structure</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rks</span><span class="plain-syntax"> = </span><a href="4-rsfk.html#SP15" class="function-link"><span class="function-syntax">Kinds::RunTime::get_rks</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">rks</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::val_iname</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">rks</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">rks_iname</span><span class="plain-syntax">);</span>
@ -918,7 +918,7 @@ recursively scanned through for us, so that if we have seen a construction
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::get_construct</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">) == </span><span class="identifier-syntax">CON_phrase</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Phrases::Constants::compile_default_closure</span><span class="plain-syntax">(</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::get_construct</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">) == </span><span class="identifier-syntax">CON_relation</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="4-rart.html#SP4" class="function-link"><span class="function-syntax">RTRelations::compile_default_relation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="4-rart.html#SP5" class="function-link"><span class="function-syntax">RTRelations::compile_default_relation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::get_construct</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">) == </span><span class="identifier-syntax">CON_list_of</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Lists::compile_default_list</span><span class="plain-syntax">(</span><span class="identifier-syntax">identifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
@ -1082,7 +1082,7 @@ list of 20 texts. For the cases above, it's always 1.
<span class="definition-keyword">define</span> <span class="constant-syntax">BLK_FLAG_TRUNCMULT</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00000010</span>
</pre>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::RunTime::emit_block_value_header</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">Kinds::RunTime::emit_block_value_header</span></span>:<br/><a href="4-rsfk.html#SP5">&#167;5</a><br/>Relations at Run Time - <a href="4-rart.html#SP3_1">&#167;3.1</a>, <a href="4-rart.html#SP4">&#167;4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">individual</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">size</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Kinds::RunTime::emit_block_value_header</span><button class="popup" onclick="togglePopup('usagePopup16')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup16">Usage of <span class="code-font"><span class="function-syntax">Kinds::RunTime::emit_block_value_header</span></span>:<br/><a href="4-rsfk.html#SP5">&#167;5</a><br/>Relations at Run Time - <a href="4-rart.html#SP4_1">&#167;4.1</a>, <a href="4-rart.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">individual</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">size</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">individual</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><a href="2-emt.html#SP3" class="function-link"><span class="function-syntax">Emit::array_numeric_entry</span></a><span class="plain-syntax">(0);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">, </span><span class="identifier-syntax">w</span><span class="plain-syntax"> = </span><span class="constant-syntax">4</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">TargetVMs::is_16_bit</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::vm</span><span class="plain-syntax">())) </span><span class="identifier-syntax">w</span><span class="plain-syntax"> = </span><span class="constant-syntax">2</span><span class="plain-syntax">;</span>

View file

@ -81,7 +81,7 @@ already been set up, or not. Here's not:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="function-syntax">Routines::begin</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Routines::begin</span></span>:<br/>List Together - <a href="4-lt.html#SP3_1">&#167;3.1</a><br/>Test Scripts - <a href="4-ts.html#SP3">&#167;3</a><br/>Internal Test Cases - <a href="4-itc.html#SP4">&#167;4</a><br/>Use Options at Run Time - <a href="4-uoart.html#SP1_1">&#167;1.1</a>, <a href="4-uoart.html#SP1_2">&#167;1.2</a><br/>Runtime Support for Kinds - <a href="4-rsfk.html#SP18_3">&#167;18.3</a>, <a href="4-rsfk.html#SP26_1">&#167;26.1</a>, <a href="4-rsfk.html#SP26_2">&#167;26.2</a>, <a href="4-rsfk.html#SP26_3">&#167;26.3</a>, <a href="4-rsfk.html#SP26_4">&#167;26.4</a>, <a href="4-rsfk.html#SP26_5">&#167;26.5</a>, <a href="4-rsfk.html#SP26_6_1">&#167;26.6.1</a>, <a href="4-rsfk.html#SP26_6_2">&#167;26.6.2</a>, <a href="4-rsfk.html#SP26_6_3">&#167;26.6.3</a>, <a href="4-rsfk.html#SP26_6_4">&#167;26.6.4</a>, <a href="4-rsfk.html#SP26_6_5">&#167;26.6.5</a>, <a href="4-rsfk.html#SP26_6_6">&#167;26.6.6</a>, <a href="4-rsfk.html#SP27">&#167;27</a><br/>Extension Files at Run Time - <a href="4-efart.html#SP1">&#167;1</a><br/>Verbs at Run Time - <a href="4-vart.html#SP4_1">&#167;4.1</a>, <a href="4-vart.html#SP4_2">&#167;4.2</a><br/>Relations at Run Time - <a href="4-rart.html#SP3">&#167;3</a>, <a href="4-rart.html#SP3_2">&#167;3.2</a>, <a href="4-rart.html#SP5">&#167;5</a>, <a href="4-rart.html#SP17_1">&#167;17.1</a>, <a href="4-rart.html#SP17_2">&#167;17.2</a>, <a href="4-rart.html#SP17_3">&#167;17.3</a>, <a href="4-rart.html#SP17_4">&#167;17.4</a>, <a href="4-rart.html#SP17_5">&#167;17.5</a>, <a href="4-rart.html#SP17_6">&#167;17.6</a>, <a href="4-rart.html#SP18">&#167;18</a><br/>Runtime Support for Tables - <a href="4-rsft.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="function-syntax">Routines::begin</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">Routines::begin</span></span>:<br/>List Together - <a href="4-lt.html#SP3_1">&#167;3.1</a><br/>Test Scripts - <a href="4-ts.html#SP3">&#167;3</a><br/>Internal Test Cases - <a href="4-itc.html#SP4">&#167;4</a><br/>Use Options at Run Time - <a href="4-uoart.html#SP1_1">&#167;1.1</a>, <a href="4-uoart.html#SP1_2">&#167;1.2</a><br/>Runtime Support for Kinds - <a href="4-rsfk.html#SP18_3">&#167;18.3</a>, <a href="4-rsfk.html#SP26_1">&#167;26.1</a>, <a href="4-rsfk.html#SP26_2">&#167;26.2</a>, <a href="4-rsfk.html#SP26_3">&#167;26.3</a>, <a href="4-rsfk.html#SP26_4">&#167;26.4</a>, <a href="4-rsfk.html#SP26_5">&#167;26.5</a>, <a href="4-rsfk.html#SP26_6_1">&#167;26.6.1</a>, <a href="4-rsfk.html#SP26_6_2">&#167;26.6.2</a>, <a href="4-rsfk.html#SP26_6_3">&#167;26.6.3</a>, <a href="4-rsfk.html#SP26_6_4">&#167;26.6.4</a>, <a href="4-rsfk.html#SP26_6_5">&#167;26.6.5</a>, <a href="4-rsfk.html#SP26_6_6">&#167;26.6.6</a>, <a href="4-rsfk.html#SP27">&#167;27</a><br/>Extension Files at Run Time - <a href="4-efart.html#SP1">&#167;1</a><br/>Verbs at Run Time - <a href="4-vart.html#SP4_1">&#167;4.1</a>, <a href="4-vart.html#SP4_2">&#167;4.2</a><br/>Relations at Run Time - <a href="4-rart.html#SP4">&#167;4</a>, <a href="4-rart.html#SP4_2">&#167;4.2</a>, <a href="4-rart.html#SP6">&#167;6</a>, <a href="4-rart.html#SP18_1">&#167;18.1</a>, <a href="4-rart.html#SP18_2">&#167;18.2</a>, <a href="4-rart.html#SP18_3">&#167;18.3</a>, <a href="4-rart.html#SP18_4">&#167;18.4</a>, <a href="4-rart.html#SP18_5">&#167;18.5</a>, <a href="4-rart.html#SP18_6">&#167;18.6</a>, <a href="4-rart.html#SP19">&#167;19</a><br/>Runtime Support for Tables - <a href="4-rsft.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-rtn.html#SP3" class="function-link"><span class="function-syntax">Routines::begin_framed</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
@ -140,7 +140,7 @@ did not.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Routines::end</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Routines::end</span></span>:<br/>List Together - <a href="4-lt.html#SP3_1">&#167;3.1</a><br/>Test Scripts - <a href="4-ts.html#SP3">&#167;3</a><br/>Internal Test Cases - <a href="4-itc.html#SP4">&#167;4</a><br/>Use Options at Run Time - <a href="4-uoart.html#SP1_1">&#167;1.1</a>, <a href="4-uoart.html#SP1_2">&#167;1.2</a><br/>Runtime Support for Kinds - <a href="4-rsfk.html#SP18_3">&#167;18.3</a>, <a href="4-rsfk.html#SP26_1">&#167;26.1</a>, <a href="4-rsfk.html#SP26_2">&#167;26.2</a>, <a href="4-rsfk.html#SP26_3">&#167;26.3</a>, <a href="4-rsfk.html#SP26_4">&#167;26.4</a>, <a href="4-rsfk.html#SP26_5">&#167;26.5</a>, <a href="4-rsfk.html#SP26_6_1">&#167;26.6.1</a>, <a href="4-rsfk.html#SP26_6_2">&#167;26.6.2</a>, <a href="4-rsfk.html#SP26_6_3">&#167;26.6.3</a>, <a href="4-rsfk.html#SP26_6_4">&#167;26.6.4</a>, <a href="4-rsfk.html#SP26_6_5">&#167;26.6.5</a>, <a href="4-rsfk.html#SP26_6_6">&#167;26.6.6</a>, <a href="4-rsfk.html#SP27">&#167;27</a><br/>Extension Files at Run Time - <a href="4-efart.html#SP1">&#167;1</a><br/>Verbs at Run Time - <a href="4-vart.html#SP4_1">&#167;4.1</a>, <a href="4-vart.html#SP4_2">&#167;4.2</a><br/>Relations at Run Time - <a href="4-rart.html#SP3">&#167;3</a>, <a href="4-rart.html#SP3_2">&#167;3.2</a>, <a href="4-rart.html#SP5">&#167;5</a>, <a href="4-rart.html#SP17_1">&#167;17.1</a>, <a href="4-rart.html#SP17_2">&#167;17.2</a>, <a href="4-rart.html#SP17_3">&#167;17.3</a>, <a href="4-rart.html#SP17_4">&#167;17.4</a>, <a href="4-rart.html#SP17_5">&#167;17.5</a>, <a href="4-rart.html#SP17_6">&#167;17.6</a>, <a href="4-rart.html#SP18">&#167;18</a><br/>Runtime Support for Tables - <a href="4-rsft.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Routines::end</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Routines::end</span></span>:<br/>List Together - <a href="4-lt.html#SP3_1">&#167;3.1</a><br/>Test Scripts - <a href="4-ts.html#SP3">&#167;3</a><br/>Internal Test Cases - <a href="4-itc.html#SP4">&#167;4</a><br/>Use Options at Run Time - <a href="4-uoart.html#SP1_1">&#167;1.1</a>, <a href="4-uoart.html#SP1_2">&#167;1.2</a><br/>Runtime Support for Kinds - <a href="4-rsfk.html#SP18_3">&#167;18.3</a>, <a href="4-rsfk.html#SP26_1">&#167;26.1</a>, <a href="4-rsfk.html#SP26_2">&#167;26.2</a>, <a href="4-rsfk.html#SP26_3">&#167;26.3</a>, <a href="4-rsfk.html#SP26_4">&#167;26.4</a>, <a href="4-rsfk.html#SP26_5">&#167;26.5</a>, <a href="4-rsfk.html#SP26_6_1">&#167;26.6.1</a>, <a href="4-rsfk.html#SP26_6_2">&#167;26.6.2</a>, <a href="4-rsfk.html#SP26_6_3">&#167;26.6.3</a>, <a href="4-rsfk.html#SP26_6_4">&#167;26.6.4</a>, <a href="4-rsfk.html#SP26_6_5">&#167;26.6.5</a>, <a href="4-rsfk.html#SP26_6_6">&#167;26.6.6</a>, <a href="4-rsfk.html#SP27">&#167;27</a><br/>Extension Files at Run Time - <a href="4-efart.html#SP1">&#167;1</a><br/>Verbs at Run Time - <a href="4-vart.html#SP4_1">&#167;4.1</a>, <a href="4-vart.html#SP4_2">&#167;4.2</a><br/>Relations at Run Time - <a href="4-rart.html#SP4">&#167;4</a>, <a href="4-rart.html#SP4_2">&#167;4.2</a>, <a href="4-rart.html#SP6">&#167;6</a>, <a href="4-rart.html#SP18_1">&#167;18.1</a>, <a href="4-rart.html#SP18_2">&#167;18.2</a>, <a href="4-rart.html#SP18_3">&#167;18.3</a>, <a href="4-rart.html#SP18_4">&#167;18.4</a>, <a href="4-rart.html#SP18_5">&#167;18.5</a>, <a href="4-rart.html#SP18_6">&#167;18.6</a>, <a href="4-rart.html#SP19">&#167;19</a><br/>Runtime Support for Tables - <a href="4-rsft.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">R_kind</span><span class="plain-syntax"> = </span><span class="identifier-syntax">LocalVariables::deduced_function_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">currently_compiling_in_frame</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">kernel_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, *</span><span class="identifier-syntax">public_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">currently_compiling_iname</span><span class="plain-syntax">;</span>

View file

@ -635,7 +635,7 @@ usages to the debugging log.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">where_vu_created</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Index::link</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">vu</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">where_vu_created</span><span class="plain-syntax">)));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> = </span><span class="identifier-syntax">VerbMeanings::get_regular_meaning_of_form</span><span class="plain-syntax">(</span><span class="identifier-syntax">Verbs::base_form</span><span class="plain-syntax">(</span><span class="identifier-syntax">VerbUsages::get_verb</span><span class="plain-syntax">(</span><span class="identifier-syntax">vu</span><span class="plain-syntax">)));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) </span><a href="4-rart.html#SP21" class="function-link"><span class="function-syntax">RTRelations::index_for_verbs</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">bp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) </span><a href="4-rart.html#SP22" class="function-link"><span class="function-syntax">RTRelations::index_for_verbs</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">bp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">preposition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prep</span><span class="plain-syntax">;</span>
@ -644,7 +644,7 @@ usages to the debugging log.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">prep</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">where_prep_created</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Index::link</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">prep</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">where_prep_created</span><span class="plain-syntax">)));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> = </span><span class="identifier-syntax">VerbMeanings::get_regular_meaning_of_form</span><span class="plain-syntax">(</span><span class="identifier-syntax">Verbs::find_form</span><span class="plain-syntax">(</span><span class="identifier-syntax">copular_verb</span><span class="plain-syntax">, </span><span class="identifier-syntax">prep</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) </span><a href="4-rart.html#SP21" class="function-link"><span class="function-syntax">RTRelations::index_for_verbs</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">bp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) </span><a href="4-rart.html#SP22" class="function-link"><span class="function-syntax">RTRelations::index_for_verbs</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">bp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>

View file

@ -1,6 +1,6 @@
Total memory consumption was 256345K = 250 MB
Total memory consumption was 256344K = 250 MB
62.4% was used for 1338375 objects, in 273578 frames in 200 x 800K = 160000K = 156 MB:
62.4% was used for 1338387 objects, in 273590 frames in 200 x 800K = 160000K = 156 MB:
9.8% inter_tree_node_array 36 x 8192 = 294912 objects, 25953408 bytes
5.5% text_stream_array 2567 x 100 = 256700 objects, 14457344 bytes
@ -29,8 +29,8 @@ Total memory consumption was 256345K = 250 MB
0.2% dictionary 16348 objects, 784704 bytes
0.2% dict_entry_array 233 x 100 = 23300 objects, 753056 bytes
0.2% package_request 7931 objects, 697928 bytes
0.2% inter_name_generator_array 16 x 1000 = 16000 objects, 640512 bytes
0.2% unary_predicate_array 16 x 1000 = 16000 objects, 640512 bytes
0.2% inter_name_generator_array 16 x 1000 = 16000 objects, 640512 bytes
0.1% local_variable_array 45 x 100 = 4500 objects, 505440 bytes
0.1% inference_subject 664 objects, 435584 bytes
0.1% verb_usage 1128 objects, 388032 bytes
@ -41,8 +41,8 @@ Total memory consumption was 256345K = 250 MB
0.1% noun 2379 objects, 285480 bytes
---- action_name_list_array 3 x 1000 = 3000 objects, 240096 bytes
---- inter_annotation_array 1 x 8192 objects, 196640 bytes
---- binary_predicate 321 objects, 184896 bytes
---- inference 1703 objects, 177112 bytes
---- binary_predicate 321 objects, 174624 bytes
---- linked_list_item_array 10 x 1000 = 10000 objects, 160320 bytes
---- linguistic_stock_item 3315 objects, 159120 bytes
---- stacked_variable_owner_list_array 38 x 100 = 3800 objects, 153216 bytes
@ -91,8 +91,8 @@ Total memory consumption was 256345K = 250 MB
---- match_avinue_array 1 x 1000 objects, 16032 bytes
---- to_phrase_request 59 objects, 15576 bytes
---- adjective_iname_holder 320 objects, 15360 bytes
---- method 280 objects, 13440 bytes
---- plugin 23 objects, 13432 bytes
---- method 275 objects, 13200 bytes
---- literal_text 147 objects, 12936 bytes
---- stopwatch_timer 148 objects, 11840 bytes
---- understanding_reference_array 2 x 100 = 200 objects, 11264 bytes
@ -121,15 +121,15 @@ Total memory consumption was 256345K = 250 MB
---- property_setting_bp_data 84 objects, 3360 bytes
---- kind_constructor_comparison_schema_array 1 x 100 objects, 3232 bytes
---- instance_usage_array 1 x 200 objects, 3232 bytes
---- compatibility_specification 66 objects, 3168 bytes
---- definition 44 objects, 3168 bytes
---- compatibility_specification 66 objects, 3168 bytes
---- inform_extension 19 objects, 3040 bytes
---- property_of_value_storage 93 objects, 2976 bytes
---- submodule_request 72 objects, 2880 bytes
---- inter_construct 32 objects, 2560 bytes
---- method_set 77 objects, 2464 bytes
---- kind_constructor_casting_rule_array 1 x 100 objects, 2432 bytes
---- kind_constructor_instance_array 1 x 100 objects, 2432 bytes
---- method_set 76 objects, 2432 bytes
---- equation_symbol 30 objects, 2400 bytes
---- semver_range 22 objects, 2288 bytes
---- use_option 29 objects, 1856 bytes
@ -164,60 +164,61 @@ Total memory consumption was 256345K = 250 MB
---- rulebook_outcome 17 objects, 680 bytes
---- inform_language 6 objects, 672 bytes
---- inter_warehouse_room 10 objects, 640 bytes
---- relation_guard 5 objects, 640 bytes
---- I6T_intervention 8 objects, 640 bytes
---- relation_guard 5 objects, 640 bytes
---- nascent_array 7 objects, 616 bytes
---- inbuild_search_result 15 objects, 600 bytes
---- named_rulebook_outcome 15 objects, 600 bytes
---- label_namespace 10 objects, 560 bytes
---- small_word_set 11 objects, 528 bytes
---- inform_kit 5 objects, 520 bytes
---- i6_memory_setting 13 objects, 416 bytes
---- equation 4 objects, 416 bytes
---- i6_memory_setting 13 objects, 416 bytes
---- module_package 10 objects, 400 bytes
---- dval_written 10 objects, 400 bytes
---- bp_family 12 objects, 384 bytes
---- article_usage 8 objects, 384 bytes
---- source_file 5 objects, 360 bytes
---- bp_family 11 objects, 352 bytes
---- inbuild_genre 7 objects, 336 bytes
---- door_dir_notice 5 objects, 320 bytes
---- grammatical_category 8 objects, 320 bytes
---- pronoun 8 objects, 320 bytes
---- grammatical_category 8 objects, 320 bytes
---- door_dir_notice 5 objects, 320 bytes
---- up_family 9 objects, 288 bytes
---- build_step 4 objects, 288 bytes
---- door_to_notice 5 objects, 280 bytes
---- explicit_bp_data 5 objects, 280 bytes
---- inform_pipeline 4 objects, 256 bytes
---- verb_usage_tier 5 objects, 240 bytes
---- test_scenario 1 object, 208 bytes
---- build_skill 5 objects, 200 bytes
---- compilation_unit 5 objects, 200 bytes
---- plural_dictionary_entry 4 objects, 192 bytes
---- kit_dependency 4 objects, 192 bytes
---- plural_dictionary_entry 4 objects, 192 bytes
---- inform_project 1 object, 176 bytes
---- code_generation_target 4 objects, 160 bytes
---- link_instruction 4 objects, 160 bytes
---- pointer_allocation 2 objects, 160 bytes
---- inter_architecture 4 objects, 160 bytes
---- code_generation_target 4 objects, 160 bytes
---- pointer_allocation 2 objects, 160 bytes
---- link_instruction 4 objects, 160 bytes
---- codegen_pipeline 1 object, 128 bytes
---- element_activation 4 objects, 128 bytes
---- inbuild_nest 3 objects, 120 bytes
---- inform_kit_ittt 2 objects, 96 bytes
---- article 2 objects, 80 bytes
---- compile_task_data 1 object, 80 bytes
---- list_together_routine 2 objects, 80 bytes
---- inter_warehouse 1 object, 56 bytes
---- compile_task_data 1 object, 80 bytes
---- article 2 objects, 80 bytes
---- build_methodology 1 object, 56 bytes
---- inter_warehouse 1 object, 56 bytes
---- HTML_file_state 1 object, 48 bytes
---- star_invention 1 object, 48 bytes
---- blorb_figure 1 object, 48 bytes
---- parse_name_notice 1 object, 40 bytes
---- kind_template_definition 1 object, 40 bytes
---- by_routine_bp_data 1 object, 40 bytes
---- kind_template_definition 1 object, 40 bytes
---- loop_over_scope 1 object, 40 bytes
37.5% was used for memory not allocated for objects:
15.9% text stream storage 41841836 bytes in 263036 claims
15.9% text stream storage 41840492 bytes in 263034 claims
3.5% dictionary storage 9266176 bytes in 16348 claims
---- sorting 1048 bytes in 3 claims
2.7% source text 7200000 bytes in 3 claims
@ -234,5 +235,5 @@ Total memory consumption was 256345K = 250 MB
---- emitter array storage 14368 bytes in 8 claims
---- code generation workspace for objects 9200 bytes in 9 claims
20.0% was overhead - 52570000 bytes = 51337K = 50 MB
20.0% was overhead - 52579688 bytes = 51347K = 50 MB

View file

@ -1,35 +1,36 @@
100.0% in inform7 run
66.6% in compilation to Inter
66.2% in compilation to Inter
25.3% in //Phrases::Manager::compile_first_block//
8.7% in //Phrases::Manager::compile_as_needed//
6.9% in //Strings::compile_responses//
6.1% in //World::Compile::compile//
3.7% in //MajorNodes::pre_pass//
3.3% in //MajorNodes::pass_1//
9.0% in //Phrases::Manager::compile_as_needed//
7.0% in //Strings::compile_responses//
5.9% in //World::Compile::compile//
3.5% in //MajorNodes::pre_pass//
3.2% in //MajorNodes::pass_1//
2.0% in //Phrases::Manager::RulePrintingRule_routine//
1.8% in //Phrases::Manager::rulebooks_array//
1.1% in //RTVerbs::ConjugateVerb//
0.7% in //Phrases::Manager::traverse//
1.0% in //RTVerbs::ConjugateVerb//
0.8% in //Phrases::Manager::traverse//
0.5% in //Phrases::Manager::compile_rulebooks//
0.5% in //Phrases::Manager::parse_rule_parameters//
0.5% in //World::complete//
0.3% in //MajorNodes::pass_2//
0.3% in //Phrases::Manager::compile_rulebooks//
0.3% in //RTRelations::compile_defined_relations//
0.1% in //Kinds::RunTime::compile_data_type_support_routines//
0.1% in //PL::Parsing::Verbs::compile_all//
0.1% in //Task::make_built_in_kind_constructors//
3.8% not specifically accounted for
30.9% in running Inter pipeline
10.0% in step preparation
9.7% in inter step 2/12: link
7.2% in inter step 12/12: generate inform6 -> auto.inf
3.4% not specifically accounted for
31.5% in running Inter pipeline
10.9% in step preparation
10.1% in inter step 2/12: link
7.3% in inter step 12/12: generate inform6 -> auto.inf
0.3% in inter step 9/12: make-identifiers-unique
0.1% in inter step 10/12: reconcile-verbs
0.1% in inter step 11/12: eliminate-redundant-labels
0.1% in inter step 4/12: parse-linked-matter
0.1% in inter step 5/12: resolve-conditional-compilation
0.1% in inter step 6/12: assimilate
0.1% in inter step 7/12: resolve-external-symbols
0.1% in inter step 8/12: inspect-plugs
2.4% not specifically accounted for
2.0% in supervisor
1.6% not specifically accounted for
1.8% in supervisor
0.4% not specifically accounted for

View file

@ -39,8 +39,8 @@ int RelationRequests::new_relation_SMF(int task, parse_node *V, wording *NPs) {
"this is too long a name for a single relation to have",
"and would become unwieldy.");
else Node::set_new_relation_here(V->next,
BinaryPredicates::make_pair_sketchily(explicit_bp_family,
WordAssemblages::from_wording(RW), Relation_OtoO));
Relations::Explicit::make_pair_sketchily(
WordAssemblages::from_wording(RW)));
return TRUE;
}
break;
@ -343,6 +343,8 @@ void RelationRequests::new(binary_predicate *bp, relation_request *RR) {
kind *storage_kind = NULL; /* what kind, if any, might be stored in it */
inference_subject *storage_infs = NULL; /* summing these up */
explicit_bp_data *ED = RETRIEVE_POINTER_explicit_bp_data(bp->family_specific);
int rvno = FALSE, /* relate values not objects? */
dynamic = FALSE, /* use dynamic memory allocation for storage? */
provide_prn = FALSE, /* allocate the storage property to the kind? */
@ -355,7 +357,7 @@ void RelationRequests::new(binary_predicate *bp, relation_request *RR) {
if (rvno) { bp->relates_values_not_objects = TRUE; bpr->relates_values_not_objects = TRUE; }
if (RR->frf) { bp->fast_route_finding = TRUE; bpr->fast_route_finding = TRUE; }
if (prn) {
bp->i6_storage_property = prn; bpr->i6_storage_property = prn;
ED->i6_storage_property = prn;
Properties::Valued::set_stored_relation(prn, bp);
}
if (dynamic) {
@ -434,8 +436,6 @@ void RelationRequests::new(binary_predicate *bp, relation_request *RR) {
}
}
bpr->form_of_relation = bp->form_of_relation;
LOGIF(RELATION_DEFINITIONS, "Defined the binary predicate:\n$2\n", bp);
}
@ -526,7 +526,6 @@ omitted from the index.
if ((PK) && (Kinds::Behaviour::is_object(PK) == FALSE)) Properties::Valued::set_kind(prn, PK);
if (storage_kind) storage_infs = Kinds::Knowledge::as_subject(storage_kind);
else storage_infs = NULL;
// if (Kinds::Behaviour::is_object(storage_kind) == FALSE) bp->storage_kind = storage_kind;
if (((RR->terms[0].unique) || (RR->terms[1].unique)) && (PK) &&
(Kinds::Behaviour::is_object(PK) == FALSE))
Properties::Valued::now_used_for_non_typesafe_relation(prn);
@ -552,7 +551,7 @@ Such a relation consumes run-time storage of $5D$ bytes on the Z-machine
and $14D$ bytes on Glulx, where $D$ is the size of the domain...
@<Complete as an asymmetric one-to-one BP@> =
bp->form_of_relation = Relation_OtoO;
ED->form_of_relation = Relation_OtoO;
provide_prn = TRUE;
if (Kinds::Behaviour::is_object(storage_kind)) {
bp->task_functions[NOW_ATOM_TRUE_TASK] = Calculus::Schemas::new("Relation_Now1to1(*2,%n,*1)", i6_prn_name);
@ -567,7 +566,7 @@ and $14D$ bytes on Glulx, where $D$ is the size of the domain...
@ The |Relation_OtoV| case, or one to various: "R relates one K to various K".
@<Complete as a one-to-various BP@> =
bp->form_of_relation = Relation_OtoV;
ED->form_of_relation = Relation_OtoV;
provide_prn = TRUE;
if (Kinds::Behaviour::is_object(storage_kind)) {
bp->task_functions[NOW_ATOM_TRUE_TASK] = Calculus::Schemas::new("*2.%n = *1", i6_prn_name);
@ -582,7 +581,7 @@ and $14D$ bytes on Glulx, where $D$ is the size of the domain...
@ The |Relation_VtoO| case, or various to one: "R relates various K to one K".
@<Complete as a various-to-one BP@> =
bp->form_of_relation = Relation_VtoO;
ED->form_of_relation = Relation_VtoO;
provide_prn = TRUE;
if (Kinds::Behaviour::is_object(storage_kind)) {
bp->task_functions[NOW_ATOM_TRUE_TASK] = Calculus::Schemas::new("*1.%n = *2", i6_prn_name);
@ -598,7 +597,7 @@ and $14D$ bytes on Glulx, where $D$ is the size of the domain...
various K".
@<Complete as an asymmetric various-to-various BP@> =
bp->form_of_relation = Relation_VtoV;
ED->form_of_relation = Relation_VtoV;
BinaryPredicates::mark_as_needed(bp);
bp->task_functions[TEST_ATOM_TASK] = Calculus::Schemas::new("(Relation_TestVtoV(*1,%n,*2,false))",
BinaryPredicates::iname(bp));
@ -611,7 +610,7 @@ various K".
another".
@<Complete as a symmetric one-to-one BP@> =
bp->form_of_relation = Relation_Sym_OtoO;
ED->form_of_relation = Relation_Sym_OtoO;
provide_prn = TRUE;
if (Kinds::Behaviour::is_object(storage_kind)) {
bp->task_functions[NOW_ATOM_TRUE_TASK] = Calculus::Schemas::new("Relation_NowS1to1(*2,%n,*1)", i6_prn_name);
@ -627,7 +626,7 @@ another".
to each other".
@<Complete as a symmetric various-to-various BP@> =
bp->form_of_relation = Relation_Sym_VtoV;
ED->form_of_relation = Relation_Sym_VtoV;
BinaryPredicates::mark_as_needed(bp);
bp->task_functions[TEST_ATOM_TASK] = Calculus::Schemas::new("(Relation_TestVtoV(*1,%n,*2,true))",
BinaryPredicates::iname(bp));
@ -640,10 +639,10 @@ to each other".
other in groups".
@<Complete as an equivalence-relation BP@> =
bp->form_of_relation = Relation_Equiv;
ED->form_of_relation = Relation_Equiv;
equivalence_bp_data *D = CREATE(equivalence_bp_data);
D->equivalence_partition = NULL;
bp->family_specific = STORE_POINTER_equivalence_bp_data(D);
ED->equiv_data = D;
provide_prn = TRUE;
if (Kinds::Behaviour::is_object(storage_kind)) {
bp->task_functions[TEST_ATOM_TASK] = Calculus::Schemas::new("(*1.%n == *2.%n)", i6_prn_name, i6_prn_name);
@ -660,11 +659,12 @@ other in groups".
}
Properties::Valued::set_kind(prn, K_number);
@ The |Relation_ByRoutine| case, or relation tested by a routine: "R relates
K to L when (some condition)".
@ The case of a relation tested by a routine: "R relates K to L when (some
condition)".
@<Complete as a relation-by-routine BP@> =
bp->form_of_relation = Relation_ByRoutine;
bp->relation_family = by_routine_bp_family;
bp->reversal->relation_family = by_routine_bp_family;
package_request *P = BinaryPredicates::package(bp);
by_routine_bp_data *D = CREATE(by_routine_bp_data);
D->condition_defn_text = RR->CONW;

View file

@ -10,11 +10,15 @@ there are none.
= (early code)
bp_family *explicit_bp_family = NULL;
bp_family *by_routine_bp_family = NULL;
typedef struct explicit_bp_data {
int form_of_relation; /* one of the |Relation_*| constants defined below */
struct property *i6_storage_property; /* provides run-time storage */
struct equivalence_bp_data *equiv_data; /* only used for |Relation_Equiv| */
struct inter_name *v2v_bitmap_iname; /* only used for |Relation_VtoV| and |Relation_Sym_VtoV| */
CLASS_DEFINITION
} explicit_bp_data;
@ =
void Relations::Explicit::start(void) {
explicit_bp_family = BinaryPredicateFamilies::new();
@ -23,6 +27,90 @@ void Relations::Explicit::start(void) {
METHOD_ADD(explicit_bp_family, SCHEMA_BPF_MTID, Relations::Explicit::REL_compile);
METHOD_ADD(explicit_bp_family, DESCRIBE_FOR_PROBLEMS_BPF_MTID, Relations::Explicit::REL_describe_for_problems);
METHOD_ADD(explicit_bp_family, DESCRIBE_FOR_INDEX_BPF_MTID, Relations::Explicit::REL_describe_briefly);
by_routine_bp_family = BinaryPredicateFamilies::new();
METHOD_ADD(by_routine_bp_family, TYPECHECK_BPF_MTID, Relations::Explicit::REL_typecheck);
METHOD_ADD(by_routine_bp_family, ASSERT_BPF_MTID, Relations::Explicit::REL_assert);
METHOD_ADD(by_routine_bp_family, SCHEMA_BPF_MTID, Relations::Explicit::REL_compile);
METHOD_ADD(by_routine_bp_family, DESCRIBE_FOR_PROBLEMS_BPF_MTID, Relations::Explicit::REL_describe_for_problems);
METHOD_ADD(by_routine_bp_family, DESCRIBE_FOR_INDEX_BPF_MTID, Relations::Explicit::REL_br_describe_briefly);
}
int Relations::Explicit::is_explicit_with_runtime_storage(binary_predicate *bp) {
if (bp->relation_family == explicit_bp_family) return TRUE;
return TRUE;
}
@ The following constants are numbered in a way which corresponds to some
run-time code supporting relations.
@d Relation_Implicit -1 /* used to mean "none of the below" */
@d Relation_OtoO 1 /* one to one: "R relates one K to one K" */
@d Relation_OtoV 2 /* one to various: "R relates one K to various K" */
@d Relation_VtoO 3 /* various to one: "R relates various K to one K" */
@d Relation_VtoV 4 /* various to various: "R relates various K to various K" */
@d Relation_Sym_OtoO 5 /* symmetric one to one: "R relates one K to another" */
@d Relation_Sym_VtoV 6 /* symmetric various to various: "R relates K to each other" */
@d Relation_Equiv 7 /* equivalence relation: "R relates K to each other in groups" */
@ =
int Relations::Explicit::allow_arbitrary_assertions(binary_predicate *bp) {
int f = Relations::Explicit::get_form_of_relation(bp);
if (f == Relation_Equiv) return TRUE;
if (f == Relation_VtoV) return TRUE;
if (f == Relation_Sym_VtoV) return TRUE;
return FALSE;
}
@ When the source text declares new relations, it turns out to be convenient
to make their BPs in a two-stage process: to make sketchy, mostly-blank BP
structures for them early on -- but getting their names registered -- and
then fill in the correct details later. This is where such sketchy pairs are
made:
=
binary_predicate *Relations::Explicit::make_pair_sketchily(word_assemblage wa) {
TEMPORARY_TEXT(relname)
WRITE_TO(relname, "%V", WordAssemblages::first_word(&wa));
binary_predicate *bp =
BinaryPredicates::make_pair(explicit_bp_family,
BPTerms::new(NULL), BPTerms::new(NULL),
relname, NULL, NULL, NULL, wa);
DISCARD_TEXT(relname)
explicit_bp_data *ED = CREATE(explicit_bp_data);
bp->family_specific = STORE_POINTER_explicit_bp_data(ED);
bp->reversal->family_specific = STORE_POINTER_explicit_bp_data(ED);
ED->equiv_data = NULL;
ED->i6_storage_property = NULL;
ED->form_of_relation = Relation_OtoO;
ED->v2v_bitmap_iname = NULL;
return bp;
}
property *Relations::Explicit::get_i6_storage_property(binary_predicate *bp) {
if (bp->relation_family != explicit_bp_family) return NULL;
explicit_bp_data *ED = RETRIEVE_POINTER_explicit_bp_data(bp->family_specific);
return ED->i6_storage_property;
}
int Relations::Explicit::get_form_of_relation(binary_predicate *bp) {
if (bp->relation_family != explicit_bp_family) return Relation_Implicit;
explicit_bp_data *ED = RETRIEVE_POINTER_explicit_bp_data(bp->family_specific);
return ED->form_of_relation;
}
char *Relations::Explicit::form_to_text(binary_predicate *bp) {
switch(Relations::Explicit::get_form_of_relation(bp)) {
case Relation_OtoO: return "Relation_OtoO";
case Relation_OtoV: return "Relation_OtoV";
case Relation_VtoO: return "Relation_VtoO";
case Relation_VtoV: return "Relation_VtoV";
case Relation_Sym_OtoO: return "Relation_Sym_OtoO";
case Relation_Sym_VtoV: return "Relation_Sym_VtoV";
case Relation_Equiv: return "Relation_Equiv";
default: return "Relation_Implicit";
}
}
@ They typecheck by the default rule only:
@ -50,13 +138,13 @@ int Relations::Explicit::REL_assert(bp_family *self, binary_predicate *bp,
if ((infs0 == NULL) || (infs1 == NULL)) @<Reject relationship with nothing@>;
if (Relations::Explicit::allow_arbitrary_assertions(bp)) {
World::Inferences::draw_relation(bp, infs0, infs1);
if ((BinaryPredicates::get_form_of_relation(bp) == Relation_Sym_VtoV) && (infs0 != infs1))
if ((Relations::Explicit::get_form_of_relation(bp) == Relation_Sym_VtoV) && (infs0 != infs1))
World::Inferences::draw_relation(bp, infs1, infs0);
return TRUE;
}
if (BinaryPredicates::is_explicit_with_runtime_storage(bp)) {
if (Relations::Explicit::is_explicit_with_runtime_storage(bp)) {
Relations::Explicit::infer_property_based_relation(bp, infs1, infs0);
if ((BinaryPredicates::get_form_of_relation(bp) == Relation_Sym_OtoO) && (infs0 != infs1))
if ((Relations::Explicit::get_form_of_relation(bp) == Relation_Sym_OtoO) && (infs0 != infs1))
Relations::Explicit::infer_property_based_relation(bp, infs0, infs1);
return TRUE;
}
@ -64,13 +152,6 @@ int Relations::Explicit::REL_assert(bp_family *self, binary_predicate *bp,
return FALSE;
}
int Relations::Explicit::allow_arbitrary_assertions(binary_predicate *bp) {
if (bp->form_of_relation == Relation_Equiv) return TRUE;
if (bp->form_of_relation == Relation_VtoV) return TRUE;
if (bp->form_of_relation == Relation_Sym_VtoV) return TRUE;
return FALSE;
}
@ This is the point at which non-assertable relations are thrown out.
@<Reject non-assertable relations@> =
@ -102,12 +183,12 @@ both $R(x,y)$ and $R(x,z)$ will result in contradictory property value
inferences for $y$ and $z$.
=
void Relations::Explicit::infer_property_based_relation(binary_predicate *relation,
void Relations::Explicit::infer_property_based_relation(binary_predicate *bp,
inference_subject *infs0, inference_subject *infs1) {
if (BinaryPredicates::get_form_of_relation(relation) == Relation_VtoO) {
if (Relations::Explicit::get_form_of_relation(bp) == Relation_VtoO) {
inference_subject *swap=infs0; infs0=infs1; infs1=swap;
}
property *prn = BinaryPredicates::get_i6_storage_property(relation);
property *prn = Relations::Explicit::get_i6_storage_property(bp);
World::Inferences::draw_property(infs0, prn, InferenceSubjects::as_constant(infs1));
}
@ -125,7 +206,7 @@ int Relations::Explicit::REL_describe_for_problems(bp_family *self, OUTPUT_STREA
return FALSE;
}
void Relations::Explicit::REL_describe_briefly(bp_family *self, OUTPUT_STREAM, binary_predicate *bp) {
switch (bp->form_of_relation) {
switch (Relations::Explicit::get_form_of_relation(bp)) {
case Relation_OtoO: WRITE("one-to-one"); break;
case Relation_OtoV: WRITE("one-to-various"); break;
case Relation_VtoO: WRITE("various-to-one"); break;
@ -133,6 +214,8 @@ void Relations::Explicit::REL_describe_briefly(bp_family *self, OUTPUT_STREAM, b
case Relation_Sym_OtoO: WRITE("one-to-another"); break;
case Relation_Sym_VtoV: WRITE("various-to-each-other"); break;
case Relation_Equiv: WRITE("in groups"); break;
case Relation_ByRoutine: WRITE("defined"); break;
}
}
void Relations::Explicit::REL_br_describe_briefly(bp_family *self, OUTPUT_STREAM, binary_predicate *bp) {
WRITE("defined");
}

View file

@ -875,10 +875,10 @@ kind *PL::Parsing::Tokens::compile(gpr_kit *gprk, parse_node *pn, int code_mode,
return K_object;
}
} else {
property *prn = BinaryPredicates::get_i6_storage_property(bp);
property *prn = Relations::Explicit::get_i6_storage_property(bp);
reverse = FALSE;
if (BinaryPredicates::is_the_wrong_way_round(bp)) reverse = TRUE;
if (BinaryPredicates::get_form_of_relation(bp) == Relation_VtoO) {
if (Relations::Explicit::get_form_of_relation(bp) == Relation_VtoO) {
if (reverse) reverse = FALSE; else reverse = TRUE;
}
if (prn) {

View file

@ -22,7 +22,7 @@ void KnowledgeAboutRelations::SUBJ_complete_model(inference_subject *infs) {
binary_predicate *bp = InferenceSubjects::as_bp(infs);
if (BinaryPredicates::store_dynamically(bp)) return; /* handled at run-time instead */
if ((BinaryPredicates::get_form_of_relation(bp) == Relation_Equiv) && (bp->right_way_round)) {
if ((Relations::Explicit::get_form_of_relation(bp) == Relation_Equiv) && (bp->right_way_round)) {
RTRelations::equivalence_relation_make_singleton_partitions(bp, domain_size);
inference *i;
POSITIVE_KNOWLEDGE_LOOP(i, BinaryPredicates::as_subject(bp), ARBITRARY_RELATION_INF) {
@ -37,13 +37,10 @@ void KnowledgeAboutRelations::SUBJ_complete_model(inference_subject *infs) {
void KnowledgeAboutRelations::SUBJ_check_model(inference_subject *infs) {
binary_predicate *bp = InferenceSubjects::as_bp(infs);
if ((bp->right_way_round) &&
((bp->form_of_relation == Relation_OtoO) ||
(bp->form_of_relation == Relation_Sym_OtoO)))
int f = Relations::Explicit::get_form_of_relation(bp);
if ((bp->right_way_round) && ((f == Relation_OtoO) || (f == Relation_Sym_OtoO)))
KnowledgeAboutRelations::check_OtoO_relation(bp);
if ((bp->right_way_round) &&
((bp->form_of_relation == Relation_OtoV) ||
(bp->form_of_relation == Relation_VtoO)))
if ((bp->right_way_round) && ((f == Relation_OtoV) || (f == Relation_VtoO)))
KnowledgeAboutRelations::check_OtoV_relation(bp);
}
@ -77,8 +74,8 @@ void KnowledgeAboutRelations::SUBJ_compile(inference_subject *infs) {
}
Routines::end(save);
} else {
if ((bp->form_of_relation == Relation_VtoV) ||
(bp->form_of_relation == Relation_Sym_VtoV))
int f = Relations::Explicit::get_form_of_relation(bp);
if ((f == Relation_VtoV) || (f == Relation_Sym_VtoV))
RTRelations::compile_vtov_storage(bp);
}
}
@ -102,7 +99,7 @@ void KnowledgeAboutRelations::check_OtoO_relation(binary_predicate *bp) {
inference **right_second = (inference **)
(Memory::calloc(nc, sizeof(inference *), OBJECT_COMPILATION_MREASON));
property *prn = BinaryPredicates::get_i6_storage_property(bp);
property *prn = Relations::Explicit::get_i6_storage_property(bp);
inference_subject *infs;
LOOP_OVER(infs, inference_subject) right_counts[infs->allocation_id] = 0;
@ -187,7 +184,7 @@ void KnowledgeAboutRelations::check_OtoV_relation(binary_predicate *bp) {
}
}
if (bp->form_of_relation == Relation_VtoO) {
if (Relations::Explicit::get_form_of_relation(bp) == Relation_VtoO) {
LOOP_OVER(infs, inference_subject) {
if (left_counts[infs->allocation_id] >= 2) {
StandardProblems::infs_contradiction_problem(_p_(PM_RelationVtoOContradiction),

View file

@ -2,6 +2,17 @@
Relations need both storage and support code at runtime.
@h The handler.
=
inter_name *RTRelations::handler_iname(binary_predicate *bp) {
if (bp->handler_iname == NULL) {
package_request *R = BinaryPredicates::package(bp);
bp->handler_iname = Hierarchy::make_iname_in(HANDLER_FN_HL, R);
}
return bp->handler_iname;
}
@h Relation records.
The template layer needs to be able to perform certain actions on any given
relation, regardless of its mode of storage (if any). We abstract all of this
@ -99,7 +110,7 @@ void RTRelations::compile_relation_records(void) {
DISCARD_TEXT(A)
Produce::up(Emit::tree());
switch(bp->form_of_relation) {
switch(Relations::Explicit::get_form_of_relation(bp)) {
case Relation_OtoO:
Produce::inv_call_iname(Emit::tree(), Hierarchy::find(RELATION_TY_OTOOADJECTIVE_HL));
Produce::down(Emit::tree());
@ -196,7 +207,7 @@ void RTRelations::compile_relation_records(void) {
Emit::array_iname_entry(Hierarchy::find(RELS_LOOKUP_ALL_X_HL));
Emit::array_iname_entry(RELS_LIST_iname);
}
switch(dbp->form_of_relation) {
switch(Relations::Explicit::get_form_of_relation(dbp)) {
case Relation_Implicit:
if ((minimal == FALSE) && (BinaryPredicates::can_be_made_true_at_runtime(dbp))) {
Emit::array_iname_entry(RELS_ASSERT_TRUE_iname);
@ -215,7 +226,6 @@ void RTRelations::compile_relation_records(void) {
case Relation_Equiv: Emit::array_iname_entry(RELS_EQUIVALENCE_iname); @<Throw in the full suite@>; break;
case Relation_VtoV: @<Throw in the full suite@>; break;
case Relation_Sym_VtoV: Emit::array_iname_entry(RELS_SYMMETRIC_iname); @<Throw in the full suite@>; break;
case Relation_ByRoutine: break;
default:
internal_error("Binary predicate with unknown structural type");
}
@ -233,29 +243,32 @@ void RTRelations::compile_relation_records(void) {
@<Write the storage field of the relation metadata array@> =
binary_predicate *dbp = bp;
if (bp->right_way_round == FALSE) dbp = bp->reversal;
switch(dbp->form_of_relation) {
case Relation_Implicit: /* Field 0 is not used */
Emit::array_numeric_entry(0); /* which is not the same as |NULL|, unlike in C */
break;
case Relation_OtoO:
case Relation_OtoV:
case Relation_VtoO:
case Relation_Sym_OtoO:
case Relation_Equiv: /* Field 0 is the property used for run-time storage */
Emit::array_iname_entry(Properties::iname(dbp->i6_storage_property));
break;
case Relation_VtoV:
case Relation_Sym_VtoV: /* Field 0 is the bitmap array used for run-time storage */
if (dbp->v2v_bitmap_iname == NULL) internal_error("gaah");
Emit::array_iname_entry(dbp->v2v_bitmap_iname);
break;
case Relation_ByRoutine: { /* Field 0 is the routine used to test the relation */
by_routine_bp_data *D = RETRIEVE_POINTER_by_routine_bp_data(dbp->family_specific);
Emit::array_iname_entry(D->bp_by_routine_iname);
break;
if (bp->relation_family == by_routine_bp_family) {
/* Field 0 is the routine used to test the relation */
by_routine_bp_data *D = RETRIEVE_POINTER_by_routine_bp_data(dbp->family_specific);
Emit::array_iname_entry(D->bp_by_routine_iname);
} else {
switch(Relations::Explicit::get_form_of_relation(dbp)) {
case Relation_Implicit: /* Field 0 is not used */
Emit::array_numeric_entry(0); /* which is not the same as |NULL|, unlike in C */
break;
case Relation_OtoO:
case Relation_OtoV:
case Relation_VtoO:
case Relation_Sym_OtoO:
case Relation_Equiv: /* Field 0 is the property used for run-time storage */
Emit::array_iname_entry(
Properties::iname(Relations::Explicit::get_i6_storage_property(dbp)));
break;
case Relation_VtoV:
case Relation_Sym_VtoV: {
/* Field 0 is the bitmap array used for run-time storage */
explicit_bp_data *ED = RETRIEVE_POINTER_explicit_bp_data(bp->family_specific);
if (ED->v2v_bitmap_iname == NULL) internal_error("gaah");
Emit::array_iname_entry(ED->v2v_bitmap_iname);
break;
}
}
default:
internal_error("Binary predicate with unknown structural type");
}
@<Write the kind field of the relation record@> =
@ -263,7 +276,7 @@ void RTRelations::compile_relation_records(void) {
@<Write the description field of the relation record@> =
TEMPORARY_TEXT(DF)
if (bp->form_of_relation == Relation_Implicit)
if (Relations::Explicit::get_form_of_relation(bp) == Relation_Implicit)
WRITE_TO(DF, "%S", BinaryPredicates::get_log_name(bp));
else CompiledText::from_text(DF, Node::get_text(bp->bp_created_at));
Emit::array_text_entry(DF);
@ -277,7 +290,7 @@ void RTRelations::compile_relation_records(void) {
binary_predicate *dbp = bp;
if (bp->right_way_round == FALSE) { X = I"Y"; Y = I"X"; dbp = bp->reversal; }
handler = BinaryPredicates::handler_iname(bp);
handler = RTRelations::handler_iname(bp);
packaging_state save = Routines::begin(handler);
inter_symbol *rr_s = LocalVariables::add_named_call_as_symbol(I"rr");
inter_symbol *task_s = LocalVariables::add_named_call_as_symbol(I"task");
@ -366,7 +379,7 @@ void RTRelations::compile_relation_records(void) {
}
inter_name *shower = NULL;
int par = 0;
switch(dbp->form_of_relation) {
switch(Relations::Explicit::get_form_of_relation(dbp)) {
case Relation_OtoO: shower = Hierarchy::find(RELATION_RSHOWOTOO_HL); break;
case Relation_OtoV: shower = Hierarchy::find(RELATION_RSHOWOTOO_HL); break;
case Relation_VtoO: shower = Hierarchy::find(RELATION_SHOWOTOO_HL); break;
@ -387,7 +400,7 @@ void RTRelations::compile_relation_records(void) {
}
inter_name *emptier = NULL;
par = 0;
switch(dbp->form_of_relation) {
switch(Relations::Explicit::get_form_of_relation(dbp)) {
case Relation_OtoO: emptier = Hierarchy::find(RELATION_EMPTYOTOO_HL); break;
case Relation_OtoV: emptier = Hierarchy::find(RELATION_EMPTYOTOO_HL); break;
case Relation_VtoO: emptier = Hierarchy::find(RELATION_EMPTYOTOO_HL); break;
@ -409,7 +422,7 @@ void RTRelations::compile_relation_records(void) {
inter_name *router = NULL;
int id_flag = TRUE;
int follow = FALSE;
switch(dbp->form_of_relation) {
switch(Relations::Explicit::get_form_of_relation(dbp)) {
case Relation_OtoO: router = Hierarchy::find(OTOVRELROUTETO_HL); follow = TRUE; break;
case Relation_OtoV: router = Hierarchy::find(OTOVRELROUTETO_HL); follow = TRUE; break;
case Relation_VtoO: router = Hierarchy::find(VTOORELROUTETO_HL); follow = TRUE; break;
@ -697,7 +710,7 @@ void RTRelations::compile_relation_records(void) {
Produce::down(Emit::tree());
Produce::inv_primitive(Emit::tree(), INDIRECT4_BIP);
Produce::down(Emit::tree());
Produce::val_iname(Emit::tree(), K_value, BinaryPredicates::handler_iname(dbp));
Produce::val_iname(Emit::tree(), K_value, RTRelations::handler_iname(dbp));
Produce::val_symbol(Emit::tree(), K_value, rr_s);
Produce::val_iname(Emit::tree(), K_value, Hierarchy::find(RELS_TEST_HL));
if (t == 0) {
@ -797,7 +810,7 @@ void RTRelations::compile_relation_records(void) {
Produce::down(Emit::tree());
Produce::inv_primitive(Emit::tree(), INDIRECT4_BIP);
Produce::down(Emit::tree());
Produce::val_iname(Emit::tree(), K_value, BinaryPredicates::handler_iname(dbp));
Produce::val_iname(Emit::tree(), K_value, RTRelations::handler_iname(dbp));
Produce::val_symbol(Emit::tree(), K_value, rr_s);
Produce::val_iname(Emit::tree(), K_value, Hierarchy::find(RELS_TEST_HL));
if (t == 0) {
@ -840,7 +853,7 @@ void RTRelations::compile_relation_records(void) {
Produce::down(Emit::tree());
Produce::inv_primitive(Emit::tree(), INDIRECT4_BIP);
Produce::down(Emit::tree());
Produce::val_iname(Emit::tree(), K_value, BinaryPredicates::handler_iname(dbp));
Produce::val_iname(Emit::tree(), K_value, RTRelations::handler_iname(dbp));
Produce::val_symbol(Emit::tree(), K_value, rr_s);
Produce::val_iname(Emit::tree(), K_value, Hierarchy::find(RELS_TEST_HL));
Produce::val_symbol(Emit::tree(), K_value, Z1_s);
@ -990,8 +1003,9 @@ void RTRelations::compile_vtov_storage(binary_predicate *bp) {
@<Allocate a zeroed-out memory cache for relations with fast route-finding@>;
package_request *P = BinaryPredicates::package(bp);
bp->v2v_bitmap_iname = Hierarchy::make_iname_in(BITMAP_HL, P);
packaging_state save = Emit::named_array_begin(bp->v2v_bitmap_iname, K_value);
explicit_bp_data *ED = RETRIEVE_POINTER_explicit_bp_data(bp->family_specific);
ED->v2v_bitmap_iname = Hierarchy::make_iname_in(BITMAP_HL, P);
packaging_state save = Emit::named_array_begin(ED->v2v_bitmap_iname, K_value);
@<Compile header information in the V-to-V structure@>;
if ((left_count > 0) && (right_count > 0))
@ -1241,12 +1255,12 @@ $$ p(P) = 12, p(S) = 23, p(R) = 25, p(D) = 26, p(O) = 31. $$
=
void RTRelations::equivalence_relation_make_singleton_partitions(binary_predicate *bp,
int domain_size) {
if (bp->form_of_relation != Relation_Equiv)
if (Relations::Explicit::get_form_of_relation(bp) != Relation_Equiv)
internal_error("attempt to make partition for a non-equivalence relation");
equivalence_bp_data *D = RETRIEVE_POINTER_equivalence_bp_data(bp->family_specific);
explicit_bp_data *D = RETRIEVE_POINTER_explicit_bp_data(bp->family_specific);
int *partition_array = Memory::calloc(domain_size, sizeof(int), PARTITION_MREASON);
for (int i=0; i<domain_size; i++) partition_array[i] = i+1;
D->equivalence_partition = partition_array;
D->equiv_data->equivalence_partition = partition_array;
}
@ The A-parser has meanwhile been reading in facts about the helping relation:
@ -1282,11 +1296,11 @@ users to set up these relations in a stylistically poor way.
=
void RTRelations::equivalence_relation_merge_classes(binary_predicate *bp,
int domain_size, int ix1, int ix2) {
if (bp->form_of_relation != Relation_Equiv)
if (Relations::Explicit::get_form_of_relation(bp) != Relation_Equiv)
internal_error("attempt to merge classes for a non-equivalence relation");
equivalence_bp_data *D = RETRIEVE_POINTER_equivalence_bp_data(bp->family_specific);
explicit_bp_data *D = RETRIEVE_POINTER_explicit_bp_data(bp->family_specific);
if (bp->right_way_round == FALSE) bp = bp->reversal;
int *partition_array = D->equivalence_partition;;
int *partition_array = D->equiv_data->equivalence_partition;;
if (partition_array == NULL)
internal_error("attempt to use null equivalence partition array");
int little, big; /* or, The Fairies' Parliament */
@ -1325,17 +1339,18 @@ void RTRelations::equivalence_relation_add_properties(binary_predicate *bp) {
@<Set the partition number property@> =
parse_node *val = Rvalues::from_int(
RTRelations::equivalence_relation_get_class(bp, infs->allocation_id), EMPTY_WORDING);
Properties::Valued::assert(bp->i6_storage_property, infs, val, CERTAIN_CE);
Properties::Valued::assert(Relations::Explicit::get_i6_storage_property(bp),
infs, val, CERTAIN_CE);
@ Where:
=
int RTRelations::equivalence_relation_get_class(binary_predicate *bp, int ix) {
if (bp->form_of_relation != Relation_Equiv)
if (Relations::Explicit::get_form_of_relation(bp) != Relation_Equiv)
internal_error("attempt to merge classes for a non-equivalence relation");
if (bp->right_way_round == FALSE) bp = bp->reversal;
equivalence_bp_data *D = RETRIEVE_POINTER_equivalence_bp_data(bp->family_specific);
int *partition_array = D->equivalence_partition;;
explicit_bp_data *D = RETRIEVE_POINTER_explicit_bp_data(bp->family_specific);
int *partition_array = D->equiv_data->equivalence_partition;;
if (partition_array == NULL)
internal_error("attempt to use null equivalence partition array");
return partition_array[ix];
@ -1379,7 +1394,7 @@ void RTRelations::compile_defined_relations(void) {
RTRelations::compile_relation_records();
binary_predicate *bp;
LOOP_OVER(bp, binary_predicate)
if ((bp->form_of_relation == Relation_ByRoutine) && (bp->right_way_round)) {
if ((bp->relation_family == by_routine_bp_family) && (bp->right_way_round)) {
current_sentence = bp->bp_created_at;
TEMPORARY_TEXT(C)
WRITE_TO(C, "Routine to decide if %S(t_0, t_1)", BinaryPredicates::get_log_name(bp));

View file

@ -64,7 +64,6 @@ and "inside" the wrong way round.
=
typedef struct binary_predicate {
struct bp_family *relation_family;
int form_of_relation; /* one of the |Relation_*| constants defined below */
struct word_assemblage relation_name; /* (which might have length 0) */
struct parse_node *bp_created_at; /* where declared in the source text */
struct text_stream *debugging_log_name; /* used when printing propositions to the debug log */
@ -73,7 +72,6 @@ typedef struct binary_predicate {
struct package_request *bp_package;
struct inter_name *bp_iname; /* when referred to as a constant */
struct inter_name *handler_iname;
struct inter_name *v2v_bitmap_iname; /* only relevant for some relations */
struct inter_name *initialiser_iname; /* if stored in dynamically allocated memory */
#endif
@ -91,10 +89,6 @@ typedef struct binary_predicate {
/* for optimisation of run-time code: */
int dynamic_memory; /* stored in dynamically allocated memory */
#ifdef CORE_MODULE
struct property *i6_storage_property; /* provides run-time storage */
#endif
struct kind *storage_kindXXX; /* kind of property owner */
int allow_function_simplification; /* allow Inform to make use of any $f_i$ functions? */
int fast_route_finding; /* use fast rather than slow route-finding algorithm? */
char *loop_parent_optimisation_proviso; /* if not NULL, optimise loops using object tree */
@ -107,24 +101,6 @@ typedef struct binary_predicate {
CLASS_DEFINITION
} binary_predicate;
@ The following constants are used to identify the "form" of a BP (in that the
|form_of_relation| field of any BP always equals one of these and never changes).
These constant names (and values) exactly match a set of constants compiled
into every I6 program created by Inform, so they can be used freely both in
the Inform source code and also in the I6 template layer.
@d Relation_Implicit -1 /* all implicit BPs have this form, and all others are explicit */
@d Relation_OtoO 1 /* one to one: "R relates one K to one K" */
@d Relation_OtoV 2 /* one to various: "R relates one K to various K" */
@d Relation_VtoO 3 /* various to one: "R relates various K to one K" */
@d Relation_VtoV 4 /* various to various: "R relates various K to various K" */
@d Relation_Sym_OtoO 5 /* symmetric one to one: "R relates one K to another" */
@d Relation_Sym_VtoV 6 /* symmetric various to various: "R relates K to each other" */
@d Relation_Equiv 7 /* equivalence relation: "R relates K to each other in groups" */
@d Relation_ByRoutine 8 /* relation tested by a routine: "R relates K to L when (some condition)" */
@ That completes the catalogue of the one-off cases, and we can move on
to the five families of implicit relations which correspond to other
structures in the source text.
@ -257,27 +233,6 @@ binary_predicate *BinaryPredicates::make_pair(bp_family *family,
return bp;
}
@ When the source text declares new relations, it turns out to be convenient
to make their BPs in a two-stage process: to make sketchy, mostly-blank BP
structures for them early on -- but getting their names registered -- and
then fill in the correct details later. This is where such sketchy pairs are
made:
=
binary_predicate *BinaryPredicates::make_pair_sketchily(bp_family *family,
word_assemblage wa, int f) {
TEMPORARY_TEXT(relname)
WRITE_TO(relname, "%V", WordAssemblages::first_word(&wa));
binary_predicate *bp =
BinaryPredicates::make_pair(family,
BPTerms::new(NULL), BPTerms::new(NULL),
relname, NULL, NULL, NULL, wa);
DISCARD_TEXT(relname)
bp->form_of_relation = f;
bp->reversal->form_of_relation = f;
return bp;
}
@h BP construction.
The following routine should only ever be called from the two above: provided
we stick to that, we ensure the golden rule that {\it every BP has a reversal
@ -296,7 +251,6 @@ binary_predicate *BinaryPredicates::make_single(bp_family *family,
i6_schema *mtf, i6_schema *tf, word_assemblage rn) {
binary_predicate *bp = CREATE(binary_predicate);
bp->relation_family = family;
bp->form_of_relation = Relation_Implicit;
bp->relation_name = rn;
bp->bp_created_at = current_sentence;
bp->debugging_log_name = Str::duplicate(name);
@ -305,7 +259,6 @@ binary_predicate *BinaryPredicates::make_single(bp_family *family,
bp->bp_package = NULL;
bp->bp_iname = NULL;
bp->handler_iname = NULL;
bp->v2v_bitmap_iname = NULL;
bp->initialiser_iname = NULL;
#endif
@ -331,10 +284,6 @@ binary_predicate *BinaryPredicates::make_single(bp_family *family,
/* for optimisation of run-time code */
bp->dynamic_memory = FALSE;
#ifdef CORE_MODULE
bp->i6_storage_property = NULL;
#endif
// bp->storage_kind = NULL;
bp->allow_function_simplification = TRUE;
bp->fast_route_finding = FALSE;
bp->loop_parent_optimisation_proviso = NULL;
@ -385,18 +334,20 @@ void BinaryPredicates::log_term_details(bp_term_details *bptd, int i) {
}
void BinaryPredicates::log(binary_predicate *bp) {
int i;
if (bp == NULL) { LOG("<null-BP>\n"); return; }
#ifdef CORE_MODULE
LOG("BP%d <%S> - %s way round - %s\n",
bp->allocation_id, bp->debugging_log_name, bp->right_way_round?"right":"wrong",
BinaryPredicates::form_to_text(bp));
for (i=0; i<2; i++) BinaryPredicates::log_term_details(&bp->term_details[i], i);
Relations::Explicit::form_to_text(bp));
#endif
#ifndef CORE_MODULE
LOG("BP%d <%S> - %s way round\n",
bp->allocation_id, bp->debugging_log_name, bp->right_way_round?"right":"wrong");
#endif
for (int i=0; i<2; i++) BinaryPredicates::log_term_details(&bp->term_details[i], i);
LOG(" test: $i\n", bp->task_functions[TEST_ATOM_TASK]);
LOG(" make true: $i\n", bp->task_functions[NOW_ATOM_TRUE_TASK]);
LOG(" make false: $i\n", bp->task_functions[NOW_ATOM_FALSE_TASK]);
#ifdef CORE_MODULE
LOG(" storage property: $Y\n", bp->i6_storage_property);
#endif
}
@h Relation names.
@ -423,30 +374,6 @@ text_stream *BinaryPredicates::get_log_name(binary_predicate *bp) {
@h Miscellaneous access routines.
=
int BinaryPredicates::get_form_of_relation(binary_predicate *bp) {
return bp->form_of_relation;
}
int BinaryPredicates::is_explicit_with_runtime_storage(binary_predicate *bp) {
if (bp->right_way_round == FALSE) bp = bp->reversal;
if (bp->form_of_relation == Relation_Implicit) return FALSE;
if (bp->form_of_relation == Relation_ByRoutine) return FALSE;
return TRUE;
}
char *BinaryPredicates::form_to_text(binary_predicate *bp) {
switch(bp->form_of_relation) {
case Relation_Implicit: return "Relation_Implicit";
case Relation_OtoO: return "Relation_OtoO";
case Relation_OtoV: return "Relation_OtoV";
case Relation_VtoO: return "Relation_VtoO";
case Relation_VtoV: return "Relation_VtoV";
case Relation_Sym_OtoO: return "Relation_Sym_OtoO";
case Relation_Sym_VtoV: return "Relation_Sym_VtoV";
case Relation_Equiv: return "Relation_Equiv";
case Relation_ByRoutine: return "Relation_ByRoutine";
default: return "formless-BP";
}
}
parse_node *BinaryPredicates::get_bp_created_at(binary_predicate *bp) {
return bp->bp_created_at;
}
@ -508,11 +435,6 @@ TERM_DOMAIN_CALCULUS_TYPE *BinaryPredicates::as_subject(binary_predicate *bp) {
@ For use when optimising code.
=
#ifdef CORE_MODULE
property *BinaryPredicates::get_i6_storage_property(binary_predicate *bp) {
return bp->i6_storage_property;
}
#endif
int BinaryPredicates::allows_function_simplification(binary_predicate *bp) {
return bp->allow_function_simplification;
}