1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-03 07:24:58 +03:00

Introduced adjective meaning families

This commit is contained in:
Graham Nelson 2021-02-13 16:30:19 +00:00
parent dd39e6bd8e
commit 94485a2f75
60 changed files with 1099 additions and 1081 deletions

View file

@ -845,7 +845,7 @@ further sub-cases later.
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">global_pass_state</span><span class="plain-syntax">.</span><span class="element-syntax">pass</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</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">unary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pred</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_predicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">py</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="6-am.html#SP13" class="function-link"><span class="function-syntax">Adjectives::Meanings::has_ENUMERATIVE_meaning</span></a><span class="plain-syntax">(</span><a href="6-tap.html#SP4" class="function-link"><span class="function-syntax">AdjectivalPredicates::to_adjective</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pred</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="6-am.html#SP14" class="function-link"><span class="function-syntax">AdjectiveMeanings::has_ENUMERATIVE_meaning</span></a><span class="plain-syntax">(</span><a href="6-tap.html#SP4" class="function-link"><span class="function-syntax">AdjectivalPredicates::to_adjective</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pred</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">Properties::Valued::obtain</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">px</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Node::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">px</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">down</span><span class="plain-syntax">) == </span><span class="identifier-syntax">WITH_NT</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::Using::assertion_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_EOOwnerMutable</span><span class="plain-syntax">),</span>

View file

@ -190,7 +190,7 @@ is to store them and sit on them.
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">unary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pred</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_predicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">py</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="6-am.html#SP13" class="function-link"><span class="function-syntax">Adjectives::Meanings::has_EORP_meaning</span></a><span class="plain-syntax">(</span><a href="6-tap.html#SP4" class="function-link"><span class="function-syntax">AdjectivalPredicates::to_adjective</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pred</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">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prn</span><span class="plain-syntax"> = </span><a href="6-am.html#SP14" class="function-link"><span class="function-syntax">AdjectiveMeanings::has_EORP_meaning</span></a><span class="plain-syntax">(</span><a href="6-tap.html#SP4" class="function-link"><span class="function-syntax">AdjectivalPredicates::to_adjective</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pred</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">prn</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">StandardProblems::sentence_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_ImplicationValueProperty</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="string-syntax">"that's an implication where the outcome is an adjective other than "</span>
@ -339,7 +339,7 @@ no better a certainty level.
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">IMPLICATIONS</span><span class="plain-syntax">, </span><span class="string-syntax">"$D =&gt; $T (certainty %d; changed state %d)\n"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">imp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">if_spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">imp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">then_pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">imp</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">implied_likelihood</span><span class="plain-syntax">, </span><span class="identifier-syntax">conclusion_state</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">conclusion_prop</span><span class="plain-syntax"> = </span><a href="6-am.html#SP13" class="function-link"><span class="function-syntax">Adjectives::Meanings::has_EORP_meaning</span></a><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">conclusion_prop</span><span class="plain-syntax"> = </span><a href="6-am.html#SP14" class="function-link"><span class="function-syntax">AdjectiveMeanings::has_EORP_meaning</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><a href="6-tap.html#SP4" class="function-link"><span class="function-syntax">AdjectivalPredicates::to_adjective</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pred</span><span class="plain-syntax">), </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="4-imp.html#SP6_1_1" class="named-paragraph-link"><span class="named-paragraph">Check that the conclusion is not impossible</span><span class="named-paragraph-number">6.1.1</span></a></span><span class="plain-syntax">;</span>

View file

@ -206,7 +206,7 @@ though only if it has a positive sense and has a nominal meaning.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">p</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Node::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">) == </span><span class="identifier-syntax">ADJECTIVE_NT</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">unary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pred</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_predicate</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">if</span><span class="plain-syntax"> (</span><a href="6-tap.html#SP4" class="function-link"><span class="function-syntax">AdjectivalPredicates::parity</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pred</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">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">q</span><span class="plain-syntax"> = </span><a href="6-am.html#SP13" class="function-link"><span class="function-syntax">Adjectives::Meanings::has_ENUMERATIVE_meaning</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">q</span><span class="plain-syntax"> = </span><a href="6-am.html#SP14" class="function-link"><span class="function-syntax">AdjectiveMeanings::has_ENUMERATIVE_meaning</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><a href="6-tap.html#SP4" class="function-link"><span class="function-syntax">AdjectivalPredicates::to_adjective</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pred</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">q</span><span class="plain-syntax">) </span><a href="4-rpt.html#SP1" class="function-link"><span class="function-syntax">Refiner::give_spec_to_noun</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">Rvalues::from_instance</span><span class="plain-syntax">(</span><span class="identifier-syntax">q</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> }</span>

File diff suppressed because it is too large Load diff

View file

@ -130,8 +130,8 @@ MathJax = {
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">AdjectivalPredicates::infer_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">up_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">self</span><span class="plain-syntax">, </span><span class="identifier-syntax">unary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">up</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">adjective</span><span class="plain-syntax"> *</span><span class="identifier-syntax">aph</span><span class="plain-syntax"> = </span><a href="6-tap.html#SP4" class="function-link"><span class="function-syntax">AdjectivalPredicates::to_adjective</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">up</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">am</span><span class="plain-syntax"> = </span><a href="6-am.html#SP17" class="function-link"><span class="function-syntax">Adjectives::Meanings::first_meaning</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">aph</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">D</span><span class="plain-syntax"> = </span><a href="6-am.html#SP25" class="function-link"><span class="function-syntax">Adjectives::Meanings::get_domain</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">am</span><span class="plain-syntax"> = </span><a href="6-am.html#SP18" class="function-link"><span class="function-syntax">AdjectiveMeanings::first_meaning</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">aph</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">D</span><span class="plain-syntax"> = </span><a href="6-am.html#SP26" class="function-link"><span class="function-syntax">AdjectiveMeanings::get_domain</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">am</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">D</span><span class="plain-syntax">) *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><span class="identifier-syntax">D</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -139,7 +139,7 @@ MathJax = {
<span class="plain-syntax"> </span><span class="identifier-syntax">pcalc_prop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop</span><span class="plain-syntax">, </span><span class="identifier-syntax">variable_type_assignment</span><span class="plain-syntax"> *</span><span class="identifier-syntax">vta</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="identifier-syntax">adjective</span><span class="plain-syntax"> *</span><span class="identifier-syntax">aph</span><span class="plain-syntax"> = </span><a href="6-tap.html#SP4" class="function-link"><span class="function-syntax">AdjectivalPredicates::to_adjective</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">up</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">Propositions::Checker::kind_of_term</span><span class="plain-syntax">(&amp;(</span><span class="identifier-syntax">prop</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">terms</span><span class="plain-syntax">[0]), </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="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">aph</span><span class="plain-syntax">) &amp;&amp; (</span><a href="6-am.html#SP12" class="function-link"><span class="function-syntax">Adjectives::Meanings::applicable_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">aph</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</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">aph</span><span class="plain-syntax">) &amp;&amp; (</span><a href="6-am.html#SP13" class="function-link"><span class="function-syntax">AdjectiveMeanings::applicable_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">aph</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::get_nominative_singular</span><span class="plain-syntax">(</span><span class="identifier-syntax">aph</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">tck</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">log_to_I6_text</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Adjective '%W' undefined on %u\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</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">Propositions::Checker::problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">UnaryMisapplied_CALCERROR</span><span class="plain-syntax">,</span>
@ -152,7 +152,7 @@ MathJax = {
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>Next, asserting \(adjective(t)\). We know that \(t\) evaluates to a kind
of value over which \(adjective\) is defined, or the proposition would
not have survived type-checking. But only some adjectives can be asserted;
"open" can, but "visible" can't, for instance. <span class="extract"><span class="extract-syntax">Adjectives::Meanings::assert</span></span> returns a
"open" can, but "visible" can't, for instance. <span class="extract"><span class="extract-syntax">AdjectiveMeanings::assert</span></span> returns a
success flag.
</p>
@ -180,15 +180,15 @@ success flag.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">domain_of_definition</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">domain_of_definition</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_kind_of_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">ots</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">ox</span><span class="plain-syntax">) </span><span class="identifier-syntax">found</span><span class="plain-syntax"> = </span><a href="6-am.html#SP14" class="function-link"><span class="function-syntax">Adjectives::Meanings::assert</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">aph</span><span class="plain-syntax">, </span><span class="identifier-syntax">domain_of_definition</span><span class="plain-syntax">, </span><span class="identifier-syntax">ox</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">parity</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">found</span><span class="plain-syntax"> = </span><a href="6-am.html#SP14" class="function-link"><span class="function-syntax">Adjectives::Meanings::assert</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">aph</span><span class="plain-syntax">, </span><span class="identifier-syntax">domain_of_definition</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">ots</span><span class="plain-syntax">, </span><span class="identifier-syntax">parity</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">ox</span><span class="plain-syntax">) </span><span class="identifier-syntax">found</span><span class="plain-syntax"> = </span><a href="6-am.html#SP15" class="function-link"><span class="function-syntax">AdjectiveMeanings::assert</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">aph</span><span class="plain-syntax">, </span><span class="identifier-syntax">domain_of_definition</span><span class="plain-syntax">, </span><span class="identifier-syntax">ox</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">parity</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">found</span><span class="plain-syntax"> = </span><a href="6-am.html#SP15" class="function-link"><span class="function-syntax">AdjectiveMeanings::assert</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">aph</span><span class="plain-syntax">, </span><span class="identifier-syntax">domain_of_definition</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">ots</span><span class="plain-syntax">, </span><span class="identifier-syntax">parity</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">found</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">Assert::issue_couldnt_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">aph</span><span class="plain-syntax">, </span><span class="identifier-syntax">parity</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">AdjectivalPredicates::testable</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">AdjectivalPredicates::testable</span></span>:<br/><a href="6-tap.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">up_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">self</span><span class="plain-syntax">, </span><span class="identifier-syntax">unary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">up</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">adjective</span><span class="plain-syntax"> *</span><span class="identifier-syntax">aph</span><span class="plain-syntax"> = </span><a href="6-tap.html#SP4" class="function-link"><span class="function-syntax">AdjectivalPredicates::to_adjective</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">up</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="6-am.html#SP13" class="function-link"><span class="function-syntax">Adjectives::Meanings::has_EORP_meaning</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">aph</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">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prn</span><span class="plain-syntax"> = </span><a href="6-am.html#SP14" class="function-link"><span class="function-syntax">AdjectiveMeanings::has_EORP_meaning</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">aph</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">prn</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="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>
@ -197,7 +197,7 @@ success flag.
<span class="plain-syntax"> </span><span class="identifier-syntax">TERM_DOMAIN_CALCULUS_TYPE</span><span class="plain-syntax"> *</span><span class="identifier-syntax">about</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">adjective</span><span class="plain-syntax"> *</span><span class="identifier-syntax">aph</span><span class="plain-syntax"> = </span><a href="6-tap.html#SP4" class="function-link"><span class="function-syntax">AdjectivalPredicates::to_adjective</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">up</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">sense</span><span class="plain-syntax"> = </span><a href="6-tap.html#SP4" class="function-link"><span class="function-syntax">AdjectivalPredicates::parity</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">up</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="6-am.html#SP13" class="function-link"><span class="function-syntax">Adjectives::Meanings::has_EORP_meaning</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">aph</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">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prn</span><span class="plain-syntax"> = </span><a href="6-am.html#SP14" class="function-link"><span class="function-syntax">AdjectiveMeanings::has_EORP_meaning</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">aph</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">prn</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">possession_marker</span><span class="plain-syntax"> *</span><span class="identifier-syntax">adj</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Properties::get_possession_marker</span><span class="plain-syntax">(</span><span class="identifier-syntax">prn</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">sense</span><span class="plain-syntax">) {</span>
@ -223,7 +223,7 @@ success flag.
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NOW_ATOM_FALSE_TASK:</span><span class="plain-syntax"> </span><span class="identifier-syntax">atask</span><span class="plain-syntax"> = </span><span class="constant-syntax">NOW_ADJECTIVE_FALSE_TASK</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="identifier-syntax">asch</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">schema</span><span class="plain-syntax"> = </span><a href="6-am.html#SP30" class="function-link"><span class="function-syntax">Adjectives::Meanings::get_i6_schema</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">aph</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">atask</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">asch</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">schema</span><span class="plain-syntax"> = </span><a href="6-am.html#SP31" class="function-link"><span class="function-syntax">AdjectiveMeanings::get_i6_schema</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">aph</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">atask</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>Access:
@ -232,13 +232,13 @@ success flag.
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">adjective</span><span class="plain-syntax"> *</span><span class="function-syntax">AdjectivalPredicates::to_adjective</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">AdjectivalPredicates::to_adjective</span></span>:<br/><a href="6-tap.html#SP2">&#167;2</a>, <a href="6-tap.html#SP3">&#167;3</a><br/>Refine Parse Tree - <a href="4-rpt.html#SP6">&#167;6</a><br/>Assertions - <a href="4-ass.html#SP6_3_13">&#167;6.3.13</a><br/>Implications - <a href="4-imp.html#SP3_2_3">&#167;3.2.3</a>, <a href="4-imp.html#SP6_1">&#167;6.1</a><br/>Calculus Utilities - <a href="6-cu.html#SP8_2">&#167;8.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">unary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">up</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">up</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">up</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">family</span><span class="plain-syntax"> != </span><span class="identifier-syntax">adjectival_up_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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">up</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">family</span><span class="plain-syntax"> != </span><span class="identifier-syntax">adjectival_up_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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Adjectives::from_lcon</span><span class="plain-syntax">(</span><span class="identifier-syntax">up</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">lcon</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">AdjectivalPredicates::parity</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">AdjectivalPredicates::parity</span></span>:<br/><a href="6-tap.html#SP2">&#167;2</a>, <a href="6-tap.html#SP3">&#167;3</a><br/>Refine Parse Tree - <a href="4-rpt.html#SP6">&#167;6</a><br/>Implications - <a href="4-imp.html#SP6_1">&#167;6.1</a><br/>Calculus Utilities - <a href="6-cu.html#SP8_2">&#167;8.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">unary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">up</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">up</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 adjective tested for positivity"</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">up</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">family</span><span class="plain-syntax"> != </span><span class="identifier-syntax">adjectival_up_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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">up</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">family</span><span class="plain-syntax"> != </span><span class="identifier-syntax">adjectival_up_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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Lcon::get_sense</span><span class="plain-syntax">(</span><span class="identifier-syntax">up</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">lcon</span><span class="plain-syntax">) == </span><span class="identifier-syntax">NEGATIVE_SENSE</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>
@ -250,7 +250,7 @@ reverse its sense.
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">AdjectivalPredicates::flip_parity</span><span class="plain-syntax">(</span><span class="identifier-syntax">unary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">up</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">up</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 adjective flipped"</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">up</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">family</span><span class="plain-syntax"> != </span><span class="identifier-syntax">adjectival_up_family</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"non-adjective flipped"</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">up</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">family</span><span class="plain-syntax"> != </span><span class="identifier-syntax">adjectival_up_family</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"non-adjective flipped"</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">Lcon::get_sense</span><span class="plain-syntax">(</span><span class="identifier-syntax">up</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">lcon</span><span class="plain-syntax">) == </span><span class="identifier-syntax">NEGATIVE_SENSE</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">up</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">lcon</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Lcon::set_sense</span><span class="plain-syntax">(</span><span class="identifier-syntax">up</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">lcon</span><span class="plain-syntax">, </span><span class="identifier-syntax">POSITIVE_SENSE</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>

View file

@ -137,7 +137,7 @@ will be called.
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CreationPredicates::is_calling_up_atom</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">CreationPredicates::is_calling_up_atom</span></span>:<br/><a href="6-tcp.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">pcalc_prop</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">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">prop</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">element</span><span class="plain-syntax"> == </span><span class="identifier-syntax">PREDICATE_ATOM</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">prop</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">arity</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">unary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">up</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_unary_predicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">prop</span><span class="plain-syntax">-&gt;</span><span class="identifier-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">up</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">family</span><span class="plain-syntax"> == </span><span class="identifier-syntax">calling_up_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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">up</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">family</span><span class="plain-syntax"> == </span><span class="identifier-syntax">calling_up_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="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>
@ -145,7 +145,7 @@ will be called.
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">CreationPredicates::what_kind_of_calling</span><span class="plain-syntax">(</span><span class="identifier-syntax">pcalc_prop</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">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">prop</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">prop</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">element</span><span class="plain-syntax"> == </span><span class="identifier-syntax">PREDICATE_ATOM</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">prop</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">arity</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">unary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">up</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_unary_predicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">prop</span><span class="plain-syntax">-&gt;</span><span class="identifier-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">up</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">family</span><span class="plain-syntax"> == </span><span class="identifier-syntax">calling_up_family</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">up</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">assert_kind</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">up</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">family</span><span class="plain-syntax"> == </span><span class="identifier-syntax">calling_up_family</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">up</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">assert_kind</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">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -160,7 +160,7 @@ will be called.
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">CreationPredicates::get_calling_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">pcalc_prop</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">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">prop</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">element</span><span class="plain-syntax"> == </span><span class="identifier-syntax">PREDICATE_ATOM</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">prop</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">arity</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">unary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">up</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_unary_predicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">prop</span><span class="plain-syntax">-&gt;</span><span class="identifier-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">up</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">family</span><span class="plain-syntax"> == </span><span class="identifier-syntax">calling_up_family</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">up</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">calling_name</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">up</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">family</span><span class="plain-syntax"> == </span><span class="identifier-syntax">calling_up_family</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">up</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">calling_name</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">EMPTY_WORDING</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -199,7 +199,7 @@ since (alone among binary predicates) it has no distinct reversal.
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">CreationPredicates::what_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">pcalc_prop</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">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">prop</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">prop</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">element</span><span class="plain-syntax"> == </span><span class="identifier-syntax">PREDICATE_ATOM</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">prop</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">arity</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">unary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">up</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_unary_predicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">prop</span><span class="plain-syntax">-&gt;</span><span class="identifier-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">up</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">family</span><span class="plain-syntax"> == </span><span class="identifier-syntax">is_a_kind_up_family</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">up</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">assert_kind</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">up</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">family</span><span class="plain-syntax"> == </span><span class="identifier-syntax">is_a_kind_up_family</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">up</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">assert_kind</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">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>

View file

@ -273,9 +273,9 @@ again.
<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="reserved-syntax">pcalc_term</span><span class="plain-syntax"> </span><span class="function-syntax">Terms::adj_to_noun_conversion</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">Terms::adj_to_noun_conversion</span></span>:<br/>Propositions - <a href="4-prp.html#SP29">&#167;29</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">unary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tr</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">adjective</span><span class="plain-syntax"> *</span><span class="identifier-syntax">aph</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectivalPredicates::to_adjective</span><span class="plain-syntax">(</span><span class="identifier-syntax">tr</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::has_ENUMERATIVE_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">aph</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::has_ENUMERATIVE_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">aph</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">I</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-trm.html#SP4" class="function-link"><span class="function-syntax">Terms::new_constant</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Rvalues::from_instance</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">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::has_EORP_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">aph</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">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::has_EORP_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">aph</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">prn</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="4-trm.html#SP4" class="function-link"><span class="function-syntax">Terms::new_constant</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Rvalues::from_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="reserved-syntax">return</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">(0);</span>
<span class="plain-syntax">}</span>

View file

@ -85,6 +85,7 @@ We begin with <a href="index.html" class="internal">core</a> itself.
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">adjective_iname_holder_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">adjective_meaning_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">adjective_meaning_family_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">application_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">by_routine_bp_data_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">equivalence_bp_data_CLASS</span>
@ -101,6 +102,7 @@ We begin with <a href="index.html" class="internal">core</a> itself.
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="identifier-syntax">adjective_iname_holder</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="identifier-syntax">adjective_meaning_family</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS_ALLOCATED_IN_ARRAYS</span><span class="plain-syntax">(</span><span class="identifier-syntax">application</span><span class="plain-syntax">, </span><span class="constant-syntax">100</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="identifier-syntax">generalisation</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="identifier-syntax">by_routine_bp_data</span><span class="plain-syntax">)</span>

View file

@ -336,7 +336,7 @@ so on. Those absolute basics are made here.
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH_IF</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing_plugin</span><span class="plain-syntax">, </span><span class="identifier-syntax">PL::Parsing::Tokens::Values::time</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH_IF</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing_plugin</span><span class="plain-syntax">, </span><span class="identifier-syntax">PL::Parsing::Tokens::Values::compile_type_gprs</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><span class="identifier-syntax">RTVerbs::ConjugateVerb</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><span class="identifier-syntax">Adjectives::Meanings::agreements</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH</span><span class="plain-syntax">(</span><span class="identifier-syntax">AdjectiveMeanings::agreements</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">debugging</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">BENCH_IF</span><span class="plain-syntax">(</span><span class="identifier-syntax">parsing_plugin</span><span class="plain-syntax">, </span><span class="identifier-syntax">PL::Parsing::TestScripts::write_text</span><span class="plain-syntax">)</span>

View file

@ -909,12 +909,12 @@ problem message for this case is now commented out.
<span class="plain-syntax"> &amp;&amp; (</span><span class="identifier-syntax">AdjectivalPredicates::parity</span><span class="plain-syntax">(</span><span class="identifier-syntax">Propositions::first_unary_predicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">Specifications::to_proposition</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</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">adjective</span><span class="plain-syntax"> *</span><span class="identifier-syntax">aph</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">AdjectivalPredicates::to_adjective</span><span class="plain-syntax">(</span><span class="identifier-syntax">Propositions::first_unary_predicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">Specifications::to_proposition</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</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">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">q</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::has_ENUMERATIVE_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">aph</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">q</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::has_ENUMERATIVE_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">aph</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">q</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Rvalues::from_instance</span><span class="plain-syntax">(</span><span class="identifier-syntax">q</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">goto</span><span class="plain-syntax"> </span><span class="identifier-syntax">RetryValue</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">Adjectives::Meanings::has_EORP_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">aph</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">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::has_EORP_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">aph</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">prn</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">gv_is</span><span class="plain-syntax"> = </span><span class="constant-syntax">GV_IS_PROPERTY_NAME</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">gv_prn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">prn</span><span class="plain-syntax">;</span>

View file

@ -389,7 +389,7 @@ of Inform.
<span class="plain-syntax"> </span><span class="constant-syntax">DEFINITIONAL_PHRASE_EFF</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="3-phr.html#SP11" class="function-link"><span class="function-syntax">Phrases::compile</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">, &amp;</span><span class="identifier-syntax">total_phrases_compiled</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">total_phrases_to_compile</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="plain-syntax"> </span><span class="identifier-syntax">Adjectives::Meanings::compile_support_code</span><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">AdjectiveMeanings::compile_support_code</span><span class="plain-syntax">();</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-cs.html#SP11">&#167;11</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP11_5" class="paragraph-anchor"></a><b>&#167;11.5. </b>As we'll see, it's legal in Inform to define "To..." phrases with vague

View file

@ -147,7 +147,7 @@ earlier invocation list (in what may be another setting entirely).
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::get_modal_verb</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">, </span><span class="identifier-syntax">say_verb_negated_ANNOT</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">Node::get_say_adjective</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Adjectives::Meanings::emit</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_say_adjective</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">AdjectiveMeanings::emit</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_say_adjective</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</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="named-paragraph-container code-font"><a href="6-ci.html#SP2_1_1" class="named-paragraph-link"><span class="named-paragraph">Otherwise, use the standard way to compile an invoked phrase</span><span class="named-paragraph-number">2.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
@ -545,7 +545,7 @@ no subsequent lines are looked at.
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::get_modal_verb</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">, </span><span class="identifier-syntax">say_verb_negated_ANNOT</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">Node::get_say_adjective</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Adjectives::Meanings::emit</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_say_adjective</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">AdjectiveMeanings::emit</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_say_adjective</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</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">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ph</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_phrase_invoked</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">tokens_packet</span><span class="plain-syntax"> </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">;</span>
@ -566,7 +566,7 @@ no subsequent lines are looked at.
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::get_modal_verb</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">, </span><span class="identifier-syntax">say_verb_negated_ANNOT</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">Node::get_say_adjective</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Adjectives::Meanings::emit</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_say_adjective</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">AdjectiveMeanings::emit</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_say_adjective</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</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">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ph</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_phrase_invoked</span><span class="plain-syntax">(</span><span class="identifier-syntax">inv</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">tokens_packet</span><span class="plain-syntax"> </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">;</span>

View file

@ -2273,7 +2273,7 @@ of defined adjectives. So:
<span class="plain-syntax"> </span><span class="identifier-syntax">adjective</span><span class="plain-syntax"> *</span><span class="identifier-syntax">aph</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::parse</span><span class="plain-syntax">(</span><span class="identifier-syntax">LW</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">aph</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">Adjectives::Meanings::write_adjective_test_routine</span><span class="plain-syntax">(</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">aph</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</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">AdjectiveMeanings::write_adjective_test_routine</span><span class="plain-syntax">(</span><span class="identifier-syntax">VH</span><span class="plain-syntax">, </span><span class="identifier-syntax">aph</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">StandardProblems::unlocated_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">BelievedImpossible</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="string-syntax">"You tried to use '(+' and '+)' to expand to the Inform 6 routine "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"address of an adjective, but it was an adjective with no meaning."</span><span class="plain-syntax">);</span>

View file

@ -550,7 +550,7 @@ different contexts. We want to quote all of those.
<span class="plain-syntax"> </span><span class="identifier-syntax">HTML_TAG</span><span class="plain-syntax">(</span><span class="string-syntax">"br"</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">"%d. "</span><span class="plain-syntax">, </span><span class="identifier-syntax">nc</span><span class="plain-syntax">-</span><span class="identifier-syntax">ac</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Adjectives::Meanings::print_to_index</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">am</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">AdjectiveMeanings::print_to_index</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">am</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">ac</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"; "</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-li.html#SP7_11_3_2" class="named-paragraph-link"><span class="named-paragraph">End definition text</span><span class="named-paragraph-number">7.11.3.2</span></a></span><span class="plain-syntax">;</span>

View file

@ -98,6 +98,9 @@ which use this module:
</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">KnowledgeModule::start</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="2-iaa.html#SP1" class="function-link"><span class="function-syntax">InstanceAdjectives::start</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="3-ep.html#SP12" class="function-link"><span class="function-syntax">Properties::EitherOr::start</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="3-ma.html#SP10" class="function-link"><span class="function-syntax">Properties::Measurement::start</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="3-spr.html#SP1" class="function-link"><span class="function-syntax">Properties::SameRelations::start</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="3-spr2.html#SP1" class="function-link"><span class="function-syntax">Properties::SettingRelations::start</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="3-cr.html#SP1" class="function-link"><span class="function-syntax">Properties::ComparativeRelations::start</span></a><span class="plain-syntax">();</span>

View file

@ -85,9 +85,30 @@ or speak of "something blue", whereas "number" is not a coinciding property,
and we would not ordinarily write "the ball is 4".<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup>
</p>
<p class="commentary">These instances make "enumerative adjectives" because they arise from
enumerations such as:
</p>
<blockquote>
<p>The ball can be red, green or blue.</p>
</blockquote>
<ul class="footnotetexts"><li class="footnote" id="fn:1"><p class="inwebfootnote"><sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup> A quirk in English does allow this, implicitly construing number as an
age property, but we don't go there in Inform.
<a href="#fnref:1" title="return to text"> &#x21A9;</a></p></li></ul>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">adjective_meaning_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">enumerative_amf</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> defined by a property like "colour" with named values</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">InstanceAdjectives::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">InstanceAdjectives::start</span></span>:<br/>Knowledge Module - <a href="1-km.html#SP3">&#167;3</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">enumerative_amf</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::new_family</span><span class="plain-syntax">(2);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">enumerative_amf</span><span class="plain-syntax">, </span><span class="identifier-syntax">ASSERT_ADJM_MTID</span><span class="plain-syntax">, </span><a href="2-iaa.html#SP4" class="function-link"><span class="function-syntax">InstanceAdjectives::assert</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">InstanceAdjectives::is_enumerative</span><span class="plain-syntax">(</span><span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">am</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">am</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">am</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">family</span><span class="plain-syntax"> == </span><span class="identifier-syntax">enumerative_amf</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="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>Let's reconstruct the chain of events, shall we? It has been found that an
instance, though a noun, must be used as an adjective: for example, "red".
Inform has run through the permissions for the property ("colour") in
@ -106,7 +127,7 @@ following function: twice with the domain <span class="extract"><span class="ext
</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">InstanceAdjectives::make_adjectival</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">InstanceAdjectives::make_adjectival</span></span>:<br/>Instance Subjects - <a href="4-is2.html#SP1">&#167;1</a><br/>Kind Subjects - <a href="4-ks.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="reserved-syntax">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">InstanceAdjectives::make_adjectival</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">InstanceAdjectives::make_adjectival</span></span>:<br/>Instance Subjects - <a href="4-is2.html#SP1">&#167;1</a><br/>Kind Subjects - <a href="4-ks.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="reserved-syntax">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</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">set</span><span class="plain-syntax">, </span><span class="reserved-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">singleton</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">D</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-iaa.html#SP2_1" class="named-paragraph-link"><span class="named-paragraph">Find the kind domain within which the adjective applies</span><span class="named-paragraph-number">2.1</span></a></span><span class="plain-syntax">;</span>
@ -129,21 +150,21 @@ following function: twice with the domain <span class="extract"><span class="ext
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">NW</span><span class="plain-syntax"> = </span><a href="2-ins.html#SP5" class="function-link"><span class="function-syntax">Instances::get_name</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</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">am</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">ENUMERATIVE_KADJ</span><span class="plain-syntax">, </span><span class="identifier-syntax">STORE_POINTER_instance</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">), </span><span class="identifier-syntax">NW</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_adjective</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::declare</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NW</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">singleton</span><span class="plain-syntax">) </span><span class="identifier-syntax">Adjectives::Meanings::set_domain_from_instance</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">singleton</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">set</span><span class="plain-syntax">) </span><span class="identifier-syntax">Adjectives::Meanings::set_domain_from_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">set</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">am</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">enumerative_amf</span><span class="plain-syntax">, </span><span class="identifier-syntax">STORE_POINTER_instance</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">), </span><span class="identifier-syntax">NW</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_adjective</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::declare</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NW</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">singleton</span><span class="plain-syntax">) </span><span class="identifier-syntax">AdjectiveMeanings::set_domain_from_instance</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">singleton</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">set</span><span class="plain-syntax">) </span><span class="identifier-syntax">AdjectiveMeanings::set_domain_from_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">set</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="2-iaa.html#SP2">&#167;2</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_3" class="paragraph-anchor"></a><b>&#167;2.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Write I6 schemas for asserting and testing this use of the instance</span><span class="named-paragraph-number">2.3</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">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ADJECTIVE_TASK</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">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ADJECTIVE_TASK</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">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"GProperty(%k, *1, %n) == %d"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">D</span><span class="plain-syntax">, </span><a href="3-prp.html#SP26" class="function-link"><span class="function-syntax">Properties::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">), </span><span class="identifier-syntax">I</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">enumeration_index</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ADJECTIVE_TRUE_TASK</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">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ADJECTIVE_TRUE_TASK</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">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"WriteGProperty(%k, *1, %n, %d)"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">D</span><span class="plain-syntax">, </span><a href="3-prp.html#SP26" class="function-link"><span class="function-syntax">Properties::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">), </span><span class="identifier-syntax">I</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">enumeration_index</span><span class="plain-syntax">);</span>
@ -156,18 +177,6 @@ following function: twice with the domain <span class="extract"><span class="ext
<span class="identifier-syntax">adjective</span><span class="plain-syntax"> *</span><span class="function-syntax">InstanceAdjectives::as_adjective</span><span class="plain-syntax">(</span><span class="reserved-syntax">instance</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">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">I</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_adjective</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="function-syntax">InstanceAdjectives::parse</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pn</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">sense</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">DNW</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">CONW</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">CALLW</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>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">InstanceAdjectives::compiling_soon</span><span class="plain-syntax">(</span><span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="reserved-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</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">int</span><span class="plain-syntax"> </span><span class="function-syntax">InstanceAdjectives::compile</span><span class="plain-syntax">(</span><span class="reserved-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">emit_flag</span><span class="plain-syntax">, </span><span class="identifier-syntax">ph_stack_frame</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phsf</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" class="paragraph-anchor"></a><b>&#167;4. </b>Asserting such an adjective simply asserts its property. We refuse to assert
the falseness of such an adjective since it's unclear what to infer from, e.g.,
@ -176,9 +185,10 @@ good basis for choosing which.
</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">InstanceAdjectives::assert</span><span class="plain-syntax">(</span><span class="reserved-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">InstanceAdjectives::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">InstanceAdjectives::assert</span></span>:<br/><a href="2-iaa.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">adjective_meaning_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">f</span><span class="plain-syntax">, </span><span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">am</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_to_assert_on</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val_to_assert_on</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">parity</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">parity</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">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_instance</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">detailed_meaning</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">P</span><span class="plain-syntax"> = </span><a href="3-cp.html#SP5" class="function-link"><span class="function-syntax">Properties::Conditions::get_coinciding_property</span></a><span class="plain-syntax">(</span><a href="2-ins.html#SP10" class="function-link"><span class="function-syntax">Instances::to_kind</span></a><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">P</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">"enumerative adjective on non-property"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-inf.html#SP7" class="function-link"><span class="function-syntax">World::Inferences::draw_property</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">infs_to_assert_on</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="identifier-syntax">Rvalues::from_instance</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">));</span>

View file

@ -114,7 +114,7 @@ possible values these are.)
<span class="plain-syntax"> </span><span class="identifier-syntax">PW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">option</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">adjective</span><span class="plain-syntax"> *</span><span class="identifier-syntax">adj</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::parse</span><span class="plain-syntax">(</span><span class="identifier-syntax">PW</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">adj</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::has_ENUMERATIVE_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">adj</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::has_ENUMERATIVE_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">adj</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">I</span><span class="plain-syntax">)?</span><a href="2-ins.html#SP10" class="function-link"><span class="function-syntax">Instances::to_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</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">common_kind</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">common_kind</span><span class="plain-syntax"> = </span><span class="identifier-syntax">K</span><span class="plain-syntax">;</span>

View file

@ -108,7 +108,7 @@ the previous section.
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Properties::ComparativeRelations::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">Properties::ComparativeRelations::stock</span></span>:<br/><a href="3-cr.html#SP1">&#167;1</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">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">2</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="3-ma.html#SP13" class="function-link"><span class="function-syntax">Properties::Measurement::create_comparatives</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="3-ma.html#SP14" class="function-link"><span class="function-syntax">Properties::Measurement::create_comparatives</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
@ -118,7 +118,7 @@ the previous section.
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">comparative_bp_data</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Properties::ComparativeRelations::initialise</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">Properties::ComparativeRelations::initialise</span></span>:<br/>Measurement Adjectives - <a href="3-ma.html#SP13_2">&#167;13.2</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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Properties::ComparativeRelations::initialise</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">Properties::ComparativeRelations::initialise</span></span>:<br/>Measurement Adjectives - <a href="3-ma.html#SP14_2">&#167;14.2</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">sign</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="plain-syntax"> </span><span class="reserved-syntax">comparative_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">comparative_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">comparison_sign</span><span class="plain-syntax"> = </span><span class="identifier-syntax">sign</span><span class="plain-syntax">; </span><span class="identifier-syntax">D</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">comparative_property</span><span class="plain-syntax"> = </span><span class="identifier-syntax">prn</span><span class="plain-syntax">;</span>

View file

@ -219,7 +219,7 @@ around), but not to break one.
<span class="plain-syntax"> </span><a href="3-ep.html#SP7" class="function-link"><span class="function-syntax">Properties::EitherOr::make_stored_in_negation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">neg</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">property</span><span class="plain-syntax"> *</span><span class="function-syntax">Properties::EitherOr::get_negation</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">Properties::EitherOr::get_negation</span></span>:<br/><a href="3-ep.html#SP15_1">&#167;15.1</a>, <a href="3-ep.html#SP15_2">&#167;15.2</a>, <a href="3-ep.html#SP17">&#167;17</a><br/>Properties - <a href="3-prp.html#SP14">&#167;14</a>, <a href="3-prp.html#SP20">&#167;20</a>, <a href="3-prp.html#SP21_2">&#167;21.2</a>, <a href="3-prp.html#SP22">&#167;22</a>, <a href="3-prp.html#SP25">&#167;25</a>, <a href="3-prp.html#SP26">&#167;26</a><br/>Emit Property Values - <a href="3-epv.html#SP2">&#167;2</a>, <a href="3-epv.html#SP2_1">&#167;2.1</a>, <a href="3-epv.html#SP4">&#167;4</a><br/>Property Permissions - <a href="5-pp.html#SP7">&#167;7</a><br/>Inferences - <a href="5-inf.html#SP12">&#167;12</a>, <a href="5-inf.html#SP14">&#167;14</a>, <a href="5-inf.html#SP15">&#167;15</a>, <a href="5-inf.html#SP17">&#167;17</a><br/>Complete Model World - <a href="5-cmw.html#SP1_2_2">&#167;1.2.2</a></span></button><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="reserved-syntax">property</span><span class="plain-syntax"> *</span><span class="function-syntax">Properties::EitherOr::get_negation</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">Properties::EitherOr::get_negation</span></span>:<br/><a href="3-ep.html#SP13_1">&#167;13.1</a>, <a href="3-ep.html#SP13_2">&#167;13.2</a>, <a href="3-ep.html#SP15">&#167;15</a><br/>Properties - <a href="3-prp.html#SP14">&#167;14</a>, <a href="3-prp.html#SP20">&#167;20</a>, <a href="3-prp.html#SP21_2">&#167;21.2</a>, <a href="3-prp.html#SP22">&#167;22</a>, <a href="3-prp.html#SP25">&#167;25</a>, <a href="3-prp.html#SP26">&#167;26</a><br/>Emit Property Values - <a href="3-epv.html#SP2">&#167;2</a>, <a href="3-epv.html#SP2_1">&#167;2.1</a>, <a href="3-epv.html#SP4">&#167;4</a><br/>Property Permissions - <a href="5-pp.html#SP7">&#167;7</a><br/>Inferences - <a href="5-inf.html#SP12">&#167;12</a>, <a href="5-inf.html#SP14">&#167;14</a>, <a href="5-inf.html#SP15">&#167;15</a>, <a href="5-inf.html#SP17">&#167;17</a><br/>Complete Model World - <a href="5-cmw.html#SP1_2_2">&#167;1.2.2</a></span></button><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="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="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">prn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">either_or</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"non-EO property"</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">prn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">negation</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -227,7 +227,7 @@ around), but not to break one.
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </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">Properties::EitherOr::stored_in_negation</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">Properties::EitherOr::stored_in_negation</span></span>:<br/><a href="3-ep.html#SP15_1">&#167;15.1</a>, <a href="3-ep.html#SP15_2">&#167;15.2</a><br/>Emit Property Values - <a href="3-epv.html#SP2">&#167;2</a>, <a href="3-epv.html#SP2_1">&#167;2.1</a>, <a href="3-epv.html#SP3">&#167;3</a>, <a href="3-epv.html#SP4">&#167;4</a><br/>Inferences - <a href="5-inf.html#SP14">&#167;14</a></span></button><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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Properties::EitherOr::stored_in_negation</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">Properties::EitherOr::stored_in_negation</span></span>:<br/><a href="3-ep.html#SP13_1">&#167;13.1</a>, <a href="3-ep.html#SP13_2">&#167;13.2</a><br/>Emit Property Values - <a href="3-epv.html#SP2">&#167;2</a>, <a href="3-epv.html#SP2_1">&#167;2.1</a>, <a href="3-epv.html#SP3">&#167;3</a>, <a href="3-epv.html#SP4">&#167;4</a><br/>Inferences - <a href="5-inf.html#SP14">&#167;14</a></span></button><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="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="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">prn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">either_or</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"non-EO property"</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">prn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">stored_in_negation</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
@ -321,76 +321,73 @@ change the strings of compiled code here without making a matching change in
</pre>
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>&#167;12. Either/or properties as adjectives. </b>What makes either/or properties linguistically interesting is their use as
adjectives: an open door, a transparent container. Adjectival
meanings arising in this way are of the <span class="extract"><span class="extract-syntax">EORP_KADJ</span></span> kind, and the following
meanings arising in this way are of the <span class="extract"><span class="extract-syntax">either_or_property_amf</span></span> kind, and the following
is called every time an either/or property is created, to create its matching
adjectival meaning:
</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">Properties::EitherOr::create_adjective_from_property</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">Properties::EitherOr::create_adjective_from_property</span></span>:<br/><a href="3-ep.html#SP3">&#167;3</a>, <a href="3-ep.html#SP4">&#167;4</a></span></button><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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</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">adjective_meaning_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">either_or_property_amf</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> defined by an either/or property like "closed"</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Properties::EitherOr::start</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">Properties::EitherOr::start</span></span>:<br/>Knowledge Module - <a href="1-km.html#SP3">&#167;3</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">either_or_property_amf</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::new_family</span><span class="plain-syntax">(1);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">either_or_property_amf</span><span class="plain-syntax">, </span><span class="identifier-syntax">ASSERT_ADJM_MTID</span><span class="plain-syntax">, </span><a href="3-ep.html#SP14" class="function-link"><span class="function-syntax">Properties::EitherOr::ADJ_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">either_or_property_amf</span><span class="plain-syntax">, </span><span class="identifier-syntax">COMPILING_SOON_ADJM_MTID</span><span class="plain-syntax">, </span><a href="3-ep.html#SP13" class="function-link"><span class="function-syntax">Properties::EitherOr::compiling_soon</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">either_or_property_amf</span><span class="plain-syntax">, </span><span class="identifier-syntax">INDEX_ADJM_MTID</span><span class="plain-syntax">, </span><a href="3-ep.html#SP15" class="function-link"><span class="function-syntax">Properties::EitherOr::ADJ_index</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">Properties::EitherOr::is_either_or_adjective</span><span class="plain-syntax">(</span><span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">am</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">am</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">am</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">family</span><span class="plain-syntax"> == </span><span class="identifier-syntax">either_or_property_amf</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>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Properties::EitherOr::create_adjective_from_property</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">Properties::EitherOr::create_adjective_from_property</span></span>:<br/><a href="3-ep.html#SP3">&#167;3</a>, <a href="3-ep.html#SP4">&#167;4</a></span></button><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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</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">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">am</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Adjectives::Meanings::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">EORP_KADJ</span><span class="plain-syntax">, </span><span class="identifier-syntax">STORE_POINTER_property</span><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><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">Adjectives::Meanings::declare</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</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">Adjectives::Meanings::set_domain_from_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</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">prn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">adjective_registered</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::get_aph_from_am</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">AdjectiveMeanings::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">either_or_property_amf</span><span class="plain-syntax">, </span><span class="identifier-syntax">STORE_POINTER_property</span><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><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">AdjectiveMeanings::declare</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</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">AdjectiveMeanings::set_domain_from_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</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">prn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">adjective_registered</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::get_aph_from_am</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">prn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">adjectival_meaning_registered</span><span class="plain-syntax"> = </span><span class="identifier-syntax">am</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">Properties::EitherOr::make_new_adjective_sense_from_property</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">Properties::EitherOr::make_new_adjective_sense_from_property</span></span>:<br/><a href="3-ep.html#SP3">&#167;3</a></span></button><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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Properties::EitherOr::make_new_adjective_sense_from_property</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">Properties::EitherOr::make_new_adjective_sense_from_property</span></span>:<br/><a href="3-ep.html#SP3">&#167;3</a></span></button><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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</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">adjective</span><span class="plain-syntax"> *</span><span class="identifier-syntax">aph</span><span class="plain-syntax"> = </span><span class="identifier-syntax">prn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">adjective_registered</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">Adjectives::Meanings::applicable_to</span><span class="plain-syntax">(</span><span class="identifier-syntax">aph</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>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">AdjectiveMeanings::applicable_to</span><span class="plain-syntax">(</span><span class="identifier-syntax">aph</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>
<span class="plain-syntax"> </span><span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">am</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Adjectives::Meanings::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">EORP_KADJ</span><span class="plain-syntax">, </span><span class="identifier-syntax">STORE_POINTER_property</span><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><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">Adjectives::Meanings::declare</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</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>
<span class="plain-syntax"> </span><span class="identifier-syntax">Adjectives::Meanings::set_domain_from_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</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">AdjectiveMeanings::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">either_or_property_amf</span><span class="plain-syntax">, </span><span class="identifier-syntax">STORE_POINTER_property</span><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><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">AdjectiveMeanings::declare</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</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>
<span class="plain-syntax"> </span><span class="identifier-syntax">AdjectiveMeanings::set_domain_from_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</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. </b>And here are the methods which define <span class="extract"><span class="extract-syntax">EORP</span></span> adjectives. They arise other
than by parsing, as we've seen, so:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="function-syntax">Properties::EitherOr::ADJ_parse</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">q</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">sense</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">DNW</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">CONW</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">CALLW</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>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>&#167;14. </b>Compiling tests or assertions of these adjectives is easy, because it just
means using their schemata in the usual way...
</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">Properties::EitherOr::ADJ_compile</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">emit_flag</span><span class="plain-syntax">, </span><span class="identifier-syntax">ph_stack_frame</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phsf</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="SP15" class="paragraph-anchor"></a><b>&#167;15. </b>...but writing those schemata is not so easy, partly because of the way
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>&#167;13. </b>...but writing those schemata is not so easy, partly because of the way
either/or properties may be paired, partly because of the attribute storage
optimisation applied to some but not all of them.
</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">Properties::EitherOr::ADJ_compiling_soon</span><span class="plain-syntax">(</span><span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">am</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="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">am</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">"Unregistered adjectival either/or property in either/or atom"</span><span class="plain-syntax">);</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Properties::EitherOr::compiling_soon</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">Properties::EitherOr::compiling_soon</span></span>:<br/><a href="3-ep.html#SP12">&#167;12</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">adjective_meaning_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">family</span><span class="plain-syntax">, </span><span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">am</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">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_property</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">detailed_meaning</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="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">"Unregistered adjectival either/or property in either/or atom"</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">Adjectives::Meanings::get_ready_flag</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</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">Adjectives::Meanings::set_ready_flag</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</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">AdjectiveMeanings::get_ready_flag</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</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">AdjectiveMeanings::set_ready_flag</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</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">Adjectives::Meanings::get_domain</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</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">AdjectiveMeanings::get_domain</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</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="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ep.html#SP15_1" class="named-paragraph-link"><span class="named-paragraph">Set the schemata for an either/or property adjective with objects as domain</span><span class="named-paragraph-number">15.1</span></a></span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ep.html#SP13_1" class="named-paragraph-link"><span class="named-paragraph">Set the schemata for an either/or property adjective with objects as domain</span><span class="named-paragraph-number">13.1</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ep.html#SP15_2" class="named-paragraph-link"><span class="named-paragraph">Set the schemata for an either/or property adjective with some other domain</span><span class="named-paragraph-number">15.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ep.html#SP13_2" class="named-paragraph-link"><span class="named-paragraph">Set the schemata for an either/or property adjective with some other domain</span><span class="named-paragraph-number">13.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="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP15_1" class="paragraph-anchor"></a><b>&#167;15.1. </b>The "objects" domain is not really very different, but it's the one used
<p class="commentary firstcommentary"><a id="SP13_1" class="paragraph-anchor"></a><b>&#167;13.1. </b>The "objects" domain is not really very different, but it's the one used
overwhelmingly most often, so we will call the relevant routines directly rather
than accessing them via the unifying routines <span class="extract"><span class="extract-syntax">GProperty</span></span> and <span class="extract"><span class="extract-syntax">WriteGProperty</span></span> &mdash;
which would work just as well, but more slowly.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Set the schemata for an either/or property adjective with objects as domain</span><span class="named-paragraph-number">15.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Set the schemata for an either/or property adjective with objects as domain</span><span class="named-paragraph-number">13.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -398,78 +395,82 @@ which would work just as well, but more slowly.
<span class="plain-syntax"> </span><span class="reserved-syntax">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">neg</span><span class="plain-syntax"> = </span><a href="3-ep.html#SP6" class="function-link"><span class="function-syntax">Properties::EitherOr::get_negation</span></a><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">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax"> = </span><a href="3-prp.html#SP26" class="function-link"><span class="function-syntax">Properties::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">neg</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ADJECTIVE_TASK</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">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ADJECTIVE_TASK</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">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"GetEitherOrProperty(*1, %n) == false"</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ADJECTIVE_TRUE_TASK</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">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ADJECTIVE_TRUE_TASK</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">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"SetEitherOrProperty(*1, %n, true)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ADJECTIVE_FALSE_TASK</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">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ADJECTIVE_FALSE_TASK</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">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"SetEitherOrProperty(*1, %n, false)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</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">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">identifier</span><span class="plain-syntax"> = </span><a href="3-prp.html#SP26" class="function-link"><span class="function-syntax">Properties::iname</span></a><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">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ADJECTIVE_TASK</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">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ADJECTIVE_TASK</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">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"GetEitherOrProperty(*1, %n)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ADJECTIVE_TRUE_TASK</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">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ADJECTIVE_TRUE_TASK</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">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"SetEitherOrProperty(*1, %n, false)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ADJECTIVE_FALSE_TASK</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">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ADJECTIVE_FALSE_TASK</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">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"SetEitherOrProperty(*1, %n, true)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-ep.html#SP15">&#167;15</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP15_2" class="paragraph-anchor"></a><b>&#167;15.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Set the schemata for an either/or property adjective with some other domain</span><span class="named-paragraph-number">15.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-ep.html#SP13">&#167;13</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP13_2" class="paragraph-anchor"></a><b>&#167;13.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Set the schemata for an either/or property adjective with some other domain</span><span class="named-paragraph-number">13.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="3-ep.html#SP7" class="function-link"><span class="function-syntax">Properties::EitherOr::stored_in_negation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prn</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">neg</span><span class="plain-syntax"> = </span><a href="3-ep.html#SP6" class="function-link"><span class="function-syntax">Properties::EitherOr::get_negation</span></a><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">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ADJECTIVE_TASK</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">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ADJECTIVE_TASK</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">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"GProperty(%k, *1, %n) == false"</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="3-prp.html#SP26" class="function-link"><span class="function-syntax">Properties::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">neg</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ADJECTIVE_TRUE_TASK</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">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ADJECTIVE_TRUE_TASK</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">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"WriteGProperty(%k, *1, %n)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="3-prp.html#SP26" class="function-link"><span class="function-syntax">Properties::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">neg</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ADJECTIVE_FALSE_TASK</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">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ADJECTIVE_FALSE_TASK</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">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"WriteGProperty(%k, *1, %n, true)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="3-prp.html#SP26" class="function-link"><span class="function-syntax">Properties::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">neg</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">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ADJECTIVE_TASK</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">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ADJECTIVE_TASK</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">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"GProperty(%k, *1, %n)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="3-prp.html#SP26" class="function-link"><span class="function-syntax">Properties::iname</span></a><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">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ADJECTIVE_TRUE_TASK</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">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ADJECTIVE_TRUE_TASK</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">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"WriteGProperty(%k, *1, %n, true)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="3-prp.html#SP26" class="function-link"><span class="function-syntax">Properties::iname</span></a><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">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ADJECTIVE_FALSE_TASK</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">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ADJECTIVE_FALSE_TASK</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">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"WriteGProperty(%k, *1, %n)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="3-prp.html#SP26" class="function-link"><span class="function-syntax">Properties::iname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-ep.html#SP15">&#167;15</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP16" class="paragraph-anchor"></a><b>&#167;16. </b>To assert an adjective like "open" is to draw an inference about its
<ul class="endnotetexts"><li>This code is used in <a href="3-ep.html#SP13">&#167;13</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>&#167;14. </b>To assert an adjective like "open" is to draw an inference about its
property.
</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">Properties::EitherOr::ADJ_assert</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Properties::EitherOr::ADJ_assert</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">Properties::EitherOr::ADJ_assert</span></span>:<br/><a href="3-ep.html#SP12">&#167;12</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">adjective_meaning_family</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">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">am</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_to_assert_on</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val_to_assert_on</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">parity</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">RETRIEVE_POINTER_property</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">detailed_meaning</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">parity</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><a href="5-inf.html#SP7" class="function-link"><span class="function-syntax">World::Inferences::draw_negated_property</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">infs_to_assert_on</span><span class="plain-syntax">, </span><span class="identifier-syntax">prn</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">else</span><span class="plain-syntax"> </span><a href="5-inf.html#SP7" class="function-link"><span class="function-syntax">World::Inferences::draw_property</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">infs_to_assert_on</span><span class="plain-syntax">, </span><span class="identifier-syntax">prn</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">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP17" class="paragraph-anchor"></a><b>&#167;17. </b>And finally:
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>&#167;15. </b>And finally:
</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">Properties::EitherOr::ADJ_index</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Properties::EitherOr::ADJ_index</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">Properties::EitherOr::ADJ_index</span></span>:<br/><a href="3-ep.html#SP12">&#167;12</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">adjective_meaning_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">f</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">am</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">RETRIEVE_POINTER_property</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">detailed_meaning</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">neg</span><span class="plain-syntax"> = </span><a href="3-ep.html#SP6" class="function-link"><span class="function-syntax">Properties::EitherOr::get_negation</span></a><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">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"either/or property"</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-prp.html#SP13" class="function-link"><span class="function-syntax">Properties::permission_list</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><span class="plain-syntax">)) {</span>

View file

@ -87,7 +87,7 @@ function togglePopup(material_id) {
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7</a></li><li><a href="index.html">knowledge</a></li><li><a href="index.html#3">Chapter 3: Properties</a></li><li><b>Measurement Adjectives</b></li></ul></div>
<p class="purpose">To define adjectives such as large, wide or roomy, which make implicit comparisons of the size of some numerical property, and which (unlike other adjectives) lead to comparative and superlative forms.</p>
<ul class="toc"><li><a href="3-ma.html#SP4">&#167;4. Measurements</a></li><li><a href="3-ma.html#SP9">&#167;9. Adjectives arising from measurements</a></li><li><a href="3-ma.html#SP12">&#167;12. Support routines for measurement</a></li><li><a href="3-ma.html#SP13">&#167;13. Comparative forms</a></li><li><a href="3-ma.html#SP14">&#167;14. Late registration of prepositions comparing properties</a></li></ul><hr class="tocbar">
<ul class="toc"><li><a href="3-ma.html#SP4">&#167;4. Measurements</a></li><li><a href="3-ma.html#SP9">&#167;9. Adjectives arising from measurements</a></li><li><a href="3-ma.html#SP13">&#167;13. Support routines for measurement</a></li><li><a href="3-ma.html#SP14">&#167;14. Comparative forms</a></li><li><a href="3-ma.html#SP15">&#167;15. Late registration of prepositions comparing properties</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>A typical example would be:
</p>
@ -174,7 +174,7 @@ comparison, \(t\) itself is a member; in strict comparison, it isn't.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="function-syntax">Properties::Measurement::weak_comparison_bp</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">Properties::Measurement::weak_comparison_bp</span></span>:<br/><a href="3-ma.html#SP12">&#167;12</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">shape</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="function-syntax">Properties::Measurement::weak_comparison_bp</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">Properties::Measurement::weak_comparison_bp</span></span>:<br/><a href="3-ma.html#SP13">&#167;13</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">shape</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">operator</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> solely to placate gcc</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">shape</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">MEASURE_T_OR_MORE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">operator</span><span class="plain-syntax"> = </span><span class="identifier-syntax">R_numerically_greater_than_or_equal_to</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
@ -185,7 +185,7 @@ comparison, \(t\) itself is a member; in strict comparison, it isn't.
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">operator</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">Properties::Measurement::strict_comparison</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">Properties::Measurement::strict_comparison</span></span>:<br/><a href="3-ma.html#SP10_4_2">&#167;10.4.2</a>, <a href="3-ma.html#SP13_1">&#167;13.1</a><br/>Comparative Relations - <a href="3-cr.html#SP5_1">&#167;5.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">shape</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="function-syntax">Properties::Measurement::strict_comparison</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">Properties::Measurement::strict_comparison</span></span>:<br/><a href="3-ma.html#SP11_4_2">&#167;11.4.2</a>, <a href="3-ma.html#SP14_1">&#167;14.1</a><br/>Comparative Relations - <a href="3-cr.html#SP5_1">&#167;5.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">shape</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">operator</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> solely to placate gcc</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">shape</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">MEASURE_T_OR_MORE:</span><span class="plain-syntax"> </span><span class="identifier-syntax">operator</span><span class="plain-syntax"> = </span><span class="string-syntax">"&gt;"</span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
@ -231,7 +231,7 @@ definition structure stands incomplete for a while. Filling it in is called
</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">Properties::Measurement::validate</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">Properties::Measurement::validate</span></span>:<br/><a href="3-ma.html#SP5">&#167;5</a>, <a href="3-ma.html#SP6">&#167;6</a>, <a href="3-ma.html#SP11">&#167;11</a>, <a href="3-ma.html#SP13">&#167;13</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">measurement_definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mdef</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Properties::Measurement::validate</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">Properties::Measurement::validate</span></span>:<br/><a href="3-ma.html#SP5">&#167;5</a>, <a href="3-ma.html#SP6">&#167;6</a>, <a href="3-ma.html#SP12">&#167;12</a>, <a href="3-ma.html#SP14">&#167;14</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">measurement_definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mdef</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">mdef</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">prop</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">mdef</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name_of_property_to_compare</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ma.html#SP7_1" class="named-paragraph-link"><span class="named-paragraph">Fill in the missing property name, P</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">mdef</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">region_threshold_evaluated</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)</span>
@ -308,7 +308,7 @@ and issue a problem.
</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">Properties::Measurement::is_valid</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">Properties::Measurement::is_valid</span></span>:<br/><a href="3-ma.html#SP5">&#167;5</a>, <a href="3-ma.html#SP11">&#167;11</a>, <a href="3-ma.html#SP13">&#167;13</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">measurement_definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mdef</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Properties::Measurement::is_valid</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">Properties::Measurement::is_valid</span></span>:<br/><a href="3-ma.html#SP5">&#167;5</a>, <a href="3-ma.html#SP12">&#167;12</a>, <a href="3-ma.html#SP14">&#167;14</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">measurement_definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mdef</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">mdef</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">prop</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">mdef</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">region_threshold_evaluated</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">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>
@ -361,27 +361,41 @@ always to match &lt;property-name&gt;, and the text in the range must match
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="function-syntax">Properties::Measurement::ADJ_parse</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">q</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">sense</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">DNW</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">CONW</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">CALLW</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">sense</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</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="identifier-syntax">adjective_meaning_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">measurement_amf</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> defined by numerical comparison with a property value</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;measurement-adjective-definition&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">CONW</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">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Properties::Measurement::start</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">Properties::Measurement::start</span></span>:<br/>Knowledge Module - <a href="1-km.html#SP3">&#167;3</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">measurement_amf</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::new_family</span><span class="plain-syntax">(3);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">measurement_amf</span><span class="plain-syntax">, </span><span class="identifier-syntax">ASSERT_ADJM_MTID</span><span class="plain-syntax">, </span><a href="3-ma.html#SP12" class="function-link"><span class="function-syntax">Properties::Measurement::ADJ_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">measurement_amf</span><span class="plain-syntax">, </span><span class="identifier-syntax">COMPILING_SOON_ADJM_MTID</span><span class="plain-syntax">, </span><a href="3-ma.html#SP12" class="function-link"><span class="function-syntax">Properties::Measurement::compiling_soon</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">measurement_amf</span><span class="plain-syntax">, </span><span class="identifier-syntax">PARSE_ADJM_MTID</span><span class="plain-syntax">, </span><a href="3-ma.html#SP11" class="function-link"><span class="function-syntax">Properties::Measurement::ADJ_parse</span></a><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></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">Properties::Measurement::ADJ_parse</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">Properties::Measurement::ADJ_parse</span></span>:<br/><a href="3-ma.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">adjective_meaning_family</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">adjective_meaning</span><span class="plain-syntax"> **</span><span class="identifier-syntax">result</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">q</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">sense</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">DNW</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">CONW</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">CALLW</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">sense</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</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="function-syntax">&lt;measurement-adjective-definition&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">CONW</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">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="identifier-syntax">shape</span><span class="plain-syntax"> = </span><span class="function-syntax">&lt;&lt;r&gt;&gt;</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">PRW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;measurement-adjective-definition&gt;</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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">THRESW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;measurement-range&gt;</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">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop</span><span class="plain-syntax"> = </span><span class="function-syntax">&lt;&lt;rp&gt;&gt;</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ma.html#SP10_1" class="named-paragraph-link"><span class="named-paragraph">Reject some overly elaborate attempts to define overly elaborate measurements</span><span class="named-paragraph-number">10.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ma.html#SP10_2" class="named-paragraph-link"><span class="named-paragraph">Allow an exact measurement to be created only if we can already parse the threshold</span><span class="named-paragraph-number">10.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ma.html#SP11_1" class="named-paragraph-link"><span class="named-paragraph">Reject some overly elaborate attempts to define overly elaborate measurements</span><span class="named-paragraph-number">11.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ma.html#SP11_2" class="named-paragraph-link"><span class="named-paragraph">Allow an exact measurement to be created only if we can already parse the threshold</span><span class="named-paragraph-number">11.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">measurement_definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mdef</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">measurement_definition</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ma.html#SP10_3" class="named-paragraph-link"><span class="named-paragraph">Initialise the measurement definition</span><span class="named-paragraph-number">10.3</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">shape</span><span class="plain-syntax"> != </span><span class="constant-syntax">MEASURE_T_EXACTLY</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-ma.html#SP10_4" class="named-paragraph-link"><span class="named-paragraph">Create the superlative form</span><span class="named-paragraph-number">10.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ma.html#SP10_5" class="named-paragraph-link"><span class="named-paragraph">Create the adjectival meaning arising from this measurement</span><span class="named-paragraph-number">10.5</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">mdef</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">headword_as_adjective</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ma.html#SP11_3" class="named-paragraph-link"><span class="named-paragraph">Initialise the measurement definition</span><span class="named-paragraph-number">11.3</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">shape</span><span class="plain-syntax"> != </span><span class="constant-syntax">MEASURE_T_EXACTLY</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-ma.html#SP11_4" class="named-paragraph-link"><span class="named-paragraph">Create the superlative form</span><span class="named-paragraph-number">11.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ma.html#SP11_5" class="named-paragraph-link"><span class="named-paragraph">Create the adjectival meaning arising from this measurement</span><span class="named-paragraph-number">11.5</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mdef</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">headword_as_adjective</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="SP10_1" class="paragraph-anchor"></a><b>&#167;10.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Reject some overly elaborate attempts to define overly elaborate measurements</span><span class="named-paragraph-number">10.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP11_1" class="paragraph-anchor"></a><b>&#167;11.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Reject some overly elaborate attempts to define overly elaborate measurements</span><span class="named-paragraph-number">11.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -392,7 +406,7 @@ always to match &lt;property-name&gt;, and the text in the range must match
<span class="plain-syntax"> </span><span class="string-syntax">"as in 'Definition: a container is large if its carrying capacity is "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"10 or more.': 'fairly large' would not be allowed because it would "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"make no sense to talk about 'fairly larger' or 'fairly largest'."</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>
<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="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">CALLW</span><span class="plain-syntax">)) {</span>
@ -403,7 +417,7 @@ always to match &lt;property-name&gt;, and the text in the range must match
<span class="plain-syntax"> </span><span class="string-syntax">"or more.' is fine, but so 'Definition: a container (called the bag) "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"is large if its carrying capacity is 10 or more.' is not - then again, "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"there's very little call for it."</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>
<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="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">sense</span><span class="plain-syntax"> != </span><span class="constant-syntax">1</span><span class="plain-syntax">) {</span>
@ -415,11 +429,11 @@ always to match &lt;property-name&gt;, and the text in the range must match
<span class="plain-syntax"> </span><span class="string-syntax">"its carrying capacity is 10 or more.' is not - of course a similar "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"effect could be achieved by 'Definition: a container is modest if its "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"carrying capacity is 9 or less.'"</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>
<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>
<ul class="endnotetexts"><li>This code is used in <a href="3-ma.html#SP10">&#167;10</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP10_2" class="paragraph-anchor"></a><b>&#167;10.2. </b>Perhaps this is a good point to say why we allow any exact measurements at
<ul class="endnotetexts"><li>This code is used in <a href="3-ma.html#SP11">&#167;11</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP11_2" class="paragraph-anchor"></a><b>&#167;11.2. </b>Perhaps this is a good point to say why we allow any exact measurements at
all. After all, if we didn't, a definition like:
</p>
@ -427,11 +441,11 @@ all. After all, if we didn't, a definition like:
<p>Definition: a person is handy if his carrying capacity is 7.</p>
</blockquote>
<p class="commentary">...would still work; and "handy" would then be created as a <span class="extract"><span class="extract-syntax">CONDITION_KADJ</span></span>
<p class="commentary">...would still work; and "handy" would then be created as a <span class="extract"><span class="extract-syntax">condition_amf</span></span>
adjective. So why not let that happen?
</p>
<p class="commentary">The answer is that our <span class="extract"><span class="extract-syntax">MEASUREMENT_KADJ</span></span> adjectives behave exactly the same
<p class="commentary">The answer is that our <span class="extract"><span class="extract-syntax">measurement_amf</span></span> adjectives behave exactly the same
at run-time, but can also be asserted true in the model world at compile-time.
In particular, we could write:
</p>
@ -440,20 +454,20 @@ In particular, we could write:
<p>Peter is a handy person.</p>
</blockquote>
<p class="commentary">This can't be done with general <span class="extract"><span class="extract-syntax">CONDITION_KADJ</span></span> adjectives, because conditions
<p class="commentary">This can't be done with general <span class="extract"><span class="extract-syntax">condition_amf</span></span> adjectives, because conditions
can't normally be unravelled at compile time.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Allow an exact measurement to be created only if we can already parse the threshold</span><span class="named-paragraph-number">10.2</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Allow an exact measurement to be created only if we can already parse the threshold</span><span class="named-paragraph-number">11.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">shape</span><span class="plain-syntax"> == </span><span class="constant-syntax">MEASURE_T_EXACTLY</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;s-literal&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">THRESW</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">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="function-syntax">&lt;s-literal&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">THRESW</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">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-ma.html#SP10">&#167;10</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP10_3" class="paragraph-anchor"></a><b>&#167;10.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Initialise the measurement definition</span><span class="named-paragraph-number">10.3</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-ma.html#SP11">&#167;11</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP11_3" class="paragraph-anchor"></a><b>&#167;11.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Initialise the measurement definition</span><span class="named-paragraph-number">11.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -475,19 +489,19 @@ can't normally be unravelled at compile time.
<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">Hierarchy::package</span><span class="plain-syntax">(</span><span class="identifier-syntax">CompilationUnits::current</span><span class="plain-syntax">(), </span><span class="identifier-syntax">ADJECTIVE_MEANINGS_HAP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">mdef</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">mdef_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">MEASUREMENT_FN_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">P</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-ma.html#SP10">&#167;10</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP10_4" class="paragraph-anchor"></a><b>&#167;10.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Create the superlative form</span><span class="named-paragraph-number">10.4</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-ma.html#SP11">&#167;11</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP11_4" class="paragraph-anchor"></a><b>&#167;11.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Create the superlative form</span><span class="named-paragraph-number">11.4</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">mdef</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">superlative</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Grading::make_superlative</span><span class="plain-syntax">(</span><span class="identifier-syntax">mdef</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">headword</span><span class="plain-syntax">, </span><span class="identifier-syntax">Task::language_of_syntax</span><span class="plain-syntax">());</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ma.html#SP10_4_1" class="named-paragraph-link"><span class="named-paragraph">Feed the preamble for the superlative phrase into the lexer</span><span class="named-paragraph-number">10.4.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ma.html#SP10_4_2" class="named-paragraph-link"><span class="named-paragraph">Feed the body of the superlative phrase into the lexer</span><span class="named-paragraph-number">10.4.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ma.html#SP11_4_1" class="named-paragraph-link"><span class="named-paragraph">Feed the preamble for the superlative phrase into the lexer</span><span class="named-paragraph-number">11.4.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ma.html#SP11_4_2" class="named-paragraph-link"><span class="named-paragraph">Feed the body of the superlative phrase into the lexer</span><span class="named-paragraph-number">11.4.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RuleSubtrees::register_recently_lexed_phrases</span><span class="plain-syntax">();</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-ma.html#SP10">&#167;10</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP10_4_1" class="paragraph-anchor"></a><b>&#167;10.4.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Feed the preamble for the superlative phrase into the lexer</span><span class="named-paragraph-number">10.4.1</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-ma.html#SP11">&#167;11</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP11_4_1" class="paragraph-anchor"></a><b>&#167;11.4.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Feed the preamble for the superlative phrase into the lexer</span><span class="named-paragraph-number">11.4.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -499,8 +513,8 @@ can't normally be unravelled at compile time.
<span class="plain-syntax"> </span><span class="character-syntax">':'</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">TEMP</span><span class="plain-syntax">)</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-ma.html#SP10_4">&#167;10.4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP10_4_2" class="paragraph-anchor"></a><b>&#167;10.4.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Feed the body of the superlative phrase into the lexer</span><span class="named-paragraph-number">10.4.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-ma.html#SP11_4">&#167;11.4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP11_4_2" class="paragraph-anchor"></a><b>&#167;11.4.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Feed the body of the superlative phrase into the lexer</span><span class="named-paragraph-number">11.4.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -511,40 +525,40 @@ can't normally be unravelled at compile time.
<span class="plain-syntax"> </span><span class="identifier-syntax">Sentences::make_node</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">Feeds::feed_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">TEMP</span><span class="plain-syntax">), </span><span class="character-syntax">'.'</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">TEMP</span><span class="plain-syntax">)</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-ma.html#SP10_4">&#167;10.4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP10_5" class="paragraph-anchor"></a><b>&#167;10.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Create the adjectival meaning arising from this measurement</span><span class="named-paragraph-number">10.5</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="3-ma.html#SP11_4">&#167;11.4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP11_5" class="paragraph-anchor"></a><b>&#167;11.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Create the adjectival meaning arising from this measurement</span><span class="named-paragraph-number">11.5</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">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">am</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">MEASUREMENT_KADJ</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">am</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">measurement_amf</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">STORE_POINTER_measurement_definition</span><span class="plain-syntax">(</span><span class="identifier-syntax">mdef</span><span class="plain-syntax">), </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">q</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">mdef</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">headword_as_adjective</span><span class="plain-syntax"> = </span><span class="identifier-syntax">am</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Adjectives::Meanings::declare</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="constant-syntax">3</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Adjectives::Meanings::pass_task_to_support_routine</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ADJECTIVE_TASK</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Adjectives::Meanings::set_domain_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">DNW</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">AdjectiveMeanings::declare</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="constant-syntax">3</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">AdjectiveMeanings::pass_task_to_support_routine</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ADJECTIVE_TASK</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">AdjectiveMeanings::set_domain_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">DNW</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-ma.html#SP10">&#167;10</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. </b></p>
<ul class="endnotetexts"><li>This code is used in <a href="3-ma.html#SP11">&#167;11</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>&#167;12. </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">Properties::Measurement::ADJ_compiling_soon</span><span class="plain-syntax">(</span><span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">am</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">measurement_definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mdef</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">Properties::Measurement::compiling_soon</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">Properties::Measurement::compiling_soon</span></span>:<br/><a href="3-ma.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">adjective_meaning_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">family</span><span class="plain-syntax">, </span><span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">am</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">T</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">measurement_definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mdef</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RETRIEVE_POINTER_measurement_definition</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">detailed_meaning</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">mdef</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">prop</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">mdef</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">region_threshold_evaluated</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><span class="identifier-syntax">mdef</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">property_schema_written</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">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::set_i6_schema</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::set_i6_schema</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">mdef</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">headword_as_adjective</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ADJECTIVE_TASK</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">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"%n(*1)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">mdef</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">mdef_iname</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">mdef</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">property_schema_written</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">int</span><span class="plain-syntax"> </span><span class="function-syntax">Properties::Measurement::ADJ_compile</span><span class="plain-syntax">(</span><span class="reserved-syntax">measurement_definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mdef</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">T</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">emit_flag</span><span class="plain-syntax">, </span><span class="identifier-syntax">ph_stack_frame</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phsf</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">Properties::Measurement::ADJ_assert</span><span class="plain-syntax">(</span><span class="reserved-syntax">measurement_definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mdef</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Properties::Measurement::ADJ_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">Properties::Measurement::ADJ_assert</span></span>:<br/><a href="3-ma.html#SP10">&#167;10</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">adjective_meaning_family</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">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">am</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_to_assert_on</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val_to_assert_on</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">parity</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">measurement_definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mdef</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RETRIEVE_POINTER_measurement_definition</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">detailed_meaning</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-ma.html#SP7" class="function-link"><span class="function-syntax">Properties::Measurement::validate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">mdef</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-ma.html#SP8" class="function-link"><span class="function-syntax">Properties::Measurement::is_valid</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">mdef</span><span class="plain-syntax">)) &amp;&amp; (</span><span class="identifier-syntax">mdef</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">prop</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">parity</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">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
@ -555,12 +569,8 @@ can't normally be unravelled at compile time.
<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">Properties::Measurement::ADJ_index</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">measurement_definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mdef</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="SP12" class="paragraph-anchor"></a><b>&#167;12. Support routines for measurement. </b></p>
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>&#167;13. Support routines for measurement. </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">Properties::Measurement::compile_MADJ_routines</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
@ -571,7 +581,7 @@ can't normally be unravelled at compile time.
<span class="plain-syntax"> </span><span class="identifier-syntax">local_variable</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lv</span><span class="plain-syntax"> = </span><span class="identifier-syntax">LocalVariables::add_call_parameter</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Frames::current_stack_frame</span><span class="plain-syntax">(),</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">Adjectives::Meanings::get_domain</span><span class="plain-syntax">(</span><span class="identifier-syntax">mdef</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">headword_as_adjective</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">AdjectiveMeanings::get_domain</span><span class="plain-syntax">(</span><span class="identifier-syntax">mdef</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">headword_as_adjective</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="identifier-syntax">var</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Lvalues::new_LOCAL_VARIABLE</span><span class="plain-syntax">(</span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">, </span><span class="identifier-syntax">lv</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="identifier-syntax">evaluated_prop</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Lvalues::new_PROPERTY_VALUE</span><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Rvalues::from_property</span><span class="plain-syntax">(</span><span class="identifier-syntax">mdef</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">prop</span><span class="plain-syntax">), </span><span class="identifier-syntax">var</span><span class="plain-syntax">);</span>
@ -600,12 +610,12 @@ can't normally be unravelled at compile time.
<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. Comparative forms. </b>For timing reasons, these are made all at once, and later than when the headword
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>&#167;14. Comparative forms. </b>For timing reasons, these are made all at once, and later than when the headword
adjectives and superlatives are made.
</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">Properties::Measurement::create_comparatives</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">Properties::Measurement::create_comparatives</span></span>:<br/>Comparative Relations - <a href="3-cr.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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Properties::Measurement::create_comparatives</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">Properties::Measurement::create_comparatives</span></span>:<br/>Comparative Relations - <a href="3-cr.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">measurement_definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mdef</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">mdef</span><span class="plain-syntax">, </span><span class="reserved-syntax">measurement_definition</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="3-ma.html#SP7" class="function-link"><span class="function-syntax">Properties::Measurement::validate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">mdef</span><span class="plain-syntax">);</span>
@ -618,16 +628,16 @@ adjectives and superlatives are made.
<span class="plain-syntax"> </span><span class="identifier-syntax">Grading::make_quiddity</span><span class="plain-syntax">(</span><span class="identifier-syntax">H</span><span class="plain-syntax">, </span><span class="identifier-syntax">Task::language_of_syntax</span><span class="plain-syntax">()))); </span><span class="comment-syntax"> "tallness"</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">schema_to_compare_property_values</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ma.html#SP13_1" class="named-paragraph-link"><span class="named-paragraph">Work out property comparison schema</span><span class="named-paragraph-number">13.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ma.html#SP13_2" class="named-paragraph-link"><span class="named-paragraph">Construct a BP named for the quiddity and tested using the comparative schema</span><span class="named-paragraph-number">13.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ma.html#SP14_1" class="named-paragraph-link"><span class="named-paragraph">Work out property comparison schema</span><span class="named-paragraph-number">14.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-ma.html#SP14_2" class="named-paragraph-link"><span class="named-paragraph">Construct a BP named for the quiddity and tested using the comparative schema</span><span class="named-paragraph-number">14.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP13_1" class="paragraph-anchor"></a><b>&#167;13.1. </b>This schema compares the property values:
<p class="commentary firstcommentary"><a id="SP14_1" class="paragraph-anchor"></a><b>&#167;14.1. </b>This schema compares the property values:
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Work out property comparison schema</span><span class="named-paragraph-number">13.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Work out property comparison schema</span><span class="named-paragraph-number">14.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -636,8 +646,8 @@ adjectives and superlatives are made.
<span class="plain-syntax"> </span><span class="identifier-syntax">schema_to_compare_property_values</span><span class="plain-syntax"> =</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 %s *2.%n)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">, </span><span class="identifier-syntax">operation</span><span class="plain-syntax">, </span><span class="identifier-syntax">identifier</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-ma.html#SP13">&#167;13</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP13_2" class="paragraph-anchor"></a><b>&#167;13.2. </b>The relation arising from "tall" would be called the "tallness relation", for
<ul class="endnotetexts"><li>This code is used in <a href="3-ma.html#SP14">&#167;14</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP14_2" class="paragraph-anchor"></a><b>&#167;14.2. </b>The relation arising from "tall" would be called the "tallness relation", for
instance. Note that we don't say anything about the domain of \(x\) and \(y\)
in \(T(x, y)\). That's because we a value property like "height" may exist
for more than one kind of object, and there is not necessarily any unifying
@ -647,7 +657,7 @@ multiple-inheritance, and it allows containers and doors to share lockability
behaviour despite being of mutually incompatible kinds.)
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Construct a BP named for the quiddity and tested using the comparative schema</span><span class="named-paragraph-number">13.2</span></span><span class="comment-syntax"> =</span>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Construct a BP named for the quiddity and tested using the comparative schema</span><span class="named-paragraph-number">14.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -660,16 +670,16 @@ behaviour despite being of mutually incompatible kinds.)
<span class="plain-syntax"> </span><span class="identifier-syntax">schema_to_compare_property_values</span><span class="plain-syntax">, </span><span class="identifier-syntax">WordAssemblages::lit_1</span><span class="plain-syntax">(</span><span class="identifier-syntax">quiddity</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><a href="3-cr.html#SP2" class="function-link"><span class="function-syntax">Properties::ComparativeRelations::initialise</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">bp</span><span class="plain-syntax">, </span><span class="identifier-syntax">mdef</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">region_shape</span><span class="plain-syntax">, </span><span class="identifier-syntax">mdef</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">prop</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="3-ma.html#SP14" class="function-link"><span class="function-syntax">Properties::Measurement::register_comparative</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">comparative_form</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-ma.html#SP15" class="function-link"><span class="function-syntax">Properties::Measurement::register_comparative</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">comparative_form</span><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="3-ma.html#SP13">&#167;13</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>&#167;14. Late registration of prepositions comparing properties. </b>The following routines, used only when all the properties have been
<ul class="endnotetexts"><li>This code is used in <a href="3-ma.html#SP14">&#167;14</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>&#167;15. Late registration of prepositions comparing properties. </b>The following routines, used only when all the properties have been
created, make suitable comparatives ("bigger than", etc.) and
prepositional usages to test property-equality ("the same height as").
</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">Properties::Measurement::register_comparative</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">Properties::Measurement::register_comparative</span></span>:<br/><a href="3-ma.html#SP13_2">&#167;13.2</a></span></button><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="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">root</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Properties::Measurement::register_comparative</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">Properties::Measurement::register_comparative</span></span>:<br/><a href="3-ma.html#SP14_2">&#167;14.2</a></span></button><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="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">root</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">verb_meaning</span><span class="plain-syntax"> </span><span class="identifier-syntax">vm</span><span class="plain-syntax"> = </span><span class="identifier-syntax">VerbMeanings::regular</span><span class="plain-syntax">(</span><span class="identifier-syntax">root</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>
<span class="plain-syntax"> </span><span class="identifier-syntax">Prepositions::make</span><span class="plain-syntax">(</span><span class="identifier-syntax">PreformUtilities::merge</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;comparative-property-construction&gt;</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">,</span>
@ -677,7 +687,7 @@ prepositional usages to test property-equality ("the same height as").
<span class="plain-syntax"> </span><span class="identifier-syntax">Verbs::add_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="identifier-syntax">vm</span><span class="plain-syntax">, </span><span class="identifier-syntax">SVO_FS_BIT</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. </b>When the source text creates a measurement adjective, such as:
<p class="commentary firstcommentary"><a id="SP16" class="paragraph-anchor"></a><b>&#167;16. </b>When the source text creates a measurement adjective, such as:
</p>
<blockquote>
@ -692,7 +702,7 @@ prepositional usages to test property-equality ("the same height as").
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">than</span><span class="Preform-plain-syntax"> </span><span class="Preform-comment-syntax"> Peter is taller than Claude</span>
</pre>
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
<p class="commentary firstcommentary"><a id="SP16" class="paragraph-anchor"></a><b>&#167;16. </b>And when Inform creates a value property, that also makes a preposition:
<p class="commentary firstcommentary"><a id="SP17" class="paragraph-anchor"></a><b>&#167;17. </b>And when Inform creates a value property, that also makes a preposition:
</p>
<pre class="Preform-displayed-code all-displayed-code code-font">

View file

@ -507,7 +507,7 @@ important enough to have their own section: here, all we do is...
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">property_permission</span><span class="plain-syntax"> *</span><span class="function-syntax">Properties::permission_list</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">Properties::permission_list</span></span>:<br/>Either-Or Properties - <a href="3-ep.html#SP17">&#167;17</a><br/>Property Permissions - <a href="5-pp.html#SP6">&#167;6</a>, <a href="5-pp.html#SP8_3">&#167;8.3</a></span></button><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="reserved-syntax">property_permission</span><span class="plain-syntax"> *</span><span class="function-syntax">Properties::permission_list</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">Properties::permission_list</span></span>:<br/>Either-Or Properties - <a href="3-ep.html#SP15">&#167;15</a><br/>Property Permissions - <a href="5-pp.html#SP6">&#167;6</a>, <a href="5-pp.html#SP8_3">&#167;8.3</a></span></button><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="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">prn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">applicable_to</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">Properties::set_permission_list</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">Properties::set_permission_list</span></span>:<br/>Property Permissions - <a href="5-pp.html#SP8_3">&#167;8.3</a></span></button><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="reserved-syntax">property_permission</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pp</span><span class="plain-syntax">) {</span>
@ -818,7 +818,7 @@ we find it, we compile it and return <span class="extract"><span class="extract-
<p class="commentary firstcommentary"><a id="SP26" class="paragraph-anchor"></a><b>&#167;26. Emitting to Inter. </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">Properties::iname</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">Properties::iname</span></span>:<br/><a href="3-prp.html#SP20">&#167;20</a>, <a href="3-prp.html#SP21_1">&#167;21.1</a><br/>Instances as Adjectives - <a href="2-iaa.html#SP2_3">&#167;2.3</a><br/>Either-Or Properties - <a href="3-ep.html#SP15_1">&#167;15.1</a>, <a href="3-ep.html#SP15_2">&#167;15.2</a><br/>Comparative Relations - <a href="3-cr.html#SP5_1">&#167;5.1</a><br/>Measurement Adjectives - <a href="3-ma.html#SP13_1">&#167;13.1</a><br/>Same Property Relation - <a href="3-spr.html#SP2">&#167;2</a><br/>Setting Property Relation - <a href="3-spr2.html#SP8">&#167;8</a>, <a href="3-spr2.html#SP11">&#167;11</a><br/>Emit Property Values - <a href="3-epv.html#SP4">&#167;4</a><br/>Instance Counting - <a href="5-ic.html#SP12">&#167;12</a></span></button><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">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">Properties::iname</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">Properties::iname</span></span>:<br/><a href="3-prp.html#SP20">&#167;20</a>, <a href="3-prp.html#SP21_1">&#167;21.1</a><br/>Instances as Adjectives - <a href="2-iaa.html#SP2_3">&#167;2.3</a><br/>Either-Or Properties - <a href="3-ep.html#SP13_1">&#167;13.1</a>, <a href="3-ep.html#SP13_2">&#167;13.2</a><br/>Comparative Relations - <a href="3-cr.html#SP5_1">&#167;5.1</a><br/>Measurement Adjectives - <a href="3-ma.html#SP14_1">&#167;14.1</a><br/>Same Property Relation - <a href="3-spr.html#SP2">&#167;2</a><br/>Setting Property Relation - <a href="3-spr2.html#SP8">&#167;8</a>, <a href="3-spr2.html#SP11">&#167;11</a><br/>Emit Property Values - <a href="3-epv.html#SP4">&#167;4</a><br/>Instance Counting - <a href="5-ic.html#SP12">&#167;12</a></span></button><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="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="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 iname for null property"</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-prp.html#SP15" class="function-link"><span class="function-syntax">Properties::is_either_or</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><span class="plain-syntax">)) &amp;&amp; (</span><span class="identifier-syntax">prn</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">stored_in_negation</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-prp.html#SP26" class="function-link"><span class="function-syntax">Properties::iname</span></a><span class="plain-syntax">(</span><a href="3-ep.html#SP6" class="function-link"><span class="function-syntax">Properties::EitherOr::get_negation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><span class="plain-syntax">));</span>

View file

@ -226,13 +226,13 @@ might not actually accept it; it might be redundant, or contradictory.)
</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">World::Inferences::draw_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">World::Inferences::draw_property</span></span>:<br/>Instances as Adjectives - <a href="2-iaa.html#SP4">&#167;4</a><br/>Either-Or Properties - <a href="3-ep.html#SP16">&#167;16</a><br/>Measurement Adjectives - <a href="3-ma.html#SP11">&#167;11</a><br/>Setting Property Relation - <a href="3-spr2.html#SP10">&#167;10</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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">World::Inferences::draw_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">World::Inferences::draw_property</span></span>:<br/>Instances as Adjectives - <a href="2-iaa.html#SP4">&#167;4</a><br/>Either-Or Properties - <a href="3-ep.html#SP14">&#167;14</a><br/>Measurement Adjectives - <a href="3-ma.html#SP12">&#167;12</a><br/>Setting Property Relation - <a href="3-spr2.html#SP10">&#167;10</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="reserved-syntax">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prn</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</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><a href="5-inf.html#SP6" class="function-link"><span class="function-syntax">World::Inferences::create_property_inference</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">infs</span><span class="plain-syntax">, </span><span class="identifier-syntax">prn</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-inf.html#SP18" class="function-link"><span class="function-syntax">World::Inferences::join_inference</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">i</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">World::Inferences::draw_negated_property</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">World::Inferences::draw_negated_property</span></span>:<br/>Either-Or Properties - <a href="3-ep.html#SP16">&#167;16</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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">World::Inferences::draw_negated_property</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">World::Inferences::draw_negated_property</span></span>:<br/>Either-Or Properties - <a href="3-ep.html#SP14">&#167;14</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="reserved-syntax">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prn</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</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><a href="5-inf.html#SP6" class="function-link"><span class="function-syntax">World::Inferences::create_property_inference</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">infs</span><span class="plain-syntax">, </span><span class="identifier-syntax">prn</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">i</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">certainty</span><span class="plain-syntax"> = -</span><span class="identifier-syntax">i</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">certainty</span><span class="plain-syntax">;</span>

View file

@ -314,7 +314,7 @@ property &mdash; when indexing who can own it.
</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">World::Permissions::index</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">World::Permissions::index</span></span>:<br/>Either-Or Properties - <a href="3-ep.html#SP17">&#167;17</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</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="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">World::Permissions::index</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">World::Permissions::index</span></span>:<br/>Either-Or Properties - <a href="3-ep.html#SP15">&#167;15</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</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="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ac</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">s</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">s</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="identifier-syntax">s</span><span class="plain-syntax"> &lt;= </span><span class="constant-syntax">2</span><span class="plain-syntax">; </span><span class="identifier-syntax">s</span><span class="plain-syntax">++) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">property_permission</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pp</span><span class="plain-syntax">;</span>

View file

@ -80,6 +80,10 @@ which use this module:
</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">RuntimeModule::start</span><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="3-abp.html#SP1" class="function-link"><span class="function-syntax">Phrases::Phrasal::start</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="3-abc.html#SP1" class="function-link"><span class="function-syntax">Phrases::Condition::start</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="3-abrp.html#SP2" class="function-link"><span class="function-syntax">Phrases::RawPhrasal::start</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="3-abrc.html#SP2" class="function-link"><span class="function-syntax">Phrases::RawCondition::start</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Memory::reason_name</span><span class="plain-syntax">(</span><span class="constant-syntax">EMIT_ARRAY_MREASON</span><span class="plain-syntax">, </span><span class="string-syntax">"emitter array storage"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Memory::reason_name</span><span class="plain-syntax">(</span><span class="constant-syntax">PARTITION_MREASON</span><span class="plain-syntax">, </span><span class="string-syntax">"initial state for relations in groups"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Memory::reason_name</span><span class="plain-syntax">(</span><span class="constant-syntax">RELATION_CONSTRUCTION_MREASON</span><span class="plain-syntax">, </span><span class="string-syntax">"relation bitmap storage"</span><span class="plain-syntax">);</span>

File diff suppressed because one or more lines are too long

View file

@ -12,6 +12,14 @@
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
<script>
function togglePopup(material_id) {
var popup = document.getElementById(material_id);
popup.classList.toggle("show");
}
</script>
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
@ -64,32 +72,43 @@
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7</a></li><li><a href="index.html">runtime</a></li><li><a href="index.html#3">Chapter 3: Calculated Adjectives</a></li><li><b>Adjectives by Condition</b></li></ul></div>
<p class="purpose">Defining an adjective with an I7 condition.</p>
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b></p>
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>This is a family of adjective meanings.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="function-syntax">Phrases::Condition::ADJ_parse</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">q</span><span class="plain-syntax">,</span>
<span class="identifier-syntax">adjective_meaning_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">condition_amf</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> defined by a condition in I7 source text</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::Condition::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">Phrases::Condition::start</span></span>:<br/>Runtime Module - <a href="1-rm.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">condition_amf</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::new_family</span><span class="plain-syntax">(7);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">condition_amf</span><span class="plain-syntax">, </span><span class="identifier-syntax">COMPILE_ADJM_MTID</span><span class="plain-syntax">, </span><a href="3-abc.html#SP2" class="function-link"><span class="function-syntax">Phrases::Condition::ADJ_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">condition_amf</span><span class="plain-syntax">, </span><span class="identifier-syntax">PARSE_ADJM_MTID</span><span class="plain-syntax">, </span><a href="3-abc.html#SP2" class="function-link"><span class="function-syntax">Phrases::Condition::ADJ_parse</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<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">int</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::Condition::ADJ_parse</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">Phrases::Condition::ADJ_parse</span></span>:<br/><a href="3-abc.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">adjective_meaning_family</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">adjective_meaning</span><span class="plain-syntax"> **</span><span class="identifier-syntax">result</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">q</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">sense</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">DNW</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">CONW</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">CALLW</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">sense</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</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">sense</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</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">definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">def</span><span class="plain-syntax"> = </span><a href="3-ad.html#SP6" class="function-link"><span class="function-syntax">Phrases::Adjectives::def_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">q</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">am</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Adjectives::Meanings::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">CONDITION_KADJ</span><span class="plain-syntax">, </span><span class="identifier-syntax">STORE_POINTER_definition</span><span class="plain-syntax">(</span><span class="identifier-syntax">def</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">AdjectiveMeanings::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">condition_amf</span><span class="plain-syntax">, </span><span class="identifier-syntax">STORE_POINTER_definition</span><span class="plain-syntax">(</span><span class="identifier-syntax">def</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">q</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">def</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">condition_to_match</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CONW</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">def</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">format</span><span class="plain-syntax"> = </span><span class="identifier-syntax">sense</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">def</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">domain_calling</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CALLW</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">def</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">am_of_def</span><span class="plain-syntax"> = </span><span class="identifier-syntax">am</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Adjectives::Meanings::declare</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="constant-syntax">6</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Adjectives::Meanings::pass_task_to_support_routine</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ADJECTIVE_TASK</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Adjectives::Meanings::set_domain_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">DNW</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">am</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">AdjectiveMeanings::declare</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="constant-syntax">6</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">AdjectiveMeanings::pass_task_to_support_routine</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ADJECTIVE_TASK</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">AdjectiveMeanings::set_domain_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">DNW</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">am</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::Condition::ADJ_compiling_soon</span><span class="plain-syntax">(</span><span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">am</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">def</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">int</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::Condition::ADJ_compile</span><span class="plain-syntax">(</span><span class="reserved-syntax">definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">def</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">emit_flag</span><span class="plain-syntax">, </span><span class="identifier-syntax">ph_stack_frame</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phsf</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::Condition::ADJ_compile</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">Phrases::Condition::ADJ_compile</span></span>:<br/><a href="3-abc.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">adjective_meaning_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">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">am</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">emit_flag</span><span class="plain-syntax">, </span><span class="identifier-syntax">ph_stack_frame</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phsf</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">def</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_definition</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">detailed_meaning</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">T</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">TEST_ADJECTIVE_TASK:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">emit_flag</span><span class="plain-syntax">) {</span>
@ -98,42 +117,34 @@
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">def</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">condition_to_match</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">def</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">node</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="identifier-syntax">spec</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="function-syntax">&lt;s-condition&gt;(def-&gt;</span><span class="element-syntax">condition_to_match</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">spec</span><span class="plain-syntax"> = </span><span class="function-syntax">&lt;&lt;rp&gt;&gt;</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax">&lt;s-condition&gt;(def-&gt;</span><span class="element-syntax">condition_to_match</span><span class="plain-syntax">)) </span><span class="identifier-syntax">spec</span><span class="plain-syntax"> = </span><span class="function-syntax">&lt;&lt;rp&gt;&gt;</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">spec</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">Dash::validate_conditional_clause</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</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</span><span class="plain-syntax">(</span><span class="string-syntax">"Error on: %W = $T"</span><span class="plain-syntax">, </span><span class="identifier-syntax">def</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">condition_to_match</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::definition_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_DefinitionBadCondition</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::definition_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_DefinitionBadCondition</span><span class="plain-syntax">),</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">def</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">node</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"that condition makes no sense to me"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="string-syntax">"although the preamble to the definition was properly "</span>
<span class="plain-syntax"> </span><span class="string-syntax">"written. There must be something wrong after 'if'."</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">def</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">format</span><span class="plain-syntax"> == -1) { </span><span class="identifier-syntax">Produce::inv_primitive</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">NOT_BIP</span><span class="plain-syntax">); </span><span class="identifier-syntax">Produce::down</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="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">def</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">format</span><span class="plain-syntax"> == -1) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</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">NOT_BIP</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</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="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Specifications::Compiler::emit_as_val</span><span class="plain-syntax">(</span><span class="identifier-syntax">K_number</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</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">def</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">format</span><span class="plain-syntax"> == -1) </span><span class="identifier-syntax">Produce::up</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="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">def</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">format</span><span class="plain-syntax"> == -1) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</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="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LocalVariables::alias_pronoun</span><span class="plain-syntax">(</span><span class="identifier-syntax">phsf</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="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">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NOW_ADJECTIVE_TRUE_TASK:</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">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NOW_ADJECTIVE_FALSE_TASK:</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="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">Phrases::Condition::ADJ_assert</span><span class="plain-syntax">(</span><span class="reserved-syntax">definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">def</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">infs_to_assert_on</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val_to_assert_on</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">parity</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">Phrases::Condition::ADJ_index</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">def</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>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="3-abp.html">&#10094;</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-rm.html">1</a></li><li class="progresschapter"><a href="2-hrr.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-ad.html">ad</a></li><li class="progresssection"><a href="3-abrp.html">abrp</a></li><li class="progresssection"><a href="3-abrc.html">abrc</a></li><li class="progresssection"><a href="3-abp.html">abp</a></li><li class="progresscurrent">abc</li><li class="progresschapter"><a href="4-fc.html">4</a></li><li class="progressnext"><a href="4-fc.html">&#10095;</a></li></ul></div>

View file

@ -12,6 +12,14 @@
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
<script>
function togglePopup(material_id) {
var popup = document.getElementById(material_id);
popup.classList.toggle("show");
}
</script>
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
@ -69,6 +77,13 @@ And here's another one.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">adjective_meaning_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phrase_amf</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> defined by an explicit but nameless rule</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::Phrasal::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">Phrases::Phrasal::start</span></span>:<br/>Runtime Module - <a href="1-rm.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">phrase_amf</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::new_family</span><span class="plain-syntax">(6);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">phrase_amf</span><span class="plain-syntax">, </span><span class="identifier-syntax">PARSE_ADJM_MTID</span><span class="plain-syntax">, </span><a href="3-abp.html#SP1" class="function-link"><span class="function-syntax">Phrases::Phrasal::ADJ_parse</span></a><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">Phrases::Phrasal::define_adjective_by_phrase</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">phrase</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ph</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> *</span><span class="identifier-syntax">CW</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="plain-syntax"> </span><span class="reserved-syntax">definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">def</span><span class="plain-syntax">;</span>
@ -76,45 +91,31 @@ And here's another one.
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ph</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="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">def</span><span class="plain-syntax">, </span><span class="reserved-syntax">definition</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">def</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">definition_node</span><span class="plain-syntax"> == </span><span class="identifier-syntax">p</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">Adjectives::Meanings::get_form</span><span class="plain-syntax">(</span><span class="identifier-syntax">def</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">am_of_def</span><span class="plain-syntax">) == </span><span class="identifier-syntax">PHRASE_KADJ</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">def</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">am_of_def</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ADJECTIVE_TASK</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">def</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">definition_node</span><span class="plain-syntax"> == </span><span class="identifier-syntax">p</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">AdjectiveMeanings::get_form</span><span class="plain-syntax">(</span><span class="identifier-syntax">def</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">am_of_def</span><span class="plain-syntax">) == </span><span class="identifier-syntax">phrase_amf</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">def</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">am_of_def</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ADJECTIVE_TASK</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">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"(%n(*1))"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Phrases::iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">ph</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">CW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">def</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">domain_calling</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::get_domain_forcing</span><span class="plain-syntax">(</span><span class="identifier-syntax">def</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">am_of_def</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::get_domain_forcing</span><span class="plain-syntax">(</span><span class="identifier-syntax">def</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">am_of_def</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">Kinds::Behaviour::is_object</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">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="reserved-syntax">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
<span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="function-syntax">Phrases::Phrasal::ADJ_parse</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">q</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::Phrasal::ADJ_parse</span><span class="plain-syntax">(</span><span class="identifier-syntax">adjective_meaning_family</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">adjective_meaning</span><span class="plain-syntax"> **</span><span class="identifier-syntax">result</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">q</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">sense</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">DNW</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">CONW</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">CALLW</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">sense</span><span class="plain-syntax"> != </span><span class="constant-syntax">0</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">sense</span><span class="plain-syntax"> != </span><span class="constant-syntax">0</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">definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">def</span><span class="plain-syntax"> = </span><a href="3-ad.html#SP6" class="function-link"><span class="function-syntax">Phrases::Adjectives::def_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">q</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">am</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">PHRASE_KADJ</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">am</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">phrase_amf</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">STORE_POINTER_definition</span><span class="plain-syntax">(</span><span class="identifier-syntax">def</span><span class="plain-syntax">), </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">q</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">def</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">domain_calling</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CALLW</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">def</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">am_of_def</span><span class="plain-syntax"> = </span><span class="identifier-syntax">am</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Adjectives::Meanings::declare</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="constant-syntax">7</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Adjectives::Meanings::pass_task_to_support_routine</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ADJECTIVE_TASK</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Adjectives::Meanings::set_domain_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">DNW</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">am</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">Phrases::Phrasal::ADJ_compiling_soon</span><span class="plain-syntax">(</span><span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="reserved-syntax">definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">def</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">int</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::Phrasal::ADJ_compile</span><span class="plain-syntax">(</span><span class="reserved-syntax">definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">def</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">emit_flag</span><span class="plain-syntax">, </span><span class="identifier-syntax">ph_stack_frame</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phsf</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">Phrases::Phrasal::ADJ_assert</span><span class="plain-syntax">(</span><span class="reserved-syntax">definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">def</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">infs_to_assert_on</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val_to_assert_on</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">parity</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">Phrases::Phrasal::ADJ_index</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">def</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="identifier-syntax">AdjectiveMeanings::declare</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="constant-syntax">7</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">AdjectiveMeanings::pass_task_to_support_routine</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ADJECTIVE_TASK</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">AdjectiveMeanings::set_domain_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">DNW</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> *</span><span class="identifier-syntax">result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">am</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>
<nav role="progress"><div class="progresscontainer">

View file

@ -12,6 +12,14 @@
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
<script>
function togglePopup(material_id) {
var popup = document.getElementById(material_id);
popup.classList.toggle("show");
}
</script>
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Preform-Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
@ -77,42 +85,35 @@
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="function-syntax">Phrases::RawCondition::ADJ_parse</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">q</span><span class="plain-syntax">,</span>
<span class="identifier-syntax">adjective_meaning_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inter_condition_amf</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> defined by an explicit I6 schema</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::RawCondition::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">Phrases::RawCondition::start</span></span>:<br/>Runtime Module - <a href="1-rm.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">inter_condition_amf</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::new_family</span><span class="plain-syntax">(4);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">inter_condition_amf</span><span class="plain-syntax">, </span><span class="identifier-syntax">PARSE_ADJM_MTID</span><span class="plain-syntax">, </span><a href="3-abrc.html#SP2" class="function-link"><span class="function-syntax">Phrases::RawCondition::ADJ_parse</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">Phrases::RawCondition::ADJ_parse</span><span class="plain-syntax">(</span><span class="identifier-syntax">adjective_meaning_family</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">adjective_meaning</span><span class="plain-syntax"> **</span><span class="identifier-syntax">result</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">q</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">sense</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">DNW</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">CONW</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">CALLW</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">sense</span><span class="plain-syntax"> != </span><span class="constant-syntax">1</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">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">CALLW</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="function-syntax">&lt;inform6-condition-adjective-definition&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">CONW</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">sense</span><span class="plain-syntax"> != </span><span class="constant-syntax">1</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">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">CALLW</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="function-syntax">&lt;inform6-condition-adjective-definition&gt;</span><span class="plain-syntax">(</span><span class="identifier-syntax">CONW</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="identifier-syntax">text_wn</span><span class="plain-syntax"> = </span><span class="function-syntax">&lt;&lt;r&gt;&gt;</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">IN</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;inform6-condition-adjective-definition&gt;</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">definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">def</span><span class="plain-syntax"> = </span><a href="3-ad.html#SP6" class="function-link"><span class="function-syntax">Phrases::Adjectives::def_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">q</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">am</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Adjectives::Meanings::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">I6_CONDITION_KADJ</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">AdjectiveMeanings::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">inter_condition_amf</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">STORE_POINTER_definition</span><span class="plain-syntax">(</span><span class="identifier-syntax">def</span><span class="plain-syntax">), </span><span class="identifier-syntax">IN</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">def</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">am_of_def</span><span class="plain-syntax"> = </span><span class="identifier-syntax">am</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Adjectives::Meanings::declare</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="constant-syntax">8</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Adjectives::Meanings::pass_task_to_support_routine</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ADJECTIVE_TASK</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Adjectives::Meanings::set_domain_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">DNW</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ADJECTIVE_TASK</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">AdjectiveMeanings::declare</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="constant-syntax">8</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">AdjectiveMeanings::pass_task_to_support_routine</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ADJECTIVE_TASK</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">AdjectiveMeanings::set_domain_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">DNW</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ADJECTIVE_TASK</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">Word::dequote</span><span class="plain-syntax">(</span><span class="identifier-syntax">text_wn</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"(%N)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_wn</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">am</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">Phrases::RawCondition::ADJ_compiling_soon</span><span class="plain-syntax">(</span><span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="reserved-syntax">definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">def</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">int</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::RawCondition::ADJ_compile</span><span class="plain-syntax">(</span><span class="reserved-syntax">definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">def</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">emit_flag</span><span class="plain-syntax">, </span><span class="identifier-syntax">ph_stack_frame</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phsf</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">Phrases::RawCondition::ADJ_assert</span><span class="plain-syntax">(</span><span class="reserved-syntax">definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">def</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">infs_to_assert_on</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val_to_assert_on</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">parity</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">Phrases::RawCondition::ADJ_index</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">def</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="identifier-syntax">result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">am</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>
<nav role="progress"><div class="progresscontainer">

View file

@ -12,6 +12,14 @@
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
<script>
function togglePopup(material_id) {
var popup = document.getElementById(material_id);
popup.classList.toggle("show");
}
</script>
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Preform-Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
@ -79,7 +87,20 @@ This little grammar catches definitions delegated to Inform 6 routines.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="function-syntax">Phrases::RawPhrasal::ADJ_parse</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">q</span><span class="plain-syntax">,</span>
<span class="identifier-syntax">adjective_meaning_family</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inter_routine_amf</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="comment-syntax"> defined by a named I6 routine</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::RawPhrasal::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">Phrases::RawPhrasal::start</span></span>:<br/>Runtime Module - <a href="1-rm.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">inter_routine_amf</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::new_family</span><span class="plain-syntax">(5);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">METHOD_ADD</span><span class="plain-syntax">(</span><span class="identifier-syntax">inter_routine_amf</span><span class="plain-syntax">, </span><span class="identifier-syntax">PARSE_ADJM_MTID</span><span class="plain-syntax">, </span><a href="3-abrp.html#SP2" class="function-link"><span class="function-syntax">Phrases::RawPhrasal::ADJ_parse</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">Phrases::RawPhrasal::is_by_Inter_function</span><span class="plain-syntax">(</span><span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">am</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">am</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">am</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">family</span><span class="plain-syntax"> == </span><span class="identifier-syntax">inter_routine_amf</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>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::RawPhrasal::ADJ_parse</span><span class="plain-syntax">(</span><span class="identifier-syntax">adjective_meaning_family</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">adjective_meaning</span><span class="plain-syntax"> **</span><span class="identifier-syntax">result</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">q</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">sense</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">DNW</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">CONW</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">CALLW</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">setting</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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">EW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">, </span><span class="identifier-syntax">RW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
@ -87,49 +108,34 @@ This little grammar catches definitions delegated to Inform 6 routines.
<span class="plain-syntax"> </span><span class="identifier-syntax">setting</span><span class="plain-syntax"> = </span><span class="function-syntax">&lt;&lt;r&gt;&gt;</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">RW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;inform6-routine-adjective-definition&gt;</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">EW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax">&lt;inform6-routine-adjective-definition&gt;</span><span class="plain-syntax">, </span><span class="constant-syntax">2</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">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">else</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">sense</span><span class="plain-syntax"> != </span><span class="constant-syntax">1</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">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">CALLW</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">sense</span><span class="plain-syntax"> != </span><span class="constant-syntax">1</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">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">CALLW</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="identifier-syntax">rname_wn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">RW</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Word::dequote</span><span class="plain-syntax">(</span><span class="identifier-syntax">rname_wn</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">def</span><span class="plain-syntax"> = </span><a href="3-ad.html#SP6" class="function-link"><span class="function-syntax">Phrases::Adjectives::def_new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">q</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">am</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Adjectives::Meanings::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">I6_ROUTINE_KADJ</span><span class="plain-syntax">, </span><span class="identifier-syntax">STORE_POINTER_definition</span><span class="plain-syntax">(</span><span class="identifier-syntax">def</span><span class="plain-syntax">), </span><span class="identifier-syntax">EW</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">AdjectiveMeanings::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">inter_routine_amf</span><span class="plain-syntax">, </span><span class="identifier-syntax">STORE_POINTER_definition</span><span class="plain-syntax">(</span><span class="identifier-syntax">def</span><span class="plain-syntax">), </span><span class="identifier-syntax">EW</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">def</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">am_of_def</span><span class="plain-syntax"> = </span><span class="identifier-syntax">am</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Adjectives::Meanings::declare</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="constant-syntax">9</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Adjectives::Meanings::set_domain_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">DNW</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">AdjectiveMeanings::declare</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="constant-syntax">9</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">AdjectiveMeanings::set_domain_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">DNW</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">setting</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ADJECTIVE_TASK</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">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ADJECTIVE_TASK</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">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"*=-(%N(*1, -1))"</span><span class="plain-syntax">, </span><span class="identifier-syntax">rname_wn</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ADJECTIVE_TRUE_TASK</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">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ADJECTIVE_TRUE_TASK</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">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"*=-(%N(*1, true))"</span><span class="plain-syntax">, </span><span class="identifier-syntax">rname_wn</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ADJECTIVE_FALSE_TASK</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">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">NOW_ADJECTIVE_FALSE_TASK</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">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"*=-(%N(*1, false))"</span><span class="plain-syntax">, </span><span class="identifier-syntax">rname_wn</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">Adjectives::Meanings::pass_task_to_support_routine</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ADJECTIVE_TASK</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ADJECTIVE_TASK</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">AdjectiveMeanings::pass_task_to_support_routine</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ADJECTIVE_TASK</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i6_schema</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sch</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::set_i6_schema</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="identifier-syntax">TEST_ADJECTIVE_TASK</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">Calculus::Schemas::modify</span><span class="plain-syntax">(</span><span class="identifier-syntax">sch</span><span class="plain-syntax">, </span><span class="string-syntax">"*=-(%N(*1))"</span><span class="plain-syntax">, </span><span class="identifier-syntax">rname_wn</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">am</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">Phrases::RawPhrasal::ADJ_compiling_soon</span><span class="plain-syntax">(</span><span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">am</span><span class="plain-syntax">, </span><span class="reserved-syntax">definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">def</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">int</span><span class="plain-syntax"> </span><span class="function-syntax">Phrases::RawPhrasal::ADJ_compile</span><span class="plain-syntax">(</span><span class="reserved-syntax">definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">def</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">emit_flag</span><span class="plain-syntax">, </span><span class="identifier-syntax">ph_stack_frame</span><span class="plain-syntax"> *</span><span class="identifier-syntax">phsf</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">Phrases::RawPhrasal::ADJ_assert</span><span class="plain-syntax">(</span><span class="reserved-syntax">definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">def</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">infs_to_assert_on</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val_to_assert_on</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">parity</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">Phrases::RawPhrasal::ADJ_index</span><span class="plain-syntax">(</span><span class="identifier-syntax">OUTPUT_STREAM</span><span class="plain-syntax">, </span><span class="reserved-syntax">definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">def</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="identifier-syntax">result</span><span class="plain-syntax"> = </span><span class="identifier-syntax">am</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>
<nav role="progress"><div class="progresscontainer">

View file

@ -279,12 +279,12 @@ offer the new adjective around and see if anybody claims it.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">am</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::parse</span><span class="plain-syntax">(</span><span class="identifier-syntax">q</span><span class="plain-syntax">, </span><span class="identifier-syntax">the_format</span><span class="plain-syntax">, </span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">DNW</span><span class="plain-syntax">, </span><span class="identifier-syntax">CONW</span><span class="plain-syntax">, </span><span class="identifier-syntax">CALLW</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">am</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::parse</span><span class="plain-syntax">(</span><span class="identifier-syntax">q</span><span class="plain-syntax">, </span><span class="identifier-syntax">the_format</span><span class="plain-syntax">, </span><span class="identifier-syntax">AW</span><span class="plain-syntax">, </span><span class="identifier-syntax">DNW</span><span class="plain-syntax">, </span><span class="identifier-syntax">CONW</span><span class="plain-syntax">, </span><span class="identifier-syntax">CALLW</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">am</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">"unclaimed adjective definition"</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">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">NW</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">neg</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::negate</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Adjectives::Meanings::declare</span><span class="plain-syntax">(</span><span class="identifier-syntax">neg</span><span class="plain-syntax">, </span><span class="identifier-syntax">NW</span><span class="plain-syntax">, </span><span class="constant-syntax">5</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">adjective_meaning</span><span class="plain-syntax"> *</span><span class="identifier-syntax">neg</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::negate</span><span class="plain-syntax">(</span><span class="identifier-syntax">am</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">AdjectiveMeanings::declare</span><span class="plain-syntax">(</span><span class="identifier-syntax">neg</span><span class="plain-syntax">, </span><span class="identifier-syntax">NW</span><span class="plain-syntax">, </span><span class="constant-syntax">5</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-ad.html#SP4">&#167;4</a>.</li></ul>
@ -323,7 +323,7 @@ offer the new adjective around and see if anybody claims it.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">definition</span><span class="plain-syntax"> *</span><span class="function-syntax">Phrases::Adjectives::def_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">Phrases::Adjectives::def_new</span></span>:<br/>Adjectives by Raw Phrase - <a href="3-abrp.html#SP2">&#167;2</a><br/>Adjectives by Raw Condition - <a href="3-abrc.html#SP2">&#167;2</a><br/>Adjectives by Phrase - <a href="3-abp.html#SP1">&#167;1</a><br/>Adjectives by Condition - <a href="3-abc.html#SP1">&#167;1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">q</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">definition</span><span class="plain-syntax"> *</span><span class="function-syntax">Phrases::Adjectives::def_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">Phrases::Adjectives::def_new</span></span>:<br/>Adjectives by Raw Phrase - <a href="3-abrp.html#SP2">&#167;2</a><br/>Adjectives by Raw Condition - <a href="3-abrc.html#SP2">&#167;2</a><br/>Adjectives by Phrase - <a href="3-abp.html#SP1">&#167;1</a><br/>Adjectives by Condition - <a href="3-abc.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">q</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">definition</span><span class="plain-syntax"> *</span><span class="identifier-syntax">def</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">definition</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">def</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">node</span><span class="plain-syntax"> = </span><span class="identifier-syntax">q</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">def</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">format</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>

View file

@ -1969,10 +1969,10 @@ against "value".)
<span class="plain-syntax"> </span><span class="identifier-syntax">prn</span><span class="plain-syntax"> = </span><a href="2-rvl.html#SP3" class="function-link"><span class="function-syntax">Rvalues::to_property</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">new_value</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><a href="2-dsc.html#SP8" class="function-link"><span class="function-syntax">Descriptions::number_of_adjectives_applied_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">new_value</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">adjective</span><span class="plain-syntax"> *</span><span class="identifier-syntax">aph</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectivalPredicates::to_adjective</span><span class="plain-syntax">(</span><a href="2-dsc.html#SP8" class="function-link"><span class="function-syntax">Descriptions::first_unary_predicate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">new_value</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">Adjectives::Meanings::has_ENUMERATIVE_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">aph</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">prn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Properties::Conditions::get_coinciding_property</span><span class="plain-syntax">(</span><span class="identifier-syntax">Instances::to_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">Adjectives::Meanings::has_ENUMERATIVE_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">aph</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">Adjectives::Meanings::has_EORP_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">aph</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">prn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Adjectives::Meanings::has_EORP_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">aph</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">AdjectiveMeanings::has_ENUMERATIVE_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">aph</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">prn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Properties::Conditions::get_coinciding_property</span><span class="plain-syntax">(</span><span class="identifier-syntax">Instances::to_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">AdjectiveMeanings::has_ENUMERATIVE_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">aph</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">AdjectiveMeanings::has_EORP_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">aph</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">prn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectiveMeanings::has_EORP_meaning</span><span class="plain-syntax">(</span><span class="identifier-syntax">aph</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">make_check</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
</pre>

View file

@ -459,7 +459,7 @@ possible adjective name it can see.
<span class="plain-syntax"> </span><span class="identifier-syntax">pcalc_prop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">au_prop</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">LOOP_THROUGH_ADJECTIVE_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">au</span><span class="plain-syntax">, </span><span class="identifier-syntax">au_prop</span><span class="plain-syntax">, </span><span class="identifier-syntax">A</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">adjective</span><span class="plain-syntax"> *</span><span class="identifier-syntax">aph</span><span class="plain-syntax"> = </span><span class="identifier-syntax">AdjectivalPredicates::to_adjective</span><span class="plain-syntax">(</span><span class="identifier-syntax">au</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">Adjectives::Meanings::applicable_to</span><span class="plain-syntax">(</span><span class="identifier-syntax">aph</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</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">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">AdjectiveMeanings::applicable_to</span><span class="plain-syntax">(</span><span class="identifier-syntax">aph</span><span class="plain-syntax">, </span><span class="identifier-syntax">K</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">FALSE</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">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>

View file

@ -1,6 +1,6 @@
Total memory consumption was 257518K = 251 MB
62.4% was used for 1341256 objects, in 273984 frames in 201 x 800K = 160800K = 157 MB:
62.4% was used for 1341282 objects, in 274010 frames in 201 x 800K = 160800K = 157 MB:
9.8% inter_tree_node_array 36 x 8192 = 294912 objects, 25953408 bytes
5.5% text_stream_array 2592 x 100 = 259200 objects, 14598144 bytes
@ -29,8 +29,8 @@ Total memory consumption was 257518K = 251 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, 430272 bytes
0.1% verb_usage 1128 objects, 388032 bytes
@ -92,7 +92,7 @@ Total memory consumption was 257518K = 251 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 305 objects, 14640 bytes
---- method 317 objects, 15216 bytes
---- plugin 23 objects, 13432 bytes
---- literal_text 147 objects, 12936 bytes
---- stopwatch_timer 148 objects, 11840 bytes
@ -120,32 +120,32 @@ Total memory consumption was 257518K = 251 MB
---- inbuild_copy 35 objects, 3640 bytes
---- command_line_switch 43 objects, 3440 bytes
---- property_setting_bp_data 84 objects, 3360 bytes
---- instance_usage_array 1 x 200 objects, 3232 bytes
---- kind_constructor_comparison_schema_array 1 x 100 objects, 3232 bytes
---- instance_usage_array 1 x 200 objects, 3232 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
---- method_set 82 objects, 2624 bytes
---- method_set 89 objects, 2848 bytes
---- inter_construct 32 objects, 2560 bytes
---- kind_constructor_casting_rule_array 1 x 100 objects, 2432 bytes
---- kind_constructor_instance_array 1 x 100 objects, 2432 bytes
---- kind_constructor_casting_rule_array 1 x 100 objects, 2432 bytes
---- equation_symbol 30 objects, 2400 bytes
---- semver_range 22 objects, 2288 bytes
---- use_option 29 objects, 1856 bytes
---- pronoun_usage 42 objects, 1680 bytes
---- activity_crossref_array 1 x 100 objects, 1632 bytes
---- plugin_call_array 1 x 100 objects, 1632 bytes
---- table_contribution_array 1 x 100 objects, 1632 bytes
---- activity_crossref_array 1 x 100 objects, 1632 bytes
---- kind_interaction 39 objects, 1560 bytes
---- inter_annotation_form 37 objects, 1480 bytes
---- pipeline_step 12 objects, 1440 bytes
---- noun_filter_token 22 objects, 1408 bytes
---- scene 1 object, 1344 bytes
---- special_meaning_holder 33 objects, 1320 bytes
---- constant_phrase 20 objects, 1280 bytes
---- build_script 40 objects, 1280 bytes
---- constant_phrase 20 objects, 1280 bytes
---- invocation_options_array 1 x 100 objects, 1224 bytes
---- hierarchy_metadatum 15 objects, 1200 bytes
---- quantifier 16 objects, 1024 bytes
@ -156,17 +156,17 @@ Total memory consumption was 257518K = 251 MB
---- cached_understanding 21 objects, 840 bytes
---- runtime_kind_structure 13 objects, 832 bytes
---- phrase_option_array 1 x 100 objects, 824 bytes
---- pipeline_stage 17 objects, 816 bytes
---- target_vm 6 objects, 816 bytes
---- pipeline_stage 17 objects, 816 bytes
---- generated_segment 25 objects, 800 bytes
---- inter_data_type 14 objects, 784 bytes
---- submodule_identity 23 objects, 736 bytes
---- implication 13 objects, 728 bytes
---- rulebook_outcome 17 objects, 680 bytes
---- inform_language 6 objects, 672 bytes
---- I6T_intervention 8 objects, 640 bytes
---- inter_warehouse_room 10 objects, 640 bytes
---- relation_guard 5 objects, 640 bytes
---- I6T_intervention 8 objects, 640 bytes
---- nascent_array 7 objects, 616 bytes
---- inbuild_search_result 15 objects, 600 bytes
---- named_rulebook_outcome 15 objects, 600 bytes
@ -181,46 +181,47 @@ Total memory consumption was 257518K = 251 MB
---- article_usage 8 objects, 384 bytes
---- source_file 5 objects, 360 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
---- up_family 9 objects, 288 bytes
---- grammatical_category 8 objects, 320 bytes
---- door_dir_notice 5 objects, 320 bytes
---- build_step 4 objects, 288 bytes
---- up_family 9 objects, 288 bytes
---- explicit_bp_data 5 objects, 280 bytes
---- door_to_notice 5 objects, 280 bytes
---- inform_pipeline 4 objects, 256 bytes
---- verb_usage_tier 5 objects, 240 bytes
---- adjective_meaning_family 7 objects, 224 bytes
---- test_scenario 1 object, 208 bytes
---- compilation_unit 5 objects, 200 bytes
---- build_skill 5 objects, 200 bytes
---- plural_dictionary_entry 4 objects, 192 bytes
---- compilation_unit 5 objects, 200 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
---- inference_subject_family 5 objects, 160 bytes
---- inter_architecture 4 objects, 160 bytes
---- pointer_allocation 2 objects, 160 bytes
---- link_instruction 4 objects, 160 bytes
---- code_generation_target 4 objects, 160 bytes
---- inference_subject_family 5 objects, 160 bytes
---- element_activation 4 objects, 128 bytes
---- codegen_pipeline 1 object, 128 bytes
---- inbuild_nest 3 objects, 120 bytes
---- inform_kit_ittt 2 objects, 96 bytes
---- compile_task_data 1 object, 80 bytes
---- list_together_routine 2 objects, 80 bytes
---- article 2 objects, 80 bytes
---- list_together_routine 2 objects, 80 bytes
---- inter_warehouse 1 object, 56 bytes
---- build_methodology 1 object, 56 bytes
---- star_invention 1 object, 48 bytes
---- HTML_file_state 1 object, 48 bytes
---- blorb_figure 1 object, 48 bytes
---- parse_name_notice 1 object, 40 bytes
---- kind_template_definition 1 object, 40 bytes
---- loop_over_scope 1 object, 40 bytes
---- by_routine_bp_data 1 object, 40 bytes
---- parse_name_notice 1 object, 40 bytes
37.5% was used for memory not allocated for objects:
16.0% text stream storage 42223560 bytes in 265554 claims
16.0% text stream storage 42223548 bytes in 265554 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
@ -237,5 +238,5 @@ Total memory consumption was 257518K = 251 MB
---- emitter array storage 14368 bytes in 8 claims
---- code generation workspace for objects 9200 bytes in 9 claims
20.1% was overhead - 53259872 bytes = 52011K = 50 MB
20.1% was overhead - 53258848 bytes = 52010K = 50 MB

View file

@ -1,36 +1,35 @@
100.0% in inform7 run
67.3% in compilation to Inter
25.9% in //Phrases::Manager::compile_first_block//
8.6% in //Phrases::Manager::compile_as_needed//
7.2% in //Strings::compile_responses//
6.4% in //World::Compile::compile//
3.7% in //MajorNodes::pre_pass//
3.3% in //MajorNodes::pass_1//
66.7% in compilation to Inter
25.5% in //Phrases::Manager::compile_first_block//
8.5% in //Phrases::Manager::compile_as_needed//
7.0% in //Strings::compile_responses//
6.2% in //World::Compile::compile//
3.8% in //MajorNodes::pre_pass//
3.4% in //MajorNodes::pass_1//
2.0% in //Phrases::Manager::RulePrintingRule_routine//
1.9% in //Phrases::Manager::rulebooks_array//
1.1% in //RTVerbs::ConjugateVerb//
0.8% in //Phrases::Manager::traverse//
0.6% in //Phrases::Manager::parse_rule_parameters//
0.4% in //Phrases::Manager::compile_rulebooks//
0.4% in //World::complete//
0.7% in //Phrases::Manager::traverse//
0.5% in //Phrases::Manager::parse_rule_parameters//
0.5% in //World::complete//
0.3% in //MajorNodes::pass_2//
0.3% in //RTRelations::compile_defined_relations//
0.3% in //Phrases::Manager::compile_rulebooks//
0.1% in //PL::Parsing::Verbs::compile_all//
0.1% in //RTKinds::compile_data_type_support_routines//
0.1% in //RTRelations::compile_defined_relations//
0.1% in //Task::make_built_in_kind_constructors//
3.3% not specifically accounted for
30.2% in running Inter pipeline
10.3% in step preparation
9.5% in inter step 2/12: link
3.4% not specifically accounted for
30.9% in running Inter pipeline
10.1% in step preparation
9.9% in inter step 2/12: link
7.2% 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
1.7% not specifically accounted for
1.9% in supervisor
0.5% not specifically accounted for
2.1% not specifically accounted for
2.0% in supervisor
0.2% not specifically accounted for

View file

@ -624,7 +624,7 @@ further sub-cases later.
@<Case 13 - X OF Y vs ADJECTIVE@> =
if (global_pass_state.pass == 1) return;
unary_predicate *pred = Node::get_predicate(py);
if (Adjectives::Meanings::has_ENUMERATIVE_meaning(AdjectivalPredicates::to_adjective(pred))) {
if (AdjectiveMeanings::has_ENUMERATIVE_meaning(AdjectivalPredicates::to_adjective(pred))) {
property *prn = Properties::Valued::obtain(Node::get_text(px->down->next));
if (Node::get_type(px->down) == WITH_NT) {
Problems::Using::assertion_problem(Task::syntax_tree(), _p_(PM_EOOwnerMutable),

View file

@ -96,7 +96,7 @@ void Assertions::Implications::new(parse_node *px, parse_node *py) {
@<Check that the conclusion involves only a single either/or property@> =
unary_predicate *pred = Node::get_predicate(py);
property *prn = Adjectives::Meanings::has_EORP_meaning(AdjectivalPredicates::to_adjective(pred), NULL);
property *prn = AdjectiveMeanings::has_EORP_meaning(AdjectivalPredicates::to_adjective(pred), NULL);
if (prn == NULL) {
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_ImplicationValueProperty),
"that's an implication where the outcome is an adjective other than "
@ -222,7 +222,7 @@ int Assertions::Implications::check_implications_of(inference_subject *domain,
LOGIF(IMPLICATIONS, "$D => $T (certainty %d; changed state %d)\n",
imp->if_spec, imp->then_pn, imp->implied_likelihood, conclusion_state);
property *conclusion_prop = Adjectives::Meanings::has_EORP_meaning(
property *conclusion_prop = AdjectiveMeanings::has_EORP_meaning(
AdjectivalPredicates::to_adjective(pred), NULL);
@<Check that the conclusion is not impossible@>;

View file

@ -122,7 +122,7 @@ int Refiner::nominalise_adjective(parse_node *p) {
if ((p) && (Node::get_type(p) == ADJECTIVE_NT)) {
unary_predicate *pred = Node::get_predicate(p);
if (AdjectivalPredicates::parity(pred) == TRUE) {
instance *q = Adjectives::Meanings::has_ENUMERATIVE_meaning(
instance *q = AdjectiveMeanings::has_ENUMERATIVE_meaning(
AdjectivalPredicates::to_adjective(pred));
if (q) Refiner::give_spec_to_noun(p, Rvalues::from_instance(q));
}

View file

@ -1,4 +1,4 @@
[Adjectives::Meanings::] Adjective Meanings.
[AdjectiveMeanings::] Adjective Meanings.
One individual meaning which an adjective can have.
@ -46,16 +46,26 @@ This enables "non-empty" for texts (say) to be defined identically with
"empty" for texts, but with the |meaning_parity| flag set to |FALSE|
rather than |TRUE|.
@d CONDITION_KADJ 1 /* defined by a condition in I7 source text */
@d PHRASE_KADJ 2 /* defined by an explicit but nameless rule */
@d I6_ROUTINE_KADJ 3 /* defined by a named I6 routine */
@d I6_CONDITION_KADJ 4 /* defined by an explicit I6 schema */
@d MEASUREMENT_KADJ 5 /* defined by numerical comparison with a property value */
@d ENUMERATIVE_KADJ 6 /* defined by a property like "colour" with named values */
@d EORP_KADJ 7 /* defined by an either/or property like "closed" */
=
typedef struct adjective_meaning_family {
struct method_set *methods;
int parsing_priority;
CLASS_DEFINITION
} adjective_meaning_family;
adjective_meaning_family *AdjectiveMeanings::new_family(int N) {
adjective_meaning_family *f = CREATE(adjective_meaning_family);
f->parsing_priority = N;
f->methods = Methods::new_set();
return f;
}
@
=
typedef struct adjective_meaning {
struct adjective_meaning_family *family;
struct wording adjective_index_text; /* text to use in the Phrasebook index */
struct parse_node *defined_at; /* from what sentence this came (if it did) */
@ -72,7 +82,6 @@ typedef struct adjective_meaning {
int meaning_parity; /* meaning understood positively? */
struct adjective_meaning *am_negated_from; /* if explicitly constructed as such */
int adjective_form; /* one of the |*_KADJ| constants: see below */
general_pointer detailed_meaning; /* to the relevant structure */
int task_via_support_routine[NO_ADJECTIVE_TASKS + 1];
struct i6_schema i6s_to_transfer_to_SR[NO_ADJECTIVE_TASKS + 1]; /* where |TRUE| */
@ -130,7 +139,7 @@ which is why the |adjective_meaning| structure contains these -- see below.
adjectival phrase in sorted order, so:
@d LOOP_OVER_SORTED_MEANINGS(aph, am)
for (am = Adjectives::Meanings::get_sorted_definition_list(aph); am; am=am->next_sorted)
for (am = AdjectiveMeanings::get_sorted_definition_list(aph); am; am=am->next_sorted)
@h Symbols.
@ -142,10 +151,10 @@ typedef struct adjective_compilation_data {
@
@d ADJECTIVE_COMPILATION_LINGUISTICS_CALLBACK Adjectives::Meanings::initialise
@d ADJECTIVE_COMPILATION_LINGUISTICS_CALLBACK AdjectiveMeanings::initialise
=
void Adjectives::Meanings::initialise(adjective *adj) {
void AdjectiveMeanings::initialise(adjective *adj) {
adj->adjective_compilation.aph_package = Hierarchy::package(CompilationUnits::current(), ADJECTIVES_HAP);
adj->adjective_compilation.aph_iname = Hierarchy::make_iname_in(ADJECTIVE_HL, adj->adjective_compilation.aph_package);
}
@ -158,7 +167,7 @@ typedef struct adjective_iname_holder {
CLASS_DEFINITION
} adjective_iname_holder;
inter_name *Adjectives::Meanings::iname(adjective *aph, int task, int weak_id) {
inter_name *AdjectiveMeanings::iname(adjective *aph, int task, int weak_id) {
adjective_iname_holder *aih;
LOOP_OVER(aih, adjective_iname_holder)
if ((aih->aph_held == aph) && (aih->task_code == task) && (aih->weak_ID_of_domain == weak_id))
@ -174,10 +183,10 @@ inter_name *Adjectives::Meanings::iname(adjective *aph, int task, int weak_id) {
@h The block of definitions.
@d ADJECTIVE_MEANING_LINGUISTICS_CALLBACK Adjectives::Meanings::new_block
@d ADJECTIVE_MEANING_LINGUISTICS_CALLBACK AdjectiveMeanings::new_block
=
void Adjectives::Meanings::new_block(adjective *adj) {
void AdjectiveMeanings::new_block(adjective *adj) {
adj->adjective_meanings.possible_meanings = NULL;
adj->adjective_meanings.sorted_meanings = NULL;
}
@ -194,7 +203,7 @@ in the case of texts and table names.) It's convenient and costs little
memory to keep the sorted list as a second linked list.
=
adjective *Adjectives::Meanings::declare(adjective_meaning *am,
adjective *AdjectiveMeanings::declare(adjective_meaning *am,
wording W, int route) {
adjective *aph = Adjectives::declare(W, NULL);
adjective_meaning *aml = aph->adjective_meanings.possible_meanings;
@ -213,14 +222,14 @@ and it can only be declared once. So every AM belongs to one and only one
APH, which we can read off as follows:
=
adjective *Adjectives::Meanings::get_aph_from_am(adjective_meaning *am) {
adjective *AdjectiveMeanings::get_aph_from_am(adjective_meaning *am) {
return am->owning_adjective;
}
@ And here we log the unsorted meaning list.
=
void Adjectives::Meanings::log_meanings(adjective *aph) {
void AdjectiveMeanings::log_meanings(adjective *aph) {
adjective_meaning *am;
int n;
if (aph == NULL) { LOG("<null-APH>\n"); return; }
@ -259,17 +268,17 @@ unsorted list, which is helpful since we may need to call this routine
early in the run when sorting cannot yet be done.
=
int Adjectives::Meanings::applicable_to(adjective *aph, kind *K) {
int AdjectiveMeanings::applicable_to(adjective *aph, kind *K) {
if (aph) {
adjective_meaning *am;
for (am = aph->adjective_meanings.possible_meanings; am; am = am->next_meaning) {
if (am->domain_infs == NULL) {
if (am->setting_domain) @<Issue a problem for a circularity@>;
am->setting_domain = TRUE;
Adjectives::Meanings::set_definition_domain(am, TRUE);
AdjectiveMeanings::set_definition_domain(am, TRUE);
am->setting_domain = FALSE;
}
kind *am_kind = Adjectives::Meanings::get_domain(am);
kind *am_kind = AdjectiveMeanings::get_domain(am);
if (Kinds::Behaviour::is_object(am_kind)) {
if (K == NULL) return TRUE;
if (Kinds::Behaviour::is_object(K)) return TRUE;
@ -300,18 +309,18 @@ Does a given APH have any interpretation as an enumerated property value,
or an either/or property? If so we return the earliest known.
=
instance *Adjectives::Meanings::has_ENUMERATIVE_meaning(adjective *aph) {
instance *AdjectiveMeanings::has_ENUMERATIVE_meaning(adjective *aph) {
adjective_meaning *am;
for (am = aph->adjective_meanings.possible_meanings; am; am = am->next_meaning)
if (am->adjective_form == ENUMERATIVE_KADJ)
if (InstanceAdjectives::is_enumerative(am))
return RETRIEVE_POINTER_instance(am->detailed_meaning);
return NULL;
}
property *Adjectives::Meanings::has_EORP_meaning(adjective *aph, int *sense) {
property *AdjectiveMeanings::has_EORP_meaning(adjective *aph, int *sense) {
if (aph)
for (adjective_meaning *am = aph->adjective_meanings.possible_meanings; am; am = am->next_meaning)
if (am->adjective_form == EORP_KADJ) {
if (Properties::EitherOr::is_either_or_adjective(am)) {
if (sense) *sense = am->meaning_parity;
return RETRIEVE_POINTER_property(am->detailed_meaning);
}
@ -335,7 +344,7 @@ sentence asserts a truth, not a falsity. It then calls the following
routine, with |parity| equal to |TRUE|.
What happens is that the list of definitions for "fixed in place" is
strictly checked in logical precedence order, and that |Adjectives::Meanings::assert| is
strictly checked in logical precedence order, and that |AdjectiveMeanings::assert| is
eventually called on the logically narrowest definition which the "ormolu
clock" matches. (That will probably be the definition for the "fixed
in place" either/or property for things, unless someone has given the
@ -348,15 +357,15 @@ matched, and |FALSE| if there was no definition which applied, or if
none of those which did could be asserted for it.
=
int Adjectives::Meanings::assert(adjective *aph, kind *kind_domain,
int AdjectiveMeanings::assert(adjective *aph, kind *kind_domain,
inference_subject *infs_to_assert_on, parse_node *val_to_assert_on, int parity) {
adjective_meaning *am;
Adjectives::Meanings::sort(aph);
AdjectiveMeanings::sort(aph);
for (am = aph->adjective_meanings.sorted_meanings; am; am = am->next_sorted) {
if (Adjectives::Meanings::domain_weak_match(kind_domain,
Adjectives::Meanings::get_domain(am)) == FALSE) continue;
if (Adjectives::Meanings::domain_subj_compare(infs_to_assert_on, am) == FALSE) continue;
if (Adjectives::Meanings::assert_single(am, infs_to_assert_on, val_to_assert_on, parity)) return TRUE;
if (AdjectiveMeanings::domain_weak_match(kind_domain,
AdjectiveMeanings::get_domain(am)) == FALSE) continue;
if (AdjectiveMeanings::domain_subj_compare(infs_to_assert_on, am) == FALSE) continue;
if (AdjectiveMeanings::assert_single(am, infs_to_assert_on, val_to_assert_on, parity)) return TRUE;
}
return FALSE;
}
@ -367,32 +376,32 @@ After meanings have been declared, a typical APH will have a disordered
sorts the possibles list into the sorted list.
=
void Adjectives::Meanings::sort(adjective *aph) {
void AdjectiveMeanings::sort(adjective *aph) {
if (aph == NULL) internal_error("tried to sort meanings for null APH");
aph->adjective_meanings.sorted_meanings =
Adjectives::Meanings::list_sort(aph->adjective_meanings.possible_meanings);
AdjectiveMeanings::list_sort(aph->adjective_meanings.possible_meanings);
}
@ And voil\`a, the result can be read here:
=
adjective_meaning *Adjectives::Meanings::get_sorted_definition_list(adjective *aph) {
adjective_meaning *AdjectiveMeanings::get_sorted_definition_list(adjective *aph) {
return aph->adjective_meanings.sorted_meanings;
}
@ Occasionally we just want one meaning:
=
adjective_meaning *Adjectives::Meanings::first_meaning(adjective *aph) {
adjective_meaning *AdjectiveMeanings::first_meaning(adjective *aph) {
return aph->adjective_meanings.possible_meanings;
}
adjective_meaning *Adjectives::Meanings::list_sort(adjective_meaning *unsorted_head) {
adjective_meaning *AdjectiveMeanings::list_sort(adjective_meaning *unsorted_head) {
adjective_meaning *sorted_head = NULL;
adjective_meaning *am, *am2;
for (am = unsorted_head; am; am = am->next_meaning)
if (am->domain_infs == NULL)
Adjectives::Meanings::set_definition_domain(am, TRUE);
AdjectiveMeanings::set_definition_domain(am, TRUE);
for (am = unsorted_head; am; am = am->next_meaning) {
if (sorted_head == NULL) {
sorted_head = am;
@ -400,7 +409,7 @@ adjective_meaning *Adjectives::Meanings::list_sort(adjective_meaning *unsorted_h
} else {
adjective_meaning *lastdef = NULL;
for (am2 = sorted_head; am2; am2 = am2->next_sorted) {
if (Adjectives::Meanings::compare(am, am2) == 1) {
if (AdjectiveMeanings::compare(am, am2) == 1) {
if (lastdef == NULL) {
sorted_head = am;
am->next_sorted = am2;
@ -425,10 +434,10 @@ adjective_meaning *Adjectives::Meanings::list_sort(adjective_meaning *unsorted_h
@h Individual meanings.
So you want to define a new meaning for an adjective? Here's the procedure:
(1) Call |Adjectives::Meanings::new| to create it. The |form| should
(1) Call |AdjectiveMeanings::new| to create it. The |form| should
be one of the |*_KADJ| constants, and the |details| should contain a pointer to
the data structure it uses. The word range is used for indexing only.
(2) Call |Adjectives::Meanings::declare| to associate it with a given
(2) Call |AdjectiveMeanings::declare| to associate it with a given
adjective name, and thus have it added to the possible meanings list of the
appropriate APH.
(3) Give it a domain of definition (see below).
@ -436,7 +445,8 @@ appropriate APH.
below) -- this makes coding what the adjective compiles to much easier.
=
adjective_meaning *Adjectives::Meanings::new(int form, general_pointer details, wording W) {
adjective_meaning *AdjectiveMeanings::new(adjective_meaning_family *family,
general_pointer details, wording W) {
adjective_meaning *am = CREATE(adjective_meaning);
am->defined_at = current_sentence;
am->adjective_index_text = W;
@ -445,7 +455,7 @@ adjective_meaning *Adjectives::Meanings::new(int form, general_pointer details,
am->next_sorted = NULL;
am->domain_text = EMPTY_WORDING;
am->domain_infs = NULL; am->domain_kind = NULL; am->setting_domain = FALSE;
am->adjective_form = form;
am->family = family;
am->detailed_meaning = details;
am->defined_already = FALSE;
am->problems_thrown = 0;
@ -463,13 +473,13 @@ adjective_meaning *Adjectives::Meanings::new(int form, general_pointer details,
@ Negating an AM.
If you want to define an adjective as the logical negation of an existing one,
take any AM which has been through stages (1) to (4) and then apply
|Adjectives::Meanings::negate| to create a new AM. Then use
|Adjectives::Meanings::declare| to associate this with a (presumably
|AdjectiveMeanings::negate| to create a new AM. Then use
|AdjectiveMeanings::declare| to associate this with a (presumably
different) name, but there's no need to specify its I6 schemas or its domain --
those are inherited.
=
adjective_meaning *Adjectives::Meanings::negate(adjective_meaning *am) {
adjective_meaning *AdjectiveMeanings::negate(adjective_meaning *am) {
adjective_meaning *neg = CREATE(adjective_meaning);
neg->defined_at = current_sentence;
neg->adjective_index_text = am->adjective_index_text;
@ -478,7 +488,7 @@ adjective_meaning *Adjectives::Meanings::negate(adjective_meaning *am) {
neg->next_sorted = NULL;
neg->domain_text = am->domain_text;
neg->domain_infs = am->domain_infs; neg->domain_kind = am->domain_kind;
neg->adjective_form = am->adjective_form;
neg->family = am->family;
neg->detailed_meaning = am->detailed_meaning;
neg->defined_already = FALSE;
neg->problems_thrown = 0;
@ -496,9 +506,9 @@ adjective_meaning *Adjectives::Meanings::negate(adjective_meaning *am) {
return neg;
}
int Adjectives::Meanings::get_form(adjective_meaning *am) {
if (am == NULL) return -1;
return am->adjective_form;
adjective_meaning_family *AdjectiveMeanings::get_form(adjective_meaning *am) {
if (am == NULL) return NULL;
return am->family;
}
@h The domain of validity.
@ -524,7 +534,7 @@ As this last example shows, two domains can be completely disjoint and still
make a weak match.
=
int Adjectives::Meanings::domain_weak_match(kind *K1, kind *K2) {
int AdjectiveMeanings::domain_weak_match(kind *K1, kind *K2) {
if (RTKinds::weak_id(K1) == RTKinds::weak_id(K2))
return TRUE;
return FALSE;
@ -534,7 +544,7 @@ int Adjectives::Meanings::domain_weak_match(kind *K1, kind *K2) {
within the domain of an adjective meaning.
=
int Adjectives::Meanings::domain_subj_compare(inference_subject *infs, adjective_meaning *am) {
int AdjectiveMeanings::domain_subj_compare(inference_subject *infs, adjective_meaning *am) {
instance *I = InstanceSubjects::to_object_instance(infs);
if (I == NULL) return TRUE;
if (am->domain_infs == KindSubjects::from_kind(K_object)) return TRUE;
@ -563,13 +573,13 @@ over specific constructed kinds.
To set the domain, call exactly one of the following three routines:
=
void Adjectives::Meanings::set_domain_text(adjective_meaning *am, wording W) {
void AdjectiveMeanings::set_domain_text(adjective_meaning *am, wording W) {
am->domain_infs = NULL; am->domain_kind = NULL;
am->domain_text = W;
Adjectives::Meanings::set_definition_domain(am, TRUE);
AdjectiveMeanings::set_definition_domain(am, TRUE);
}
void Adjectives::Meanings::set_domain_from_instance(adjective_meaning *am,
void AdjectiveMeanings::set_domain_from_instance(adjective_meaning *am,
instance *I) {
if (I == NULL) {
am->domain_infs = KindSubjects::from_kind(K_object);
@ -586,7 +596,7 @@ void Adjectives::Meanings::set_domain_from_instance(adjective_meaning *am,
disambiguation is used when applying adjectives to objects.
=
void Adjectives::Meanings::set_domain_from_kind(adjective_meaning *am, kind *K) {
void AdjectiveMeanings::set_domain_from_kind(adjective_meaning *am, kind *K) {
if ((K == NULL) || (Kinds::Behaviour::is_object(K))) K = K_object;
am->domain_infs = KindSubjects::from_kind(K);
am->domain_kind = K;
@ -596,13 +606,13 @@ void Adjectives::Meanings::set_domain_from_kind(adjective_meaning *am, kind *K)
@ And we can read the main domain thus:
=
kind *Adjectives::Meanings::get_domain(adjective_meaning *am) {
kind *AdjectiveMeanings::get_domain(adjective_meaning *am) {
if (am->domain_infs == NULL) return NULL;
return am->domain_kind;
}
kind *Adjectives::Meanings::get_domain_forcing(adjective_meaning *am) {
Adjectives::Meanings::set_definition_domain(am, TRUE);
kind *AdjectiveMeanings::get_domain_forcing(adjective_meaning *am) {
AdjectiveMeanings::set_definition_domain(am, TRUE);
if (am->domain_infs == NULL) return NULL;
return am->domain_kind;
}
@ -613,7 +623,7 @@ lazy evaluation trick -- the routine is called just before the domain is
actually needed.
=
void Adjectives::Meanings::set_definition_domain(adjective_meaning *am, int early) {
void AdjectiveMeanings::set_definition_domain(adjective_meaning *am, int early) {
if (am->domain_infs) return;
current_sentence = am->defined_at;
if (Wordings::empty(am->domain_text)) internal_error("undeclared domain kind for AM");
@ -735,7 +745,7 @@ between them.
Unlike our weak domain tests above, this is a strict test.
=
int Adjectives::Meanings::compare(adjective_meaning *am1, adjective_meaning *am2) {
int AdjectiveMeanings::compare(adjective_meaning *am1, adjective_meaning *am2) {
if (am1 == am2) return 0;
if ((am1->domain_infs) && (am2->domain_infs == NULL)) return 1;
if ((am1->domain_infs == NULL) && (am2->domain_infs)) return -1;
@ -767,8 +777,8 @@ author's source text.)
@<Worry about definitions of the same adjective on the same domain@> =
if ((Wordings::nonempty(Node::get_text(am1->defined_at))) &&
(Wordings::nonempty(Node::get_text(am2->defined_at))) &&
(am1->adjective_form != ENUMERATIVE_KADJ) &&
(am2->adjective_form != ENUMERATIVE_KADJ)) {
(InstanceAdjectives::is_enumerative(am1) == FALSE) &&
(InstanceAdjectives::is_enumerative(am2) == FALSE)) {
inform_extension *ef1 =
Extensions::corresponding_to(
Lexer::file_of_origin(Wordings::first_wn(Node::get_text(am1->defined_at))));
@ -840,9 +850,9 @@ be run-time type-checking code to apply. In other cases, the provider
can choose to go via a support routine or not.
=
i6_schema *Adjectives::Meanings::set_i6_schema(adjective_meaning *am,
i6_schema *AdjectiveMeanings::set_i6_schema(adjective_meaning *am,
int T, int via_support) {
kind *K = Adjectives::Meanings::get_domain(am);
kind *K = AdjectiveMeanings::get_domain(am);
if (K == NULL) K = K_object;
if (Kinds::Behaviour::is_object(K)) via_support = TRUE;
am->task_via_support_routine[T] = via_support;
@ -860,16 +870,16 @@ run-time, we return |NULL| as our schema, and the code-generator will use
that to issue a suitable problem message.
=
i6_schema *Adjectives::Meanings::get_i6_schema(adjective *aph,
i6_schema *AdjectiveMeanings::get_i6_schema(adjective *aph,
kind *kind_domain, int T) {
adjective_meaning *am;
if (kind_domain == NULL) kind_domain = K_object;
Adjectives::Meanings::sort(aph);
AdjectiveMeanings::sort(aph);
for (am = aph->adjective_meanings.sorted_meanings; am; am = am->next_sorted) {
kind *am_kind = Adjectives::Meanings::get_domain(am);
if (am_kind == NULL) Adjectives::Meanings::set_definition_domain(am, FALSE);
if (Adjectives::Meanings::domain_weak_match(kind_domain, am_kind) == FALSE) continue;
Adjectives::Meanings::compiling_soon(am, T);
kind *am_kind = AdjectiveMeanings::get_domain(am);
if (am_kind == NULL) AdjectiveMeanings::set_definition_domain(am, FALSE);
if (AdjectiveMeanings::domain_weak_match(kind_domain, am_kind) == FALSE) continue;
AdjectiveMeanings::compiling_soon(am, T);
switch (am->task_via_support_routine[T]) {
case FALSE: return &(am->i6s_for_runtime_task[T]);
case TRUE:
@ -896,7 +906,7 @@ negation does not, and so must use those of the original.
case NOW_ADJECTIVE_FALSE_TASK: task = NOW_ADJECTIVE_TRUE_TASK; break;
}
}
inter_name *iname = Adjectives::Meanings::iname(use_aph, task, RTKinds::weak_id(am_kind));
inter_name *iname = AdjectiveMeanings::iname(use_aph, task, RTKinds::weak_id(am_kind));
Calculus::Schemas::modify(&(am->i6s_to_transfer_to_SR[T]), "*=-(%s%n(*1))",
negation_operator, iname);
@ -907,20 +917,20 @@ don't know which routine to expand out. The convention is: a meaning for
objects, if there is one; otherwise the first-declared meaning.
=
int Adjectives::Meanings::write_adjective_test_routine(value_holster *VH,
int AdjectiveMeanings::write_adjective_test_routine(value_holster *VH,
adjective *aph) {
i6_schema *sch;
int weak_id = RTKinds::weak_id(K_object);
sch = Adjectives::Meanings::get_i6_schema(aph, NULL,
sch = AdjectiveMeanings::get_i6_schema(aph, NULL,
TEST_ADJECTIVE_TASK);
if (sch == NULL) {
if (aph->adjective_meanings.possible_meanings == NULL) return FALSE;
kind *am_kind =
Adjectives::Meanings::get_domain(aph->adjective_meanings.possible_meanings);
AdjectiveMeanings::get_domain(aph->adjective_meanings.possible_meanings);
if (am_kind == NULL) return FALSE;
weak_id = RTKinds::weak_id(am_kind);
}
Produce::val_iname(Emit::tree(), K_value, Adjectives::Meanings::iname(aph, TEST_ADJECTIVE_TASK, weak_id));
Produce::val_iname(Emit::tree(), K_value, AdjectiveMeanings::iname(aph, TEST_ADJECTIVE_TASK, weak_id));
return TRUE;
}
@ -928,19 +938,19 @@ int Adjectives::Meanings::write_adjective_test_routine(value_holster *VH,
task.
=
void Adjectives::Meanings::pass_task_to_support_routine(adjective_meaning *am,
void AdjectiveMeanings::pass_task_to_support_routine(adjective_meaning *am,
int T) {
Adjectives::Meanings::set_i6_schema(am, T, TRUE);
AdjectiveMeanings::set_i6_schema(am, T, TRUE);
}
@ Some kinds of adjective find it useful to do some preparation work just
before first compilation, but only once. For those, the ready flag is available:
=
int Adjectives::Meanings::get_ready_flag(adjective_meaning *am) {
int AdjectiveMeanings::get_ready_flag(adjective_meaning *am) {
return am->am_ready_flag;
}
void Adjectives::Meanings::set_ready_flag(adjective_meaning *am) {
void AdjectiveMeanings::set_ready_flag(adjective_meaning *am) {
am->am_ready_flag = TRUE;
}
@ -951,11 +961,11 @@ The following utility is used to loop through the sorted meaning list,
skipping over any which have been dealt with already.
=
adjective_meaning *Adjectives::Meanings::list_next_domain_kind(adjective_meaning *am, kind **K, int T) {
while ((am) && ((am->defined_already) || (Adjectives::Meanings::compilation_possible(am, T) == FALSE)))
adjective_meaning *AdjectiveMeanings::list_next_domain_kind(adjective_meaning *am, kind **K, int T) {
while ((am) && ((am->defined_already) || (AdjectiveMeanings::compilation_possible(am, T) == FALSE)))
am = am->next_sorted;
if (am == NULL) return NULL;
*K = Adjectives::Meanings::get_domain(am);
*K = AdjectiveMeanings::get_domain(am);
return am->next_sorted;
}
@ -967,7 +977,7 @@ routine might handle "detailed" for rulebooks, and another might handle
many AMs.
=
void Adjectives::Meanings::compile_support_code(void) {
void AdjectiveMeanings::compile_support_code(void) {
@<Ensure, just in case, that domains exist and are sorted on@>;
int T;
for (T=1; T<=NO_ADJECTIVE_TASKS; T++) {
@ -978,7 +988,7 @@ void Adjectives::Meanings::compile_support_code(void) {
am->defined_already = FALSE;
for (am = aph->adjective_meanings.sorted_meanings; am; ) {
kind *K = NULL;
am = Adjectives::Meanings::list_next_domain_kind(am, &K, T);
am = AdjectiveMeanings::list_next_domain_kind(am, &K, T);
if (K)
@<Compile adjective definition for this atomic kind of value@>;
}
@ -995,10 +1005,10 @@ known in order to sort.
LOOP_OVER(aph, adjective) {
adjective_meaning *am;
for (am = aph->adjective_meanings.possible_meanings; am; am = am->next_meaning) {
Adjectives::Meanings::set_definition_domain(am, FALSE);
AdjectiveMeanings::set_definition_domain(am, FALSE);
am->defined_already = FALSE;
}
Adjectives::Meanings::sort(aph);
AdjectiveMeanings::sort(aph);
}
@ The following is a standard way to compile a one-off routine.
@ -1008,7 +1018,7 @@ known in order to sort.
LOGIF(VARIABLE_CREATIONS, "Compiling support code for %W applying to %u, task %d\n",
W, K, T);
inter_name *iname = Adjectives::Meanings::iname(aph, T, RTKinds::weak_id(K));
inter_name *iname = AdjectiveMeanings::iname(aph, T, RTKinds::weak_id(K));
packaging_state save = Routines::begin(iname);
@<Add an it-variable to represent the value or object in the domain@>;
@ -1023,7 +1033,7 @@ known in order to sort.
if (problem_count == 0) {
local_variable *it_lv = LocalVariables::it_variable();
inter_symbol *it_s = LocalVariables::declare_this(it_lv, FALSE, 8);
Adjectives::Meanings::list_compile(aph->adjective_meanings.sorted_meanings, Frames::current_stack_frame(), K, T, it_s);
AdjectiveMeanings::list_compile(aph->adjective_meanings.sorted_meanings, Frames::current_stack_frame(), K, T, it_s);
}
Produce::rfalse(Emit::tree());
@ -1059,8 +1069,8 @@ wasted allocating memory and copying the block value first.)
kind *add_K = K_number;
adjective_meaning *am;
for (am = aph->adjective_meanings.sorted_meanings; am; am = am->next_sorted)
if ((am->adjective_form != I6_ROUTINE_KADJ) &&
(Adjectives::Meanings::domain_weak_match(K, Adjectives::Meanings::get_domain(am))))
if ((Phrases::RawPhrasal::is_by_Inter_function(am) == FALSE) &&
(AdjectiveMeanings::domain_weak_match(K, AdjectiveMeanings::get_domain(am))))
add_K = K;
LocalVariables::add_pronoun(Frames::current_stack_frame(), EMPTY_WORDING, add_K);
@ -1072,12 +1082,12 @@ test at run-time. In practice, at present the only weak domain which might
have multiple definitions is "object", but that may change.
=
void Adjectives::Meanings::list_compile(adjective_meaning *list_head,
void AdjectiveMeanings::list_compile(adjective_meaning *list_head,
ph_stack_frame *phsf, kind *K, int T, inter_symbol *t0_s) {
adjective_meaning *am;
for (am = list_head; am; am = am->next_sorted)
if ((Adjectives::Meanings::compilation_possible(am, T)) &&
(Adjectives::Meanings::domain_weak_match(K, Adjectives::Meanings::get_domain(am)))) {
if ((AdjectiveMeanings::compilation_possible(am, T)) &&
(AdjectiveMeanings::domain_weak_match(K, AdjectiveMeanings::get_domain(am)))) {
current_sentence = am->defined_at;
Produce::inv_primitive(Emit::tree(), IF_BIP);
Produce::down(Emit::tree());
@ -1090,7 +1100,7 @@ void Adjectives::Meanings::list_compile(adjective_meaning *list_head,
Produce::inv_primitive(Emit::tree(), NOT_BIP);
Produce::down(Emit::tree());
}
Adjectives::Meanings::emit_meaning(am, T, phsf);
AdjectiveMeanings::emit_meaning(am, T, phsf);
am->defined_already = TRUE;
if ((am->meaning_parity == FALSE) && (T == TEST_ADJECTIVE_TASK)) {
Produce::up(Emit::tree());
@ -1127,43 +1137,43 @@ that it was "unless" (a negative sense); or $0$, meaning that instead
of a condition, a rule was supplied. (Most kinds of adjective will only
claim if the sense is $1$; some never claim at all.)
@e PARSE_ADJM_MTID
=
adjective_meaning *Adjectives::Meanings::parse(parse_node *q,
INT_METHOD_TYPE(PARSE_ADJM_MTID, adjective_meaning_family *f,
adjective_meaning **result, parse_node *q,
int sense, wording AW, wording DNW, wording CONW, wording CALLW)
adjective_meaning *AdjectiveMeanings::parse(parse_node *q,
int sense, wording AW, wording DNW, wording CONW, wording CALLW) {
adjective_meaning *am = NULL;
if (am == NULL) am = Properties::EitherOr::ADJ_parse(q, sense, AW, DNW, CONW, CALLW);
if (am == NULL) am = InstanceAdjectives::parse(q, sense, AW, DNW, CONW, CALLW);
if (am == NULL) am = Properties::Measurement::ADJ_parse(q, sense, AW, DNW, CONW, CALLW);
if (am == NULL) am = Phrases::RawCondition::ADJ_parse(q, sense, AW, DNW, CONW, CALLW);
if (am == NULL) am = Phrases::RawPhrasal::ADJ_parse(q, sense, AW, DNW, CONW, CALLW);
if (am == NULL) am = Phrases::Phrasal::ADJ_parse(q, sense, AW, DNW, CONW, CALLW);
if (am == NULL) am = Phrases::Condition::ADJ_parse(q, sense, AW, DNW, CONW, CALLW);
return am;
for (int priority = 0; priority < 10; priority++) {
adjective_meaning_family *f;
LOOP_OVER(f, adjective_meaning_family)
if (f->parsing_priority == priority)
@<Try the f family@>;
}
return NULL;
}
@<Try the f family@> =
adjective_meaning *am = NULL;
int rv = FALSE;
INT_METHOD_CALL(rv, f, PARSE_ADJM_MTID, &am, q, sense, AW, DNW, CONW, CALLW);
if (rv) return am;
@ 2. |*_KADJ_compiling_soon|. This warns the adjective that it will shortly be
needed in compilation, that is, that code will soon be compiled which uses it.
This advance warning is an opportunity to compile a schema for the adjective
at the last minute, but there is no obligation. There is also no return value.
@e COMPILING_SOON_ADJM_MTID
=
void Adjectives::Meanings::compiling_soon(adjective_meaning *am, int T) {
switch (am->adjective_form) {
case CONDITION_KADJ: Phrases::Condition::ADJ_compiling_soon(am,
RETRIEVE_POINTER_definition(am->detailed_meaning), T); break;
case I6_CONDITION_KADJ: Phrases::RawCondition::ADJ_compiling_soon(am,
RETRIEVE_POINTER_definition(am->detailed_meaning), T); break;
case I6_ROUTINE_KADJ: Phrases::RawPhrasal::ADJ_compiling_soon(am,
RETRIEVE_POINTER_definition(am->detailed_meaning), T); break;
case PHRASE_KADJ: Phrases::Phrasal::ADJ_compiling_soon(am,
RETRIEVE_POINTER_definition(am->detailed_meaning), T); break;
case MEASUREMENT_KADJ: Properties::Measurement::ADJ_compiling_soon(am,
RETRIEVE_POINTER_measurement_definition(am->detailed_meaning), T); break;
case ENUMERATIVE_KADJ: InstanceAdjectives::compiling_soon(am,
RETRIEVE_POINTER_instance(am->detailed_meaning), T); break;
case EORP_KADJ: Properties::EitherOr::ADJ_compiling_soon(am,
RETRIEVE_POINTER_property(am->detailed_meaning), T); break;
}
VOID_METHOD_TYPE(COMPILING_SOON_ADJM_MTID, adjective_meaning_family *f,
adjective_meaning *am, int T)
void AdjectiveMeanings::compiling_soon(adjective_meaning *am, int T) {
VOID_METHOD_CALL(am->family, COMPILING_SOON_ADJM_MTID, am, T);
}
@ 3. |*_KADJ_compile|. We should now either compile code which, in the
@ -1174,36 +1184,26 @@ tell Inform that the task is impossible.
Note that if an adjective has defined a schema to handle the task, then its
|*_KADJ_compile| is not needed and not consulted.
@e COMPILE_ADJM_MTID
=
int Adjectives::Meanings::emit_meaning(adjective_meaning *am, int T, ph_stack_frame *phsf) {
return Adjectives::Meanings::compile_inner(am, T, TRUE, phsf);
int AdjectiveMeanings::emit_meaning(adjective_meaning *am, int T, ph_stack_frame *phsf) {
return AdjectiveMeanings::compile_inner(am, T, TRUE, phsf);
}
int Adjectives::Meanings::compilation_possible(adjective_meaning *am, int T) {
return Adjectives::Meanings::compile_inner(am, T, FALSE, NULL);
int AdjectiveMeanings::compilation_possible(adjective_meaning *am, int T) {
return AdjectiveMeanings::compile_inner(am, T, FALSE, NULL);
}
int Adjectives::Meanings::compile_inner(adjective_meaning *am, int T, int emit_flag, ph_stack_frame *phsf) {
Adjectives::Meanings::compiling_soon(am, T);
INT_METHOD_TYPE(COMPILE_ADJM_MTID, adjective_meaning_family *f,
adjective_meaning *am, int T, int emit_flag, ph_stack_frame *phsf)
int AdjectiveMeanings::compile_inner(adjective_meaning *am, int T, int emit_flag, ph_stack_frame *phsf) {
AdjectiveMeanings::compiling_soon(am, T);
@<Use the I6 schema instead to compile the task, if one exists@>;
switch (am->adjective_form) {
case CONDITION_KADJ: return Phrases::Condition::ADJ_compile(
RETRIEVE_POINTER_definition(am->detailed_meaning), T, emit_flag, phsf);
case I6_ROUTINE_KADJ: return Phrases::RawPhrasal::ADJ_compile(
RETRIEVE_POINTER_definition(am->detailed_meaning), T, emit_flag, phsf);
case I6_CONDITION_KADJ: return Phrases::RawCondition::ADJ_compile(
RETRIEVE_POINTER_definition(am->detailed_meaning), T, emit_flag, phsf);
case PHRASE_KADJ: return Phrases::Phrasal::ADJ_compile(
RETRIEVE_POINTER_definition(am->detailed_meaning), T, emit_flag, phsf);
case MEASUREMENT_KADJ: return Properties::Measurement::ADJ_compile(
RETRIEVE_POINTER_measurement_definition(am->detailed_meaning), T, emit_flag, phsf);
case ENUMERATIVE_KADJ: return InstanceAdjectives::compile(
RETRIEVE_POINTER_instance(am->detailed_meaning), T, emit_flag, phsf);
case EORP_KADJ: return Properties::EitherOr::ADJ_compile(
RETRIEVE_POINTER_property(am->detailed_meaning), T, emit_flag, phsf);
}
internal_error("unknown KADJ code");
return FALSE;
int rv = FALSE;
INT_METHOD_CALL(rv, am->family, COMPILE_ADJM_MTID, am, T, emit_flag, phsf);
return rv;
}
@ We expand the I6 schema, placing the "it" variable -- a nameless call
@ -1226,37 +1226,22 @@ the adjective will hold (or not hold, according to |parity|) for the given
object or value; or return |FALSE| to tell Inform that this cannot be
asserted, which will trigger a problem message.
@e ASSERT_ADJM_MTID
=
int Adjectives::Meanings::assert_single(adjective_meaning *am, inference_subject *infs_to_assert_on,
parse_node *val_to_assert_on, int parity) {
INT_METHOD_TYPE(ASSERT_ADJM_MTID, adjective_meaning_family *f,
adjective_meaning *am, inference_subject *infs_to_assert_on,
parse_node *val_to_assert_on, int parity)
int AdjectiveMeanings::assert_single(adjective_meaning *am,
inference_subject *infs_to_assert_on, parse_node *val_to_assert_on, int parity) {
if (am->meaning_parity == FALSE) {
am = am->am_negated_from; parity = (parity)?FALSE:TRUE;
}
switch (am->adjective_form) {
case CONDITION_KADJ: return Phrases::Condition::ADJ_assert(
RETRIEVE_POINTER_definition(am->detailed_meaning),
infs_to_assert_on, val_to_assert_on, parity);
case I6_CONDITION_KADJ: return Phrases::RawCondition::ADJ_assert(
RETRIEVE_POINTER_definition(am->detailed_meaning),
infs_to_assert_on, val_to_assert_on, parity);
case I6_ROUTINE_KADJ: return Phrases::RawPhrasal::ADJ_assert(
RETRIEVE_POINTER_definition(am->detailed_meaning),
infs_to_assert_on, val_to_assert_on, parity);
case PHRASE_KADJ: return Phrases::Phrasal::ADJ_assert(
RETRIEVE_POINTER_definition(am->detailed_meaning),
infs_to_assert_on, val_to_assert_on, parity);
case MEASUREMENT_KADJ: return Properties::Measurement::ADJ_assert(
RETRIEVE_POINTER_measurement_definition(am->detailed_meaning),
infs_to_assert_on, val_to_assert_on, parity);
case ENUMERATIVE_KADJ: return InstanceAdjectives::assert(
RETRIEVE_POINTER_instance(am->detailed_meaning),
infs_to_assert_on, val_to_assert_on, parity);
case EORP_KADJ: return Properties::EitherOr::ADJ_assert(
RETRIEVE_POINTER_property(am->detailed_meaning),
infs_to_assert_on, NULL, parity);
}
internal_error("unknown KADJ code");
return FALSE;
int rv = FALSE;
INT_METHOD_CALL(rv, am->family, ASSERT_ADJM_MTID, am, infs_to_assert_on,
val_to_assert_on, parity);
return rv;
}
@ 5. |*_KADJ_index|. This should print a description of the adjective to the
@ -1267,31 +1252,20 @@ AM was made as a negation of something else.
Note also that if the AM was defined with any indexing text then that will
be printed if the routine does nothing better.
@e INDEX_ADJM_MTID
=
void Adjectives::Meanings::print_to_index(OUTPUT_STREAM, adjective_meaning *am) {
int rv;
INT_METHOD_TYPE(INDEX_ADJM_MTID, adjective_meaning_family *f, text_stream *OUT,
adjective_meaning *am)
void AdjectiveMeanings::print_to_index(OUTPUT_STREAM, adjective_meaning *am) {
@<Index the domain of validity of the AM@>;
if (am->am_negated_from) {
wording W = Adjectives::get_nominative_singular(am->am_negated_from->owning_adjective);
WRITE(" opposite of </i>%+W<i>", W);
} else {
switch (am->adjective_form) {
case CONDITION_KADJ: rv = Phrases::Condition::ADJ_index(OUT,
RETRIEVE_POINTER_definition(am->detailed_meaning)); break;
case I6_CONDITION_KADJ: rv = Phrases::RawCondition::ADJ_index(OUT,
RETRIEVE_POINTER_definition(am->detailed_meaning)); break;
case I6_ROUTINE_KADJ: rv = Phrases::RawPhrasal::ADJ_index(OUT,
RETRIEVE_POINTER_definition(am->detailed_meaning)); break;
case PHRASE_KADJ: rv = Phrases::Phrasal::ADJ_index(OUT,
RETRIEVE_POINTER_definition(am->detailed_meaning)); break;
case MEASUREMENT_KADJ: rv = Properties::Measurement::ADJ_index(OUT,
RETRIEVE_POINTER_measurement_definition(am->detailed_meaning)); break;
case ENUMERATIVE_KADJ: rv = IXInstances::as_adjective(OUT,
RETRIEVE_POINTER_instance(am->detailed_meaning)); break;
case EORP_KADJ: rv = Properties::EitherOr::ADJ_index(OUT,
RETRIEVE_POINTER_property(am->detailed_meaning)); break;
default: rv = FALSE; break;
}
int rv = FALSE;
INT_METHOD_CALL(rv, am->family, INDEX_ADJM_MTID, OUT, am);
if ((rv == FALSE) && (Wordings::nonempty(am->adjective_index_text)))
WRITE("%+W", am->adjective_index_text);
}
@ -1326,7 +1300,7 @@ prefaced "(of a rulebook)", "(of an activity)", and so on.
@ Compiling to:
=
void Adjectives::Meanings::agreements(void) {
void AdjectiveMeanings::agreements(void) {
if (Projects::get_language_of_play(Task::project()) == DefaultLanguage::get(NULL)) return;
adjective *aph;
LOOP_OVER(aph, adjective) {
@ -1448,7 +1422,7 @@ void Adjectives::Meanings::agreements(void) {
}
}
void Adjectives::Meanings::emit(adjective *aph) {
void AdjectiveMeanings::emit(adjective *aph) {
Produce::inv_call_iname(Emit::tree(), aph->adjective_compilation.aph_iname);
Produce::down(Emit::tree());
Produce::val_iname(Emit::tree(), K_value, Hierarchy::find(PRIOR_NAMED_NOUN_HL));

View file

@ -46,8 +46,8 @@ void AdjectivalPredicates::log(up_family *self, OUTPUT_STREAM, unary_predicate *
void AdjectivalPredicates::infer_kind(up_family *self, unary_predicate *up, kind **K) {
adjective *aph = AdjectivalPredicates::to_adjective(up);
adjective_meaning *am = Adjectives::Meanings::first_meaning(aph);
kind *D = Adjectives::Meanings::get_domain(am);
adjective_meaning *am = AdjectiveMeanings::first_meaning(aph);
kind *D = AdjectiveMeanings::get_domain(am);
if (D) *K = D;
}
@ -55,7 +55,7 @@ int AdjectivalPredicates::typecheck(up_family *self, unary_predicate *up,
pcalc_prop *prop, variable_type_assignment *vta, tc_problem_kit *tck) {
adjective *aph = AdjectivalPredicates::to_adjective(up);
kind *K = Propositions::Checker::kind_of_term(&(prop->terms[0]), vta, tck);
if ((aph) && (Adjectives::Meanings::applicable_to(aph, K) == FALSE)) {
if ((aph) && (AdjectiveMeanings::applicable_to(aph, K) == FALSE)) {
wording W = Adjectives::get_nominative_singular(aph);
if (tck->log_to_I6_text) LOG("Adjective '%W' undefined on %u\n", W, K);
Propositions::Checker::problem(UnaryMisapplied_CALCERROR,
@ -68,7 +68,7 @@ int AdjectivalPredicates::typecheck(up_family *self, unary_predicate *up,
@ Next, asserting $adjective(t)$. We know that $t$ evaluates to a kind
of value over which $adjective$ is defined, or the proposition would
not have survived type-checking. But only some adjectives can be asserted;
"open" can, but "visible" can't, for instance. |Adjectives::Meanings::assert| returns a
"open" can, but "visible" can't, for instance. |AdjectiveMeanings::assert| returns a
success flag.
=
@ -95,15 +95,15 @@ void AdjectivalPredicates::assert(up_family *self, unary_predicate *up,
if (domain_of_definition == NULL)
domain_of_definition = Node::get_kind_of_value(ots);
if (ox) found = Adjectives::Meanings::assert(aph, domain_of_definition, ox, NULL, parity);
else found = Adjectives::Meanings::assert(aph, domain_of_definition, NULL, ots, parity);
if (ox) found = AdjectiveMeanings::assert(aph, domain_of_definition, ox, NULL, parity);
else found = AdjectiveMeanings::assert(aph, domain_of_definition, NULL, ots, parity);
if (found == FALSE) Assert::issue_couldnt_problem(aph, parity);
}
int AdjectivalPredicates::testable(up_family *self, unary_predicate *up) {
adjective *aph = AdjectivalPredicates::to_adjective(up);
property *prn = Adjectives::Meanings::has_EORP_meaning(aph, NULL);
property *prn = AdjectiveMeanings::has_EORP_meaning(aph, NULL);
if (prn == NULL) return FALSE;
return TRUE;
}
@ -112,7 +112,7 @@ int AdjectivalPredicates::test(up_family *self, unary_predicate *up,
TERM_DOMAIN_CALCULUS_TYPE *about) {
adjective *aph = AdjectivalPredicates::to_adjective(up);
int sense = AdjectivalPredicates::parity(up);
property *prn = Adjectives::Meanings::has_EORP_meaning(aph, NULL);
property *prn = AdjectiveMeanings::has_EORP_meaning(aph, NULL);
if (prn) {
possession_marker *adj = Properties::get_possession_marker(prn);
if (sense) {
@ -138,7 +138,7 @@ void AdjectivalPredicates::get_schema(up_family *self, int task, unary_predicate
case NOW_ATOM_FALSE_TASK: atask = NOW_ADJECTIVE_FALSE_TASK; break;
}
asch->schema = Adjectives::Meanings::get_i6_schema(aph, K, atask);
asch->schema = AdjectiveMeanings::get_i6_schema(aph, K, atask);
}
@ Access:

View file

@ -20,6 +20,7 @@ DECLARE_CLASS(compile_task_data)
@e adjective_iname_holder_CLASS
@e adjective_meaning_CLASS
@e adjective_meaning_family_CLASS
@e application_CLASS
@e by_routine_bp_data_CLASS
@e equivalence_bp_data_CLASS
@ -36,6 +37,7 @@ DECLARE_CLASS(compile_task_data)
=
DECLARE_CLASS(adjective_iname_holder)
DECLARE_CLASS(adjective_meaning)
DECLARE_CLASS(adjective_meaning_family)
DECLARE_CLASS_ALLOCATED_IN_ARRAYS(application, 100)
DECLARE_CLASS(generalisation)
DECLARE_CLASS(by_routine_bp_data)

View file

@ -232,7 +232,7 @@ so on. Those absolute basics are made here.
BENCH_IF(parsing_plugin, PL::Parsing::Tokens::Values::time)
BENCH_IF(parsing_plugin, PL::Parsing::Tokens::Values::compile_type_gprs)
BENCH(RTVerbs::ConjugateVerb)
BENCH(Adjectives::Meanings::agreements)
BENCH(AdjectiveMeanings::agreements)
if (debugging) {
BENCH_IF(parsing_plugin, PL::Parsing::TestScripts::write_text)

View file

@ -698,12 +698,12 @@ void PL::Parsing::understand_block(wording W, understanding_reference *ur, wordi
&& (AdjectivalPredicates::parity(Propositions::first_unary_predicate(Specifications::to_proposition(spec), NULL)))) {
adjective *aph =
AdjectivalPredicates::to_adjective(Propositions::first_unary_predicate(Specifications::to_proposition(spec), NULL));
instance *q = Adjectives::Meanings::has_ENUMERATIVE_meaning(aph);
instance *q = AdjectiveMeanings::has_ENUMERATIVE_meaning(aph);
if (q) {
spec = Rvalues::from_instance(q);
goto RetryValue;
}
property *prn = Adjectives::Meanings::has_EORP_meaning(aph, NULL);
property *prn = AdjectiveMeanings::has_EORP_meaning(aph, NULL);
if (prn) {
gv_is = GV_IS_PROPERTY_NAME;
gv_prn = prn;

View file

@ -280,7 +280,7 @@ of Inform.
DEFINITIONAL_PHRASE_EFF)
Phrases::compile(ph, &total_phrases_compiled,
total_phrases_to_compile, NULL, NULL, NULL);
Adjectives::Meanings::compile_support_code();
AdjectiveMeanings::compile_support_code();
@ As we'll see, it's legal in Inform to define "To..." phrases with vague
kinds: "To expose (X - a value)", for example. This can't be compiled as

View file

@ -1692,7 +1692,7 @@ void Invocations::Inline::compile_I7_expression_from_text_inner(value_holster *V
adjective *aph = Adjectives::parse(LW);
if (aph) {
if (Adjectives::Meanings::write_adjective_test_routine(VH, aph)) return;
if (AdjectiveMeanings::write_adjective_test_routine(VH, aph)) return;
StandardProblems::unlocated_problem(Task::syntax_tree(), _p_(BelievedImpossible),
"You tried to use '(+' and '+)' to expand to the Inform 6 routine "
"address of an adjective, but it was an adjective with no meaning.");

View file

@ -70,7 +70,7 @@ void Invocations::Compiler::compile_invocation_list(value_holster *VH, parse_nod
Node::get_modal_verb(inv),
Annotations::read_int(inv, say_verb_negated_ANNOT));
} else if (Node::get_say_adjective(inv)) {
Adjectives::Meanings::emit(Node::get_say_adjective(inv));
AdjectiveMeanings::emit(Node::get_say_adjective(inv));
} else {
@<Otherwise, use the standard way to compile an invoked phrase@>;
}
@ -390,7 +390,7 @@ no subsequent lines are looked at.
Node::get_modal_verb(inv),
Annotations::read_int(inv, say_verb_negated_ANNOT));
else if (Node::get_say_adjective(inv))
Adjectives::Meanings::emit(Node::get_say_adjective(inv));
AdjectiveMeanings::emit(Node::get_say_adjective(inv));
else {
phrase *ph = Node::get_phrase_invoked(inv);
tokens_packet tokens;
@ -407,7 +407,7 @@ no subsequent lines are looked at.
Node::get_modal_verb(inv),
Annotations::read_int(inv, say_verb_negated_ANNOT));
else if (Node::get_say_adjective(inv))
Adjectives::Meanings::emit(Node::get_say_adjective(inv));
AdjectiveMeanings::emit(Node::get_say_adjective(inv));
else {
phrase *ph = Node::get_phrase_invoked(inv);
tokens_packet tokens;

View file

@ -404,7 +404,7 @@ different contexts. We want to quote all of those.
HTML_TAG("br");
WRITE("%d. ", nc-ac);
}
Adjectives::Meanings::print_to_index(OUT, am);
AdjectiveMeanings::print_to_index(OUT, am);
if (ac >= 1) WRITE("; ");
}
@<End definition text@>;

View file

@ -34,6 +34,9 @@ COMPILE_WRITER_I(int, World::Inferences::log_kind)
=
void KnowledgeModule::start(void) {
InstanceAdjectives::start();
Properties::EitherOr::start();
Properties::Measurement::start();
Properties::SameRelations::start();
Properties::SettingRelations::start();
Properties::ComparativeRelations::start();

View file

@ -9,9 +9,27 @@ that a ball might have a colour, we can declare that "the ball is green",
or speak of "something blue", whereas "number" is not a coinciding property,
and we would not ordinarily write "the ball is 4".[1]
These instances make "enumerative adjectives" because they arise from
enumerations such as:
>> The ball can be red, green or blue.
[1] A quirk in English does allow this, implicitly construing number as an
age property, but we don't go there in Inform.
=
adjective_meaning_family *enumerative_amf = NULL; /* defined by a property like "colour" with named values */
void InstanceAdjectives::start(void) {
enumerative_amf = AdjectiveMeanings::new_family(2);
METHOD_ADD(enumerative_amf, ASSERT_ADJM_MTID, InstanceAdjectives::assert);
}
int InstanceAdjectives::is_enumerative(adjective_meaning *am) {
if ((am) && (am->family == enumerative_amf)) return TRUE;
return FALSE;
}
@ Let's reconstruct the chain of events, shall we? It has been found that an
instance, though a noun, must be used as an adjective: for example, "red".
Inform has run through the permissions for the property ("colour") in
@ -43,17 +61,17 @@ void InstanceAdjectives::make_adjectival(instance *I, property *P,
@<Create the adjective meaning for this use of the instance@> =
wording NW = Instances::get_name(I, FALSE);
am = Adjectives::Meanings::new(ENUMERATIVE_KADJ, STORE_POINTER_instance(I), NW);
I->as_adjective = Adjectives::Meanings::declare(am, NW, 4);
if (singleton) Adjectives::Meanings::set_domain_from_instance(am, singleton);
else if (set) Adjectives::Meanings::set_domain_from_kind(am, set);
am = AdjectiveMeanings::new(enumerative_amf, STORE_POINTER_instance(I), NW);
I->as_adjective = AdjectiveMeanings::declare(am, NW, 4);
if (singleton) AdjectiveMeanings::set_domain_from_instance(am, singleton);
else if (set) AdjectiveMeanings::set_domain_from_kind(am, set);
@<Write I6 schemas for asserting and testing this use of the instance@> =
i6_schema *sch = Adjectives::Meanings::set_i6_schema(am, TEST_ADJECTIVE_TASK, FALSE);
i6_schema *sch = AdjectiveMeanings::set_i6_schema(am, TEST_ADJECTIVE_TASK, FALSE);
Calculus::Schemas::modify(sch,
"GProperty(%k, *1, %n) == %d",
D, Properties::iname(P), I->enumeration_index);
sch = Adjectives::Meanings::set_i6_schema(am, NOW_ADJECTIVE_TRUE_TASK, FALSE);
sch = AdjectiveMeanings::set_i6_schema(am, NOW_ADJECTIVE_TRUE_TASK, FALSE);
Calculus::Schemas::modify(sch,
"WriteGProperty(%k, *1, %n, %d)",
D, Properties::iname(P), I->enumeration_index);
@ -65,27 +83,16 @@ adjective *InstanceAdjectives::as_adjective(instance *I) {
return I->as_adjective;
}
adjective_meaning *InstanceAdjectives::parse(parse_node *pn,
int sense, wording AW, wording DNW, wording CONW, wording CALLW) {
return NULL;
}
void InstanceAdjectives::compiling_soon(adjective_meaning *am, instance *I, int T) {
}
int InstanceAdjectives::compile(instance *I, int T, int emit_flag, ph_stack_frame *phsf) {
return FALSE;
}
@ Asserting such an adjective simply asserts its property. We refuse to assert
the falseness of such an adjective since it's unclear what to infer from, e.g.,
"the ball is not green": we would need to give it a colour, and there's no
good basis for choosing which.
=
int InstanceAdjectives::assert(instance *I,
int InstanceAdjectives::assert(adjective_meaning_family *f, adjective_meaning *am,
inference_subject *infs_to_assert_on, parse_node *val_to_assert_on, int parity) {
if (parity == FALSE) return FALSE;
instance *I = RETRIEVE_POINTER_instance(am->detailed_meaning);
property *P = Properties::Conditions::get_coinciding_property(Instances::to_kind(I));
if (P == NULL) internal_error("enumerative adjective on non-property");
World::Inferences::draw_property(infs_to_assert_on, P, Rvalues::from_instance(I));

View file

@ -35,7 +35,7 @@ property *Properties::Conditions::new(inference_subject *infs, wording NW, parse
PW = Node::get_text(option);
adjective *adj = Adjectives::parse(PW);
if (adj) {
instance *I = Adjectives::Meanings::has_ENUMERATIVE_meaning(adj);
instance *I = AdjectiveMeanings::has_ENUMERATIVE_meaning(adj);
kind *K = (I)?Instances::to_kind(I):NULL;
if (common_kind == NULL) {
common_kind = K;

View file

@ -244,44 +244,42 @@ void Properties::EitherOr::compile_default_value(value_holster *VH, property *pr
@h Either/or properties as adjectives.
What makes either/or properties linguistically interesting is their use as
adjectives: an open door, a transparent container. Adjectival
meanings arising in this way are of the |EORP_KADJ| kind, and the following
meanings arising in this way are of the |either_or_property_amf| kind, and the following
is called every time an either/or property is created, to create its matching
adjectival meaning:
=
adjective_meaning_family *either_or_property_amf = NULL; /* defined by an either/or property like "closed" */
void Properties::EitherOr::start(void) {
either_or_property_amf = AdjectiveMeanings::new_family(1);
METHOD_ADD(either_or_property_amf, ASSERT_ADJM_MTID, Properties::EitherOr::ADJ_assert);
METHOD_ADD(either_or_property_amf, COMPILING_SOON_ADJM_MTID, Properties::EitherOr::compiling_soon);
METHOD_ADD(either_or_property_amf, INDEX_ADJM_MTID, Properties::EitherOr::ADJ_index);
}
int Properties::EitherOr::is_either_or_adjective(adjective_meaning *am) {
if ((am) && (am->family == either_or_property_amf)) return TRUE;
return FALSE;
}
void Properties::EitherOr::create_adjective_from_property(property *prn, wording W, kind *K) {
adjective_meaning *am =
Adjectives::Meanings::new(EORP_KADJ, STORE_POINTER_property(prn), W);
Adjectives::Meanings::declare(am, W, 1);
Adjectives::Meanings::set_domain_from_kind(am, K);
prn->adjective_registered = Adjectives::Meanings::get_aph_from_am(am);
AdjectiveMeanings::new(either_or_property_amf, STORE_POINTER_property(prn), W);
AdjectiveMeanings::declare(am, W, 1);
AdjectiveMeanings::set_domain_from_kind(am, K);
prn->adjective_registered = AdjectiveMeanings::get_aph_from_am(am);
prn->adjectival_meaning_registered = am;
}
void Properties::EitherOr::make_new_adjective_sense_from_property(property *prn, wording W, kind *K) {
adjective *aph = prn->adjective_registered;
if (Adjectives::Meanings::applicable_to(aph, K)) return;
if (AdjectiveMeanings::applicable_to(aph, K)) return;
adjective_meaning *am =
Adjectives::Meanings::new(EORP_KADJ, STORE_POINTER_property(prn), W);
Adjectives::Meanings::declare(am, W, 2);
Adjectives::Meanings::set_domain_from_kind(am, K);
}
@ And here are the methods which define |EORP| adjectives. They arise other
than by parsing, as we've seen, so:
=
adjective_meaning *Properties::EitherOr::ADJ_parse(parse_node *q,
int sense, wording AW, wording DNW, wording CONW, wording CALLW) {
return NULL;
}
@ Compiling tests or assertions of these adjectives is easy, because it just
means using their schemata in the usual way...
=
int Properties::EitherOr::ADJ_compile(property *prn, int T, int emit_flag, ph_stack_frame *phsf) {
return FALSE;
AdjectiveMeanings::new(either_or_property_amf, STORE_POINTER_property(prn), W);
AdjectiveMeanings::declare(am, W, 2);
AdjectiveMeanings::set_domain_from_kind(am, K);
}
@ ...but writing those schemata is not so easy, partly because of the way
@ -289,13 +287,14 @@ either/or properties may be paired, partly because of the attribute storage
optimisation applied to some but not all of them.
=
void Properties::EitherOr::ADJ_compiling_soon(adjective_meaning *am, property *prn, int T) {
if (am == NULL) internal_error("Unregistered adjectival either/or property in either/or atom");
void Properties::EitherOr::compiling_soon(adjective_meaning_family *family, adjective_meaning *am, int T) {
property *prn = RETRIEVE_POINTER_property(am->detailed_meaning);
if (prn == NULL) internal_error("Unregistered adjectival either/or property in either/or atom");
if (Adjectives::Meanings::get_ready_flag(am)) return;
Adjectives::Meanings::set_ready_flag(am);
if (AdjectiveMeanings::get_ready_flag(am)) return;
AdjectiveMeanings::set_ready_flag(am);
kind *K = Adjectives::Meanings::get_domain(am);
kind *K = AdjectiveMeanings::get_domain(am);
if (Kinds::Behaviour::is_object(K))
@<Set the schemata for an either/or property adjective with objects as domain@>
else
@ -313,24 +312,24 @@ which would work just as well, but more slowly.
property *neg = Properties::EitherOr::get_negation(prn);
inter_name *identifier = Properties::iname(neg);
i6_schema *sch = Adjectives::Meanings::set_i6_schema(am, TEST_ADJECTIVE_TASK, FALSE);
i6_schema *sch = AdjectiveMeanings::set_i6_schema(am, TEST_ADJECTIVE_TASK, FALSE);
Calculus::Schemas::modify(sch, "GetEitherOrProperty(*1, %n) == false", identifier);
sch = Adjectives::Meanings::set_i6_schema(am, NOW_ADJECTIVE_TRUE_TASK, FALSE);
sch = AdjectiveMeanings::set_i6_schema(am, NOW_ADJECTIVE_TRUE_TASK, FALSE);
Calculus::Schemas::modify(sch, "SetEitherOrProperty(*1, %n, true)", identifier);
sch = Adjectives::Meanings::set_i6_schema(am, NOW_ADJECTIVE_FALSE_TASK, FALSE);
sch = AdjectiveMeanings::set_i6_schema(am, NOW_ADJECTIVE_FALSE_TASK, FALSE);
Calculus::Schemas::modify(sch, "SetEitherOrProperty(*1, %n, false)", identifier);
} else {
inter_name *identifier = Properties::iname(prn);
i6_schema *sch = Adjectives::Meanings::set_i6_schema(am, TEST_ADJECTIVE_TASK, FALSE);
i6_schema *sch = AdjectiveMeanings::set_i6_schema(am, TEST_ADJECTIVE_TASK, FALSE);
Calculus::Schemas::modify(sch, "GetEitherOrProperty(*1, %n)", identifier);
sch = Adjectives::Meanings::set_i6_schema(am, NOW_ADJECTIVE_TRUE_TASK, FALSE);
sch = AdjectiveMeanings::set_i6_schema(am, NOW_ADJECTIVE_TRUE_TASK, FALSE);
Calculus::Schemas::modify(sch, "SetEitherOrProperty(*1, %n, false)", identifier);
sch = Adjectives::Meanings::set_i6_schema(am, NOW_ADJECTIVE_FALSE_TASK, FALSE);
sch = AdjectiveMeanings::set_i6_schema(am, NOW_ADJECTIVE_FALSE_TASK, FALSE);
Calculus::Schemas::modify(sch, "SetEitherOrProperty(*1, %n, true)", identifier);
}
@ -338,27 +337,27 @@ which would work just as well, but more slowly.
if (Properties::EitherOr::stored_in_negation(prn)) {
property *neg = Properties::EitherOr::get_negation(prn);
i6_schema *sch = Adjectives::Meanings::set_i6_schema(am, TEST_ADJECTIVE_TASK, FALSE);
i6_schema *sch = AdjectiveMeanings::set_i6_schema(am, TEST_ADJECTIVE_TASK, FALSE);
Calculus::Schemas::modify(sch, "GProperty(%k, *1, %n) == false", K,
Properties::iname(neg));
sch = Adjectives::Meanings::set_i6_schema(am, NOW_ADJECTIVE_TRUE_TASK, FALSE);
sch = AdjectiveMeanings::set_i6_schema(am, NOW_ADJECTIVE_TRUE_TASK, FALSE);
Calculus::Schemas::modify(sch, "WriteGProperty(%k, *1, %n)", K,
Properties::iname(neg));
sch = Adjectives::Meanings::set_i6_schema(am, NOW_ADJECTIVE_FALSE_TASK, FALSE);
sch = AdjectiveMeanings::set_i6_schema(am, NOW_ADJECTIVE_FALSE_TASK, FALSE);
Calculus::Schemas::modify(sch, "WriteGProperty(%k, *1, %n, true)", K,
Properties::iname(neg));
} else {
i6_schema *sch = Adjectives::Meanings::set_i6_schema(am, TEST_ADJECTIVE_TASK, FALSE);
i6_schema *sch = AdjectiveMeanings::set_i6_schema(am, TEST_ADJECTIVE_TASK, FALSE);
Calculus::Schemas::modify(sch, "GProperty(%k, *1, %n)", K,
Properties::iname(prn));
sch = Adjectives::Meanings::set_i6_schema(am, NOW_ADJECTIVE_TRUE_TASK, FALSE);
sch = AdjectiveMeanings::set_i6_schema(am, NOW_ADJECTIVE_TRUE_TASK, FALSE);
Calculus::Schemas::modify(sch, "WriteGProperty(%k, *1, %n, true)", K,
Properties::iname(prn));
sch = Adjectives::Meanings::set_i6_schema(am, NOW_ADJECTIVE_FALSE_TASK, FALSE);
sch = AdjectiveMeanings::set_i6_schema(am, NOW_ADJECTIVE_FALSE_TASK, FALSE);
Calculus::Schemas::modify(sch, "WriteGProperty(%k, *1, %n)", K,
Properties::iname(prn));
}
@ -367,8 +366,10 @@ which would work just as well, but more slowly.
property.
=
int Properties::EitherOr::ADJ_assert(property *prn,
int Properties::EitherOr::ADJ_assert(adjective_meaning_family *f,
adjective_meaning *am,
inference_subject *infs_to_assert_on, parse_node *val_to_assert_on, int parity) {
property *prn = RETRIEVE_POINTER_property(am->detailed_meaning);
if (parity == FALSE) World::Inferences::draw_negated_property(infs_to_assert_on, prn, NULL);
else World::Inferences::draw_property(infs_to_assert_on, prn, NULL);
return TRUE;
@ -377,7 +378,9 @@ int Properties::EitherOr::ADJ_assert(property *prn,
@ And finally:
=
int Properties::EitherOr::ADJ_index(OUTPUT_STREAM, property *prn) {
int Properties::EitherOr::ADJ_index(adjective_meaning_family *f, text_stream *OUT,
adjective_meaning *am) {
property *prn = RETRIEVE_POINTER_property(am->detailed_meaning);
property *neg = Properties::EitherOr::get_negation(prn);
WRITE("either/or property");
if (Properties::permission_list(prn)) {

View file

@ -233,12 +233,26 @@ always to match <property-name>, and the text in the range must match
"container is large if its carrying capacity is 10 or more.'");
return FALSE;
@ =
adjective_meaning *Properties::Measurement::ADJ_parse(parse_node *q,
int sense, wording AW, wording DNW, wording CONW, wording CALLW) {
if (sense == 0) return NULL;
@
if (<measurement-adjective-definition>(CONW) == FALSE) return NULL;
=
adjective_meaning_family *measurement_amf = NULL; /* defined by numerical comparison with a property value */
void Properties::Measurement::start(void) {
measurement_amf = AdjectiveMeanings::new_family(3);
METHOD_ADD(measurement_amf, ASSERT_ADJM_MTID, Properties::Measurement::ADJ_assert);
METHOD_ADD(measurement_amf, COMPILING_SOON_ADJM_MTID, Properties::Measurement::compiling_soon);
METHOD_ADD(measurement_amf, PARSE_ADJM_MTID, Properties::Measurement::ADJ_parse);
}
@ =
int Properties::Measurement::ADJ_parse(adjective_meaning_family *f,
adjective_meaning **result, parse_node *q,
int sense, wording AW, wording DNW, wording CONW, wording CALLW) {
if (sense == 0) return FALSE;
if (<measurement-adjective-definition>(CONW) == FALSE) return FALSE;
int shape = <<r>>;
wording PRW = GET_RW(<measurement-adjective-definition>, 1);
wording THRESW = GET_RW(<measurement-range>, 1);
@ -251,7 +265,8 @@ adjective_meaning *Properties::Measurement::ADJ_parse(parse_node *q,
@<Initialise the measurement definition@>;
if (shape != MEASURE_T_EXACTLY) @<Create the superlative form@>;
@<Create the adjectival meaning arising from this measurement@>;
return mdef->headword_as_adjective;
*result = mdef->headword_as_adjective;
return TRUE;
}
@<Reject some overly elaborate attempts to define overly elaborate measurements@> =
@ -262,7 +277,7 @@ adjective_meaning *Properties::Measurement::ADJ_parse(parse_node *q,
"as in 'Definition: a container is large if its carrying capacity is "
"10 or more.': 'fairly large' would not be allowed because it would "
"make no sense to talk about 'fairly larger' or 'fairly largest'.");
return NULL;
return FALSE;
}
if (Wordings::nonempty(CALLW)) {
@ -273,7 +288,7 @@ adjective_meaning *Properties::Measurement::ADJ_parse(parse_node *q,
"or more.' is fine, but so 'Definition: a container (called the bag) "
"is large if its carrying capacity is 10 or more.' is not - then again, "
"there's very little call for it.");
return NULL;
return FALSE;
}
if (sense != 1) {
@ -285,7 +300,7 @@ adjective_meaning *Properties::Measurement::ADJ_parse(parse_node *q,
"its carrying capacity is 10 or more.' is not - of course a similar "
"effect could be achieved by 'Definition: a container is modest if its "
"carrying capacity is 9 or less.'");
return NULL;
return FALSE;
}
@ Perhaps this is a good point to say why we allow any exact measurements at
@ -293,21 +308,21 @@ all. After all, if we didn't, a definition like:
>> Definition: a person is handy if his carrying capacity is 7.
...would still work; and "handy" would then be created as a |CONDITION_KADJ|
...would still work; and "handy" would then be created as a |condition_amf|
adjective. So why not let that happen?
The answer is that our |MEASUREMENT_KADJ| adjectives behave exactly the same
The answer is that our |measurement_amf| adjectives behave exactly the same
at run-time, but can also be asserted true in the model world at compile-time.
In particular, we could write:
>> Peter is a handy person.
This can't be done with general |CONDITION_KADJ| adjectives, because conditions
This can't be done with general |condition_amf| adjectives, because conditions
can't normally be unravelled at compile time.
@<Allow an exact measurement to be created only if we can already parse the threshold@> =
if (shape == MEASURE_T_EXACTLY) {
if (<s-literal>(THRESW) == FALSE) return NULL;
if (<s-literal>(THRESW) == FALSE) return FALSE;
}
@<Initialise the measurement definition@> =
@ -354,32 +369,32 @@ can't normally be unravelled at compile time.
DISCARD_TEXT(TEMP)
@<Create the adjectival meaning arising from this measurement@> =
adjective_meaning *am = Adjectives::Meanings::new(MEASUREMENT_KADJ,
adjective_meaning *am = AdjectiveMeanings::new(measurement_amf,
STORE_POINTER_measurement_definition(mdef), Node::get_text(q));
mdef->headword_as_adjective = am;
Adjectives::Meanings::declare(am, AW, 3);
Adjectives::Meanings::pass_task_to_support_routine(am, TEST_ADJECTIVE_TASK);
Adjectives::Meanings::set_domain_text(am, DNW);
AdjectiveMeanings::declare(am, AW, 3);
AdjectiveMeanings::pass_task_to_support_routine(am, TEST_ADJECTIVE_TASK);
AdjectiveMeanings::set_domain_text(am, DNW);
@ =
void Properties::Measurement::ADJ_compiling_soon(adjective_meaning *am,
measurement_definition *mdef, int T) {
void Properties::Measurement::compiling_soon(adjective_meaning_family *family, adjective_meaning *am,
int T) {
measurement_definition *mdef =
RETRIEVE_POINTER_measurement_definition(am->detailed_meaning);
if ((mdef->prop) && (mdef->region_threshold_evaluated) &&
(mdef->property_schema_written == FALSE)) {
i6_schema *sch = Adjectives::Meanings::set_i6_schema(
i6_schema *sch = AdjectiveMeanings::set_i6_schema(
mdef->headword_as_adjective, TEST_ADJECTIVE_TASK, FALSE);
Calculus::Schemas::modify(sch, "%n(*1)", mdef->mdef_iname);
mdef->property_schema_written = TRUE;
}
}
int Properties::Measurement::ADJ_compile(measurement_definition *mdef,
int T, int emit_flag, ph_stack_frame *phsf) {
return FALSE;
}
int Properties::Measurement::ADJ_assert(measurement_definition *mdef,
int Properties::Measurement::ADJ_assert(adjective_meaning_family *f,
adjective_meaning *am,
inference_subject *infs_to_assert_on, parse_node *val_to_assert_on, int parity) {
measurement_definition *mdef =
RETRIEVE_POINTER_measurement_definition(am->detailed_meaning);
Properties::Measurement::validate(mdef);
if ((Properties::Measurement::is_valid(mdef)) && (mdef->prop) && (parity == TRUE)) {
parse_node *val = NULL;
@ -391,10 +406,6 @@ int Properties::Measurement::ADJ_assert(measurement_definition *mdef,
return FALSE;
}
int Properties::Measurement::ADJ_index(OUTPUT_STREAM, measurement_definition *mdef) {
return FALSE;
}
@h Support routines for measurement.
=
@ -406,7 +417,7 @@ void Properties::Measurement::compile_MADJ_routines(void) {
local_variable *lv = LocalVariables::add_call_parameter(
Frames::current_stack_frame(),
EMPTY_WORDING,
Adjectives::Meanings::get_domain(mdef->headword_as_adjective));
AdjectiveMeanings::get_domain(mdef->headword_as_adjective));
parse_node *var = Lvalues::new_LOCAL_VARIABLE(EMPTY_WORDING, lv);
parse_node *evaluated_prop = Lvalues::new_PROPERTY_VALUE(
Rvalues::from_property(mdef->prop), var);

View file

@ -16,6 +16,10 @@ which use this module:
=
void RuntimeModule::start(void) {
Phrases::Phrasal::start();
Phrases::Condition::start();
Phrases::RawPhrasal::start();
Phrases::RawCondition::start();
Memory::reason_name(EMIT_ARRAY_MREASON, "emitter array storage");
Memory::reason_name(PARTITION_MREASON, "initial state for relations in groups");
Memory::reason_name(RELATION_CONSTRUCTION_MREASON, "relation bitmap storage");

View file

@ -168,12 +168,12 @@ is defined by routine or not.
offer the new adjective around and see if anybody claims it.
@<Register the resulting adjective@> =
adjective_meaning *am = Adjectives::Meanings::parse(q, the_format, AW, DNW, CONW, CALLW);
adjective_meaning *am = AdjectiveMeanings::parse(q, the_format, AW, DNW, CONW, CALLW);
if (am == NULL) internal_error("unclaimed adjective definition");
if (Wordings::nonempty(NW)) {
adjective_meaning *neg = Adjectives::Meanings::negate(am);
Adjectives::Meanings::declare(neg, NW, 5);
adjective_meaning *neg = AdjectiveMeanings::negate(am);
AdjectiveMeanings::declare(neg, NW, 5);
}
@

View file

@ -2,30 +2,40 @@
Defining an adjective with an I7 condition.
@ This is a family of adjective meanings.
=
adjective_meaning_family *condition_amf = NULL; /* defined by a condition in I7 source text */
void Phrases::Condition::start(void) {
condition_amf = AdjectiveMeanings::new_family(7);
METHOD_ADD(condition_amf, COMPILE_ADJM_MTID, Phrases::Condition::ADJ_compile);
METHOD_ADD(condition_amf, PARSE_ADJM_MTID, Phrases::Condition::ADJ_parse);
}
@ =
adjective_meaning *Phrases::Condition::ADJ_parse(parse_node *q,
int Phrases::Condition::ADJ_parse(adjective_meaning_family *f,
adjective_meaning **result, parse_node *q,
int sense, wording AW, wording DNW, wording CONW, wording CALLW) {
if (sense == 0) return NULL;
if (sense == 0) return FALSE;
definition *def = Phrases::Adjectives::def_new(q);
adjective_meaning *am =
Adjectives::Meanings::new(CONDITION_KADJ, STORE_POINTER_definition(def),
AdjectiveMeanings::new(condition_amf, STORE_POINTER_definition(def),
Node::get_text(q));
def->condition_to_match = CONW;
def->format = sense;
def->domain_calling = CALLW;
def->am_of_def = am;
Adjectives::Meanings::declare(am, AW, 6);
Adjectives::Meanings::pass_task_to_support_routine(am, TEST_ADJECTIVE_TASK);
Adjectives::Meanings::set_domain_text(am, DNW);
return am;
AdjectiveMeanings::declare(am, AW, 6);
AdjectiveMeanings::pass_task_to_support_routine(am, TEST_ADJECTIVE_TASK);
AdjectiveMeanings::set_domain_text(am, DNW);
*result = am;
return TRUE;
}
void Phrases::Condition::ADJ_compiling_soon(adjective_meaning *am,
definition *def, int T) {
}
int Phrases::Condition::ADJ_compile(definition *def, int T,
int emit_flag, ph_stack_frame *phsf) {
int Phrases::Condition::ADJ_compile(adjective_meaning_family *family,
adjective_meaning *am, int T, int emit_flag, ph_stack_frame *phsf) {
definition *def = RETRIEVE_POINTER_definition(am->detailed_meaning);
switch (T) {
case TEST_ADJECTIVE_TASK:
if (emit_flag) {
@ -34,39 +44,31 @@ int Phrases::Condition::ADJ_compile(definition *def, int T,
if (Wordings::nonempty(def->condition_to_match)) {
current_sentence = def->node;
parse_node *spec = NULL;
if (<s-condition>(def->condition_to_match))
spec = <<rp>>;
if (<s-condition>(def->condition_to_match)) spec = <<rp>>;
if ((spec == NULL) ||
(Dash::validate_conditional_clause(spec) == FALSE)) {
LOG("Error on: %W = $T", def->condition_to_match, spec);
StandardProblems::definition_problem(Task::syntax_tree(), _p_(PM_DefinitionBadCondition),
StandardProblems::definition_problem(Task::syntax_tree(),
_p_(PM_DefinitionBadCondition),
def->node,
"that condition makes no sense to me",
"although the preamble to the definition was properly "
"written. There must be something wrong after 'if'.");
} else {
if (def->format == -1) { Produce::inv_primitive(Emit::tree(), NOT_BIP); Produce::down(Emit::tree()); }
if (def->format == -1) {
Produce::inv_primitive(Emit::tree(), NOT_BIP);
Produce::down(Emit::tree());
}
Specifications::Compiler::emit_as_val(K_number, spec);
if (def->format == -1) Produce::up(Emit::tree());
if (def->format == -1) {
Produce::up(Emit::tree());
}
}
}
LocalVariables::alias_pronoun(phsf, EMPTY_WORDING);
}
return TRUE;
case NOW_ADJECTIVE_TRUE_TASK:
return FALSE;
case NOW_ADJECTIVE_FALSE_TASK:
return FALSE;
}
return FALSE;
}
int Phrases::Condition::ADJ_assert(definition *def,
inference_subject *infs_to_assert_on, parse_node *val_to_assert_on, int parity) {
return FALSE;
}
int Phrases::Condition::ADJ_index(OUTPUT_STREAM, definition *def) {
return FALSE;
}

View file

@ -6,6 +6,13 @@ Adjectives defined by an I7 phrase.
And here's another one.
=
adjective_meaning_family *phrase_amf = NULL; /* defined by an explicit but nameless rule */
void Phrases::Phrasal::start(void) {
phrase_amf = AdjectiveMeanings::new_family(6);
METHOD_ADD(phrase_amf, PARSE_ADJM_MTID, Phrases::Phrasal::ADJ_parse);
}
void Phrases::Phrasal::define_adjective_by_phrase(parse_node *p, phrase *ph, wording *CW,
kind **K) {
definition *def;
@ -13,43 +20,29 @@ void Phrases::Phrasal::define_adjective_by_phrase(parse_node *p, phrase *ph, wor
if (ph == NULL) return;
LOOP_OVER(def, definition)
if ((def->definition_node == p) && (Adjectives::Meanings::get_form(def->am_of_def) == PHRASE_KADJ)) {
i6_schema *sch = Adjectives::Meanings::set_i6_schema(def->am_of_def, TEST_ADJECTIVE_TASK, FALSE);
if ((def->definition_node == p) && (AdjectiveMeanings::get_form(def->am_of_def) == phrase_amf)) {
i6_schema *sch = AdjectiveMeanings::set_i6_schema(def->am_of_def, TEST_ADJECTIVE_TASK, FALSE);
Calculus::Schemas::modify(sch, "(%n(*1))", Phrases::iname(ph));
*CW = def->domain_calling;
*K = Adjectives::Meanings::get_domain_forcing(def->am_of_def);
*K = AdjectiveMeanings::get_domain_forcing(def->am_of_def);
if ((*K == NULL) || (Kinds::Behaviour::is_object(*K)))
*K = K_object;
return;
}
}
adjective_meaning *Phrases::Phrasal::ADJ_parse(parse_node *q,
int Phrases::Phrasal::ADJ_parse(adjective_meaning_family *f,
adjective_meaning **result, parse_node *q,
int sense, wording AW, wording DNW, wording CONW, wording CALLW) {
if (sense != 0) return NULL;
if (sense != 0) return FALSE;
definition *def = Phrases::Adjectives::def_new(q);
adjective_meaning *am = Adjectives::Meanings::new(PHRASE_KADJ,
adjective_meaning *am = AdjectiveMeanings::new(phrase_amf,
STORE_POINTER_definition(def), Node::get_text(q));
def->domain_calling = CALLW;
def->am_of_def = am;
Adjectives::Meanings::declare(am, AW, 7);
Adjectives::Meanings::pass_task_to_support_routine(am, TEST_ADJECTIVE_TASK);
Adjectives::Meanings::set_domain_text(am, DNW);
return am;
}
void Phrases::Phrasal::ADJ_compiling_soon(adjective_meaning *am, definition *def, int T) {
}
int Phrases::Phrasal::ADJ_compile(definition *def, int T, int emit_flag, ph_stack_frame *phsf) {
return FALSE;
}
int Phrases::Phrasal::ADJ_assert(definition *def,
inference_subject *infs_to_assert_on, parse_node *val_to_assert_on, int parity) {
return FALSE;
}
int Phrases::Phrasal::ADJ_index(OUTPUT_STREAM, definition *def) {
return FALSE;
AdjectiveMeanings::declare(am, AW, 7);
AdjectiveMeanings::pass_task_to_support_routine(am, TEST_ADJECTIVE_TASK);
AdjectiveMeanings::set_domain_text(am, DNW);
*result = am;
return TRUE;
}

View file

@ -11,40 +11,33 @@ Defining an adjective with an I6 condition.
@ Which leads us to a simple set of adjectives:
=
adjective_meaning *Phrases::RawCondition::ADJ_parse(parse_node *q,
adjective_meaning_family *inter_condition_amf = NULL; /* defined by an explicit I6 schema */
void Phrases::RawCondition::start(void) {
inter_condition_amf = AdjectiveMeanings::new_family(4);
METHOD_ADD(inter_condition_amf, PARSE_ADJM_MTID, Phrases::RawCondition::ADJ_parse);
}
int Phrases::RawCondition::ADJ_parse(adjective_meaning_family *f,
adjective_meaning **result, parse_node *q,
int sense, wording AW, wording DNW, wording CONW, wording CALLW) {
if (sense != 1) return NULL;
if (Wordings::nonempty(CALLW)) return NULL;
if (!(<inform6-condition-adjective-definition>(CONW))) return NULL;
if (sense != 1) return FALSE;
if (Wordings::nonempty(CALLW)) return FALSE;
if (!(<inform6-condition-adjective-definition>(CONW))) return FALSE;
int text_wn = <<r>>;
wording IN = GET_RW(<inform6-condition-adjective-definition>, 1);
definition *def = Phrases::Adjectives::def_new(q);
adjective_meaning *am =
Adjectives::Meanings::new(I6_CONDITION_KADJ,
AdjectiveMeanings::new(inter_condition_amf,
STORE_POINTER_definition(def), IN);
def->am_of_def = am;
Adjectives::Meanings::declare(am, AW, 8);
Adjectives::Meanings::pass_task_to_support_routine(am, TEST_ADJECTIVE_TASK);
Adjectives::Meanings::set_domain_text(am, DNW);
i6_schema *sch = Adjectives::Meanings::set_i6_schema(am, TEST_ADJECTIVE_TASK, FALSE);
AdjectiveMeanings::declare(am, AW, 8);
AdjectiveMeanings::pass_task_to_support_routine(am, TEST_ADJECTIVE_TASK);
AdjectiveMeanings::set_domain_text(am, DNW);
i6_schema *sch = AdjectiveMeanings::set_i6_schema(am, TEST_ADJECTIVE_TASK, FALSE);
Word::dequote(text_wn);
Calculus::Schemas::modify(sch, "(%N)", text_wn);
return am;
}
void Phrases::RawCondition::ADJ_compiling_soon(adjective_meaning *am, definition *def, int T) {
}
int Phrases::RawCondition::ADJ_compile(definition *def, int T, int emit_flag, ph_stack_frame *phsf) {
return FALSE;
}
int Phrases::RawCondition::ADJ_assert(definition *def,
inference_subject *infs_to_assert_on, parse_node *val_to_assert_on, int parity) {
return FALSE;
}
int Phrases::RawCondition::ADJ_index(OUTPUT_STREAM, definition *def) {
return FALSE;
*result = am;
return TRUE;
}

View file

@ -13,7 +13,20 @@ This little grammar catches definitions delegated to Inform 6 routines.
@ So here's a set of adjectives...
=
adjective_meaning *Phrases::RawPhrasal::ADJ_parse(parse_node *q,
adjective_meaning_family *inter_routine_amf = NULL; /* defined by a named I6 routine */
void Phrases::RawPhrasal::start(void) {
inter_routine_amf = AdjectiveMeanings::new_family(5);
METHOD_ADD(inter_routine_amf, PARSE_ADJM_MTID, Phrases::RawPhrasal::ADJ_parse);
}
int Phrases::RawPhrasal::is_by_Inter_function(adjective_meaning *am) {
if ((am) && (am->family == inter_routine_amf)) return TRUE;
return FALSE;
}
int Phrases::RawPhrasal::ADJ_parse(adjective_meaning_family *f,
adjective_meaning **result, parse_node *q,
int sense, wording AW, wording DNW, wording CONW, wording CALLW) {
int setting = FALSE;
wording EW = EMPTY_WORDING, RW = EMPTY_WORDING;
@ -21,47 +34,32 @@ adjective_meaning *Phrases::RawPhrasal::ADJ_parse(parse_node *q,
setting = <<r>>;
RW = GET_RW(<inform6-routine-adjective-definition>, 1);
EW = GET_RW(<inform6-routine-adjective-definition>, 2);
} else return NULL;
} else return FALSE;
if (sense != 1) return NULL;
if (Wordings::nonempty(CALLW)) return NULL;
if (sense != 1) return FALSE;
if (Wordings::nonempty(CALLW)) return FALSE;
int rname_wn = Wordings::first_wn(RW);
Word::dequote(rname_wn);
definition *def = Phrases::Adjectives::def_new(q);
adjective_meaning *am =
Adjectives::Meanings::new(I6_ROUTINE_KADJ, STORE_POINTER_definition(def), EW);
AdjectiveMeanings::new(inter_routine_amf, STORE_POINTER_definition(def), EW);
def->am_of_def = am;
Adjectives::Meanings::declare(am, AW, 9);
Adjectives::Meanings::set_domain_text(am, DNW);
AdjectiveMeanings::declare(am, AW, 9);
AdjectiveMeanings::set_domain_text(am, DNW);
if (setting) {
i6_schema *sch = Adjectives::Meanings::set_i6_schema(am, TEST_ADJECTIVE_TASK, TRUE);
i6_schema *sch = AdjectiveMeanings::set_i6_schema(am, TEST_ADJECTIVE_TASK, TRUE);
Calculus::Schemas::modify(sch, "*=-(%N(*1, -1))", rname_wn);
sch = Adjectives::Meanings::set_i6_schema(am, NOW_ADJECTIVE_TRUE_TASK, TRUE);
sch = AdjectiveMeanings::set_i6_schema(am, NOW_ADJECTIVE_TRUE_TASK, TRUE);
Calculus::Schemas::modify(sch, "*=-(%N(*1, true))", rname_wn);
sch = Adjectives::Meanings::set_i6_schema(am, NOW_ADJECTIVE_FALSE_TASK, TRUE);
sch = AdjectiveMeanings::set_i6_schema(am, NOW_ADJECTIVE_FALSE_TASK, TRUE);
Calculus::Schemas::modify(sch, "*=-(%N(*1, false))", rname_wn);
} else {
Adjectives::Meanings::pass_task_to_support_routine(am, TEST_ADJECTIVE_TASK);
i6_schema *sch = Adjectives::Meanings::set_i6_schema(am, TEST_ADJECTIVE_TASK, TRUE);
AdjectiveMeanings::pass_task_to_support_routine(am, TEST_ADJECTIVE_TASK);
i6_schema *sch = AdjectiveMeanings::set_i6_schema(am, TEST_ADJECTIVE_TASK, TRUE);
Calculus::Schemas::modify(sch, "*=-(%N(*1))", rname_wn);
}
return am;
}
void Phrases::RawPhrasal::ADJ_compiling_soon(adjective_meaning *am, definition *def, int T) {
}
int Phrases::RawPhrasal::ADJ_compile(definition *def, int T, int emit_flag, ph_stack_frame *phsf) {
return FALSE;
}
int Phrases::RawPhrasal::ADJ_assert(definition *def,
inference_subject *infs_to_assert_on, parse_node *val_to_assert_on, int parity) {
return FALSE;
}
int Phrases::RawPhrasal::ADJ_index(OUTPUT_STREAM, definition *def) {
return FALSE;
*result = am;
return TRUE;
}

View file

@ -1531,10 +1531,10 @@ against "value".)
prn = Rvalues::to_property(new_value);
else if (Descriptions::number_of_adjectives_applied_to(new_value) == 1) {
adjective *aph = AdjectivalPredicates::to_adjective(Descriptions::first_unary_predicate(new_value));
if (Adjectives::Meanings::has_ENUMERATIVE_meaning(aph))
prn = Properties::Conditions::get_coinciding_property(Instances::to_kind(Adjectives::Meanings::has_ENUMERATIVE_meaning(aph)));
else if (Adjectives::Meanings::has_EORP_meaning(aph, NULL))
prn = Adjectives::Meanings::has_EORP_meaning(aph, NULL);
if (AdjectiveMeanings::has_ENUMERATIVE_meaning(aph))
prn = Properties::Conditions::get_coinciding_property(Instances::to_kind(AdjectiveMeanings::has_ENUMERATIVE_meaning(aph)));
else if (AdjectiveMeanings::has_EORP_meaning(aph, NULL))
prn = AdjectiveMeanings::has_EORP_meaning(aph, NULL);
}
make_check = TRUE;

View file

@ -329,7 +329,7 @@ int SPDesc::adjlist_applies_to_kind(parse_node *A, kind *K) {
pcalc_prop *au_prop = NULL;
LOOP_THROUGH_ADJECTIVE_LIST(au, au_prop, A) {
adjective *aph = AdjectivalPredicates::to_adjective(au);
if (Adjectives::Meanings::applicable_to(aph, K) == FALSE) return FALSE;
if (AdjectiveMeanings::applicable_to(aph, K) == FALSE) return FALSE;
}
return TRUE;
}

View file

@ -158,9 +158,9 @@ again.
#ifdef CORE_MODULE
pcalc_term Terms::adj_to_noun_conversion(unary_predicate *tr) {
adjective *aph = AdjectivalPredicates::to_adjective(tr);
instance *I = Adjectives::Meanings::has_ENUMERATIVE_meaning(aph);
instance *I = AdjectiveMeanings::has_ENUMERATIVE_meaning(aph);
if (I) return Terms::new_constant(Rvalues::from_instance(I));
property *prn = Adjectives::Meanings::has_EORP_meaning(aph, NULL);
property *prn = AdjectiveMeanings::has_EORP_meaning(aph, NULL);
if (prn) return Terms::new_constant(Rvalues::from_property(prn));
return Terms::new_variable(0);
}