mirror of
https://github.com/ganelson/inform.git
synced 2024-07-08 10:04:21 +03:00
270 lines
31 KiB
HTML
270 lines
31 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<head>
|
|
<title>Condition Properties</title>
|
|
<meta name="viewport" content="width=device-width initial-scale=1">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<meta http-equiv="Content-Language" content="en-gb">
|
|
<link href="../inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
|
|
</head>
|
|
<body>
|
|
<nav role="navigation">
|
|
<h1><a href="../index.html">
|
|
<img src="../docs-src/Figures/Inform.png" height=72">
|
|
</a></h1>
|
|
<ul><li><a href="../compiler.html">compiler tools</a></li>
|
|
<li><a href="../other.html">other tools</a></li>
|
|
<li><a href="../extensions.html">extensions and kits</a></li>
|
|
<li><a href="../units.html">unit test tools</a></li>
|
|
</ul><h2>Compiler Webs</h2><ul>
|
|
<li><a href="../inbuild/index.html">inbuild</a></li>
|
|
<li><a href="../inform7/index.html">inform7</a></li>
|
|
<li><a href="../inter/index.html">inter</a></li>
|
|
</ul><h2>Inbuild Modules</h2><ul>
|
|
<li><a href="../supervisor-module/index.html">supervisor</a></li>
|
|
</ul><h2>Inform7 Modules</h2><ul>
|
|
<li><a href="index.html"><span class="selectedlink">core</span></a></li>
|
|
<li><a href="../inflections-module/index.html">inflections</a></li>
|
|
<li><a href="../linguistics-module/index.html">linguistics</a></li>
|
|
<li><a href="../kinds-module/index.html">kinds</a></li>
|
|
<li><a href="../if-module/index.html">if</a></li>
|
|
<li><a href="../multimedia-module/index.html">multimedia</a></li>
|
|
<li><a href="../problems-module/index.html">problems</a></li>
|
|
<li><a href="../index-module/index.html">index</a></li>
|
|
</ul><h2>Inter Modules</h2><ul>
|
|
<li><a href="../bytecode-module/index.html">bytecode</a></li>
|
|
<li><a href="../building-module/index.html">building</a></li>
|
|
<li><a href="../codegen-module/index.html">codegen</a></li>
|
|
</ul><h2>Shared Modules</h2><ul>
|
|
<li><a href="../arch-module/index.html">arch</a></li>
|
|
<li><a href="../syntax-module/index.html">syntax</a></li>
|
|
<li><a href="../words-module/index.html">words</a></li>
|
|
<li><a href="../html-module/index.html">html</a></li>
|
|
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
|
|
|
|
</ul>
|
|
</nav>
|
|
<main role="main">
|
|
|
|
<!--Weave of 'Condition Properties' generated by 7-->
|
|
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7 Modules</a></li><li><a href="index.html">core</a></li><li><a href="index.html#15">Chapter 15: Properties</a></li><li><b>Condition Properties</b></li></ul><p class="purpose">Properties which hold one of an enumerated set of named states of something.</p>
|
|
|
|
<ul class="toc"><li><a href="15-cp.html#SP5">§5. Coincidence</a></li></ul><hr class="tocbar">
|
|
|
|
<p class="inwebparagraph"><a id="SP1"></a><b>§1. </b>Some valued properties are "conditions", in the sense of "What
|
|
condition is this in?": for instance the sentence
|
|
</p>
|
|
|
|
<blockquote>
|
|
<p>The cask can be wedged open, bolted closed or stoved in.</p>
|
|
|
|
</blockquote>
|
|
|
|
<p class="inwebparagraph">sets up a new property called the "cask condition", whose value must be one of
|
|
these three named possibilities. (A new kind of value is set up whose three
|
|
possible values these are.)
|
|
</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b></p>
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Properties::Conditions::initialise<button class="popup" onclick="togglePopup('usagePopup1166')">...<span class="popuptext" id="usagePopup1166">Usage of <b>Properties::Conditions::initialise</b>:<br>Valued Properties - <a href="15-vp.html#SP4">§4</a></span></button></span><span class="plain">(</span><span class="reserved">property</span><span class="plain"> *</span><span class="identifier">prn</span><span class="plain">) {</span>
|
|
<span class="identifier">prn</span><span class="plain">-></span><span class="element">condition_of</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">prn</span><span class="plain">-></span><span class="element">condition_anonymously_named</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b></p>
|
|
|
|
<pre class="display">
|
|
<span class="reserved">property</span><span class="plain"> *</span><span class="functiontext">Properties::Conditions::new<button class="popup" onclick="togglePopup('usagePopup1167')">...<span class="popuptext" id="usagePopup1167">Usage of <b>Properties::Conditions::new</b>:<br>Property Declarations - <a href="9-pd.html#SP5_9">§5.9</a></span></button></span><span class="plain">(</span><span class="reserved">inference_subject</span><span class="plain"> *</span><span class="identifier">infs</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">NW</span><span class="plain">, </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">set</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> *</span><span class="identifier">already</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">anon</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain"> = </span><span class="identifier">NW</span><span class="plain">;</span>
|
|
<span class="plain">*</span><span class="identifier">already</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wordings::empty</span><span class="plain">(</span><span class="identifier">NW</span><span class="plain">)) {</span>
|
|
<span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">common_kind</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">mixed_kind</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">some_new</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">CKW</span><span class="plain"> = </span><span class="identifier">EMPTY_WORDING</span><span class="plain">, </span><span class="identifier">NKW</span><span class="plain"> = </span><span class="identifier">EMPTY_WORDING</span><span class="plain">;</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">option</span><span class="plain"> = </span><span class="identifier">set</span><span class="plain">; </span><span class="identifier">option</span><span class="plain">; </span><span class="identifier">option</span><span class="plain"> = (</span><span class="identifier">option</span><span class="plain">-></span><span class="element">down</span><span class="plain">)?(</span><span class="identifier">option</span><span class="plain">-></span><span class="element">down</span><span class="plain">-></span><span class="element">next</span><span class="plain">):</span><span class="identifier">NULL</span><span class="plain">) {</span>
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">PW</span><span class="plain"> = </span><span class="identifier">EMPTY_WORDING</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ParseTree::get_type</span><span class="plain">(</span><span class="identifier">option</span><span class="plain">) == </span><span class="identifier">AND_NT</span><span class="plain">)</span>
|
|
<span class="identifier">PW</span><span class="plain"> = </span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">option</span><span class="plain">-></span><span class="identifier">down</span><span class="plain">);</span>
|
|
<span class="reserved">else</span>
|
|
<span class="identifier">PW</span><span class="plain"> = </span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">option</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (<</span><span class="identifier">adjective</span><span class="plain">-</span><span class="identifier">name</span><span class="plain">>(</span><span class="identifier">PW</span><span class="plain">)) {</span>
|
|
<span class="identifier">adjectival_phrase</span><span class="plain"> *</span><span class="identifier">aph</span><span class="plain"> = <<</span><span class="identifier">rp</span><span class="plain">>>;</span>
|
|
<span class="reserved">instance</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="functiontext"><a href="4-am.html#SP11">Adjectives::Meanings::has_ENUMERATIVE_meaning</a></span><span class="plain">(</span><span class="identifier">aph</span><span class="plain">);</span>
|
|
<span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain"> = (</span><span class="identifier">I</span><span class="plain">)?</span><span class="functiontext"><a href="5-ins.html#SP18">Instances::to_kind</a></span><span class="plain">(</span><span class="identifier">I</span><span class="plain">):</span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">common_kind</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
|
|
<span class="identifier">common_kind</span><span class="plain"> = </span><span class="identifier">K</span><span class="plain">;</span>
|
|
<span class="identifier">CKW</span><span class="plain"> = </span><span class="identifier">PW</span><span class="plain">;</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::Compare::eq</span><span class="plain">(</span><span class="identifier">K</span><span class="plain">, </span><span class="identifier">common_kind</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
|
<span class="identifier">mixed_kind</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="identifier">NKW</span><span class="plain"> = </span><span class="identifier">PW</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="identifier">some_new</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">; </span><span class="identifier">NKW</span><span class="plain"> = </span><span class="identifier">PW</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">common_kind</span><span class="plain">) {</span>
|
|
<span class="reserved">property</span><span class="plain"> *</span><span class="identifier">prn</span><span class="plain"> = </span><span class="functiontext"><a href="15-cp.html#SP5">Properties::Conditions::get_coinciding_property</a></span><span class="plain">(</span><span class="identifier">common_kind</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wordings::nonempty</span><span class="plain">(</span><span class="identifier">NKW</span><span class="plain">)) {</span>
|
|
<span class="identifier">Problems::quote_source</span><span class="plain">(1, </span><span class="identifier">current_sentence</span><span class="plain">);</span>
|
|
<span class="functiontext"><a href="2-sq.html#SP3">Problems::quote_kind</a></span><span class="plain">(2, </span><span class="identifier">common_kind</span><span class="plain">);</span>
|
|
<span class="identifier">Problems::quote_wording</span><span class="plain">(3, </span><span class="identifier">CKW</span><span class="plain">);</span>
|
|
<span class="identifier">Problems::quote_wording</span><span class="plain">(4, </span><span class="identifier">NKW</span><span class="plain">);</span>
|
|
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="functiontext"><a href="1-wtc.html#SP5">Task::syntax_tree</a></span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_MixedExistingConstants</span><span class="plain">));</span>
|
|
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
|
|
<span class="string">"In %1, one of the values you supply as a possibility is '%3', "</span>
|
|
<span class="string">"but this already has a meaning (as %2). This might be okay if "</span>
|
|
<span class="string">"every other possibility was also %2, but '%4' isn't."</span><span class="plain">);</span>
|
|
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">prn</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
|
|
<span class="identifier">Problems::quote_source</span><span class="plain">(1, </span><span class="identifier">current_sentence</span><span class="plain">);</span>
|
|
<span class="functiontext"><a href="2-sq.html#SP3">Problems::quote_kind</a></span><span class="plain">(2, </span><span class="identifier">common_kind</span><span class="plain">);</span>
|
|
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="functiontext"><a href="1-wtc.html#SP5">Task::syntax_tree</a></span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">BelievedImpossible</span><span class="plain">)); </span><span class="comment"> because it won't parse</span>
|
|
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
|
|
<span class="string">"In %1, every value you supply as a possibility is %2. "</span>
|
|
<span class="string">"That would be okay if it were a property which is a condition "</span>
|
|
<span class="string">"of something, but it isn't."</span><span class="plain">);</span>
|
|
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="plain">*</span><span class="identifier">already</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">prn</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
<<span class="cwebmacro">Devise a name to give to this currently nameless condition</span> <span class="cwebmacronumber">3.1</span>><span class="plain">;</span>
|
|
<span class="identifier">anon</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">pcalc_prop</span><span class="plain"> *</span><span class="identifier">prop</span><span class="plain"> = </span><span class="functiontext"><a href="11-tc.html#SP1">Calculus::Propositions::Abstract::to_create_something</a></span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
|
|
<span class="identifier">prop</span><span class="plain"> = </span><span class="functiontext"><a href="11-pr.html#SP15">Calculus::Propositions::concatenate</a></span><span class="plain">(</span><span class="identifier">prop</span><span class="plain">,</span>
|
|
<span class="functiontext"><a href="11-tc.html#SP1">Calculus::Propositions::Abstract::to_make_a_kind</a></span><span class="plain">(</span><span class="identifier">K_value</span><span class="plain">));</span>
|
|
<span class="functiontext"><a href="12-ap.html#SP5">Calculus::Propositions::Assert::assert_true</a></span><span class="plain">(</span><span class="identifier">prop</span><span class="plain">, </span><span class="identifier">prevailing_mood</span><span class="plain">);</span>
|
|
|
|
<span class="reserved">property</span><span class="plain"> *</span><span class="identifier">prn</span><span class="plain"> = </span><span class="functiontext"><a href="15-vp.html#SP1">Properties::Valued::obtain</a></span><span class="plain">(</span><span class="identifier">W</span><span class="plain">);</span>
|
|
<span class="identifier">prn</span><span class="plain">-></span><span class="element">either_or</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="identifier">prn</span><span class="plain">-></span><span class="element">condition_of</span><span class="plain"> = </span><span class="identifier">infs</span><span class="plain">;</span>
|
|
<span class="identifier">prn</span><span class="plain">-></span><span class="element">condition_anonymously_named</span><span class="plain"> = </span><span class="identifier">anon</span><span class="plain">;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">prn</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP3_1"></a><b>§3.1. </b>The name is ideally the subject's name plus "condition": for instance,
|
|
"lounge table condition". But we need to be careful in case there are
|
|
multiple such conditions, because we don't want to duplicate the name. So
|
|
we begin by counting how many such already exist, and then append a number:
|
|
thus "lounge table condition", then "lounge table condition 2", and so on.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">We could be more fanatical about this, if we wanted. The code here doesn't
|
|
guarantee uniqueness of the resulting name in all cases, because it's possible
|
|
for two subjects to have identical names. (But when that happens, it's unlikely
|
|
that different condition properties are given to them.) We won't obsess over
|
|
this because the point is only to help the user by minimising namespace
|
|
clashes; it isn't essential to Inform's running.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">(And at present it seems very unlikely that conditions would ever be applied to
|
|
nameless subjects.)
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Devise a name to give to this currently nameless condition</span> <span class="cwebmacronumber">3.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">ct</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
|
|
<span class="reserved">property</span><span class="plain"> *</span><span class="identifier">prn</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">prn</span><span class="plain">, </span><span class="reserved">property</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">prn</span><span class="plain">-></span><span class="identifier">condition_of</span><span class="plain"> == </span><span class="identifier">infs</span><span class="plain">) && (</span><span class="identifier">prn</span><span class="plain">-></span><span class="element">condition_anonymously_named</span><span class="plain">))</span>
|
|
<span class="identifier">ct</span><span class="plain">++;</span>
|
|
<span class="identifier">feed_t</span><span class="plain"> </span><span class="identifier">id</span><span class="plain"> = </span><span class="identifier">Feeds::begin</span><span class="plain">();</span>
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W2</span><span class="plain"> = </span><span class="functiontext"><a href="16-is.html#SP24">InferenceSubjects::get_name_text</a></span><span class="plain">(</span><span class="identifier">infs</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wordings::nonempty</span><span class="plain">(</span><span class="identifier">W2</span><span class="plain">)) </span><span class="identifier">Feeds::feed_wording</span><span class="plain">(</span><span class="identifier">W2</span><span class="plain">);</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">Feeds::feed_text</span><span class="plain">(</span><span class="identifier">L</span><span class="string">" nameless "</span><span class="plain">);</span>
|
|
<span class="identifier">Feeds::feed_text</span><span class="plain">(</span><span class="identifier">L</span><span class="string">" condition "</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ct</span><span class="plain"> > </span><span class="constant">0</span><span class="plain">) {</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">numb</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">numb</span><span class="plain">, </span><span class="string">" %d "</span><span class="plain">, </span><span class="identifier">ct</span><span class="plain">+1);</span>
|
|
<span class="identifier">Feeds::feed_stream</span><span class="plain">(</span><span class="identifier">numb</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">numb</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">W</span><span class="plain"> = </span><span class="identifier">Feeds::end</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="15-cp.html#SP3">§3</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b></p>
|
|
|
|
<pre class="display">
|
|
<span class="reserved">inference_subject</span><span class="plain"> *</span><span class="functiontext">Properties::Conditions::of_what<button class="popup" onclick="togglePopup('usagePopup1168')">...<span class="popuptext" id="usagePopup1168">Usage of <b>Properties::Conditions::of_what</b>:<br>Instances - <a href="5-ins.html#SP6_3">§6.3</a>, <a href="5-ins.html#SP37">§37</a><br>Lvalues - <a href="14-lv.html#SP14_3_1">§14.3.1</a></span></button></span><span class="plain">(</span><span class="reserved">property</span><span class="plain"> *</span><span class="identifier">prn</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">prn</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">prn</span><span class="plain">-></span><span class="element">either_or</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">prn</span><span class="plain">-></span><span class="element">condition_of</span><span class="plain">; </span><span class="comment"> which will be null if not a condition property</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP5"></a><b>§5. Coincidence. </b>Coincidence of kinds and properties occurs where a kind has the same name
|
|
exactly as a property, allowing the same name to be used grammatically in
|
|
two different contexts. We say that the kind and the property "coincide".
|
|
In particular, this happens with conditions:
|
|
</p>
|
|
|
|
<blockquote>
|
|
<p>Brightness is a kind of value. The brightnesses are guttering, weak, radiant and blazing. The lantern has a brightness. The lantern is blazing.</p>
|
|
|
|
</blockquote>
|
|
|
|
<p class="inwebparagraph">Here "brightness" becomes the name of a new kind, but "brightness" also
|
|
becomes the name of a property.
|
|
</p>
|
|
|
|
<pre class="display">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Properties::Conditions::name_can_coincide_with_property<button class="popup" onclick="togglePopup('usagePopup1169')">...<span class="popuptext" id="usagePopup1169">Usage of <b>Properties::Conditions::name_can_coincide_with_property</b>:<br>The Equality Relation - <a href="12-ter.html#SP5">§5</a>, <a href="12-ter.html#SP8">§8</a><br>Valued Properties - <a href="15-vp.html#SP6">§6</a><br>Comparative Relations - <a href="15-cr.html#SP7_1">§7.1</a></span></button></span><span class="plain">(</span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">K</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">K</span><span class="plain">-></span><span class="identifier">construct</span><span class="plain">-></span><span class="identifier">can_coincide_with_property</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">property</span><span class="plain"> *</span><span class="functiontext">Properties::Conditions::get_coinciding_property<button class="popup" onclick="togglePopup('usagePopup1170')">...<span class="popuptext" id="usagePopup1170">Usage of <b>Properties::Conditions::get_coinciding_property</b>:<br><a href="15-cp.html#SP3">§3</a>, Instances - <a href="5-ins.html#SP6">§6</a>, <a href="5-ins.html#SP10">§10</a>, <a href="5-ins.html#SP36">§36</a>, <a href="5-ins.html#SP37">§37</a><br>Make Assertions - <a href="9-ma.html#SP3_3_41">§3.3.41</a>, <a href="9-ma.html#SP3_3_41_5">§3.3.41.5</a><br>Terms - <a href="11-tr.html#SP9">§9</a><br>Propositions - <a href="11-pr.html#SP27">§27</a>, <a href="11-pr.html#SP35_1">§35.1</a><br>The Equality Relation - <a href="12-ter.html#SP5_1">§5.1</a>, <a href="12-ter.html#SP8">§8</a>, <a href="12-ter.html#SP8_1">§8.1</a><br>Dash - <a href="14-ds2.html#SP11_9_1_1_5_1_1">§11.9.1.1.5.1.1</a>, <a href="14-ds2.html#SP11_9_1_1_5_1_2">§11.9.1.1.5.1.2</a><br>Comparative Relations - <a href="15-cr.html#SP5">§5</a>, <a href="15-cr.html#SP7_1">§7.1</a></span></button></span><span class="plain">(</span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">K</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">K</span><span class="plain">-></span><span class="identifier">construct</span><span class="plain">-></span><span class="identifier">coinciding_property</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Properties::Conditions::set_coinciding_property<button class="popup" onclick="togglePopup('usagePopup1171')">...<span class="popuptext" id="usagePopup1171">Usage of <b>Properties::Conditions::set_coinciding_property</b>:<br>Instances - <a href="5-ins.html#SP9">§9</a></span></button></span><span class="plain">(</span><span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">K</span><span class="plain">, </span><span class="reserved">property</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">K</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="identifier">K</span><span class="plain">-></span><span class="element">construct</span><span class="plain">-></span><span class="identifier">coinciding_property</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<hr class="tocbar">
|
|
<ul class="toc"><li><a href="15-vp.html">Back to 'Valued Properties'</a></li><li><a href="15-ia.html">Continue with 'Indefinite Appearance'</a></li></ul><hr class="tocbar">
|
|
<!--End of weave-->
|
|
<script>
|
|
function togglePopup(material_id) {
|
|
var popup = document.getElementById(material_id);
|
|
popup.classList.toggle("show");
|
|
}
|
|
</script>
|
|
|
|
<link href="Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
</main>
|
|
</body>
|
|
</html>
|
|
|