mirror of
https://github.com/ganelson/inform.git
synced 2024-07-05 16:44:21 +03:00
128 lines
11 KiB
HTML
128 lines
11 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<head>
|
|
<title>15/cp</title>
|
|
<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>
|
|
|
|
<!--Weave of '15/ia' generated by 7-->
|
|
<ul class="crumbs"><li><a href="../webs.html">★</a></li><li><a href="index.html">core</a></li><li><a href="index.html#15">Chapter 15: Properties</a></li><li><b>Indefinite Appearance</b></li></ul><p class="purpose">To look after the indefinite appearance pseudo-property, used when the source text comments on something with a sentence consisting only of a double-quoted literal text.</p>
|
|
|
|
<ul class="toc"><li><a href="#SP1">§1. Inference</a></li><li><a href="#SP2">§2. Reallocation</a></li></ul><hr class="tocbar">
|
|
|
|
<p class="inwebparagraph"><a id="SP1"></a><b>§1. Inference. </b>The "indefinite appearance text" is a property given to something by the
|
|
A-parser when it appears as a double-quoted sentence with no other explanation.
|
|
For instance:
|
|
</p>
|
|
|
|
<blockquote>
|
|
<p>The drapery is in the Crypt. "The drapery hangs, poignantly waiting to fall."</p>
|
|
|
|
</blockquote>
|
|
|
|
<p class="inwebparagraph">This text will probably become a property of the drapery, but which property
|
|
depends on the drapery's kind. That means we can't decide until after the
|
|
source text is fully read, because we won't be certain of kinds until then.
|
|
So as an interim measure the text is inferred into a pseudo-property called
|
|
"indefinite appearance".
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Properties::Appearance::infer</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">parse_node</span><span class="plain"> *</span><span class="identifier">spec</span><span class="plain">) {</span>
|
|
<span class="reserved">inference</span><span class="plain"> *</span><span class="identifier">inf</span><span class="plain">;</span>
|
|
<span class="identifier">KNOWLEDGE_LOOP</span><span class="plain">(</span><span class="identifier">inf</span><span class="plain">, </span><span class="identifier">infs</span><span class="plain">, </span><span class="constant">PROPERTY_INF</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">World::Inferences::get_property</span><span class="plain">(</span><span class="identifier">inf</span><span class="plain">) == </span><span class="identifier">P_indefinite_appearance_text</span><span class="plain">)</span>
|
|
<<span class="cwebmacro">Issue a problem for a second appearance</span> <span class="cwebmacronumber">1.1</span>><span class="plain">;</span>
|
|
|
|
<span class="identifier">prevailing_mood</span><span class="plain"> = </span><span class="identifier">CERTAIN_CE</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext">InferenceSubjects::domain</span><span class="plain">(</span><span class="identifier">infs</span><span class="plain">)) &&</span>
|
|
<span class="plain">(</span><span class="functiontext">InferenceSubjects::is_within</span><span class="plain">(</span><span class="identifier">infs</span><span class="plain">, </span><span class="functiontext">Kinds::Knowledge::as_subject</span><span class="plain">(</span><span class="identifier">K_object</span><span class="plain">))))</span>
|
|
<span class="identifier">prevailing_mood</span><span class="plain"> = </span><span class="identifier">LIKELY_CE</span><span class="plain">;</span>
|
|
<span class="functiontext">Properties::Valued::assert</span><span class="plain">(</span><span class="identifier">P_indefinite_appearance_text</span><span class="plain">, </span><span class="identifier">infs</span><span class="plain">, </span><span class="identifier">spec</span><span class="plain">, </span><span class="identifier">prevailing_mood</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Properties::Appearance::infer is used in 9/tfa (<a href="9-tfa.html#SP11">§11</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP1_1"></a><b>§1.1. </b>...but we produce a firm and explicit problem message if somebody sets it
|
|
ambiguously.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Issue a problem for a second appearance</span> <span class="cwebmacronumber">1.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="functiontext">Problems::Issue::infs_contradiction_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_TwoAppearances</span><span class="plain">),</span>
|
|
<span class="functiontext">World::Inferences::where_inferred</span><span class="plain">(</span><span class="identifier">inf</span><span class="plain">), </span><span class="identifier">current_sentence</span><span class="plain">, </span><span class="identifier">infs</span><span class="plain">,</span>
|
|
<span class="string">"seems to have two different descriptions"</span><span class="plain">,</span>
|
|
<span class="string">"perhaps because you intended the second description to apply to something "</span>
|
|
<span class="string">"mentioned in between, but declared it in such a way that it was never the "</span>
|
|
<span class="string">"subject of an assertion. For instance, 'The Forest Clearing is northeast of "</span>
|
|
<span class="string">"the Woods.' makes the Forest Clearing the current room being discussed, but "</span>
|
|
<span class="string">"'Northeast of the Woods is the Forest Clearing.' leaves the room under "</span>
|
|
<span class="string">"discussion unchanged, because the Forest Clearing is not the subject of "</span>
|
|
<span class="string">"the sentence."</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP1">§1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP2"></a><b>§2. Reallocation. </b>Later, then, during model completion, we will have to make those decisions
|
|
about what property the indefinite appearance text should go into. This is
|
|
called "reallocation", and as can be seen the method is:
|
|
</p>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<ul class="items"><li>(a) See if any plugin wants to take action;
|
|
</li><li>(b) And otherwise reallocate to the "description" property, if that is
|
|
available;
|
|
</li><li>(c) But otherwise give up and issue a problem message.
|
|
</li></ul>
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Properties::Appearance::reallocate</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="reserved">inference</span><span class="plain"> *</span><span class="identifier">inf</span><span class="plain">;</span>
|
|
<span class="identifier">KNOWLEDGE_LOOP</span><span class="plain">(</span><span class="identifier">inf</span><span class="plain">, </span><span class="identifier">infs</span><span class="plain">, </span><span class="constant">PROPERTY_INF</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">World::Inferences::get_property</span><span class="plain">(</span><span class="identifier">inf</span><span class="plain">) == </span><span class="identifier">P_indefinite_appearance_text</span><span class="plain">) {</span>
|
|
<span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">txt</span><span class="plain"> = </span><span class="functiontext">World::Inferences::get_property_value</span><span class="plain">(</span><span class="identifier">inf</span><span class="plain">);</span>
|
|
<span class="identifier">current_sentence</span><span class="plain"> = </span><span class="functiontext">World::Inferences::where_inferred</span><span class="plain">(</span><span class="identifier">inf</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Plugins::Call::default_appearance</span><span class="plain">(</span><span class="identifier">infs</span><span class="plain">, </span><span class="identifier">txt</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">P_description</span><span class="plain">) &&</span>
|
|
<span class="plain">(</span><span class="functiontext">World::Permissions::find</span><span class="plain">(</span><span class="identifier">infs</span><span class="plain">, </span><span class="identifier">P_description</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">))) {</span>
|
|
<span class="functiontext">Properties::Valued::assert</span><span class="plain">(</span><span class="identifier">P_description</span><span class="plain">, </span><span class="identifier">infs</span><span class="plain">, </span><span class="identifier">txt</span><span class="plain">, </span><span class="identifier">CERTAIN_CE</span><span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="functiontext">Problems::Issue::inference_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_IndefiniteTextMeaningless</span><span class="plain">),</span>
|
|
<span class="identifier">infs</span><span class="plain">, </span><span class="identifier">inf</span><span class="plain">, </span><span class="string">"is not allowed"</span><span class="plain">,</span>
|
|
<span class="string">"i.e., you can't write a double-quoted piece of text as a "</span>
|
|
<span class="string">"sentence all by itself here. Some kinds or kinds of value "</span>
|
|
<span class="string">"are allowed this - objects and scenes, for instance - but "</span>
|
|
<span class="string">"most are not. (They would need to provide a 'description' "</span>
|
|
<span class="string">"property.)"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Properties::Appearance::reallocate is used in 16/cmw (<a href="16-cmw.html#SP1_1">§1.1</a>).</p>
|
|
|
|
<hr class="tocbar">
|
|
<ul class="toc"><li><a href="15-cp.html">Back to 'Condition Properties'</a></li><li><a href="15-tpr.html">Continue with 'The Provision Relation'</a></li></ul><hr class="tocbar">
|
|
<!--End of weave-->
|
|
</body>
|
|
</html>
|
|
|