2019-03-17 14:40:57 +02:00
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
< html >
< head >
< title > 3/bck< / 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 '3/rgn' generated by 7 -->
< ul class = "crumbs" > < li > < a href = "../webs.html" > ★ < / a > < / li > < li > < a href = "index.html" > if< / a > < / li > < li > < a href = "index.html#3" > Chapter 3: Space and Time< / a > < / li > < li > < b > Regions< / b > < / li > < / ul > < p class = "purpose" > A plugin providing support for grouping rooms together into named and nestable regions.< / p >
< ul class = "toc" > < li > < a href = "#SP1" > § 1. Definitions< / a > < / li > < li > < a href = "#SP5" > § 5. Initialising< / a > < / li > < li > < a href = "#SP6" > § 6. Kinds< / a > < / li > < li > < a href = "#SP11" > § 11. Properties< / a > < / li > < li > < a href = "#SP14" > § 14. Assertions< / a > < / li > < li > < a href = "#SP15" > § 15. Relations< / a > < / li > < li > < a href = "#SP19" > § 19. Model completion< / a > < / li > < / ul > < hr class = "tocbar" >
< p class = "inwebparagraph" > < a id = "SP1" > < / a > < b > § 1. Definitions. < / b > < / p >
< p class = "inwebparagraph" > < a id = "SP2" > < / a > < b > § 2. < / b > The relation "R in S" behaves so differently for regions that we need to
define it separately, even though there's no difference in English syntax. So:
< / p >
< pre class = "display" >
< span class = "identifier" > binary_predicate< / span > < span class = "plain" > *< / span > < span class = "identifier" > R_regional_containment< / span > < span class = "plain" > = < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > ;< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "inwebparagraph" > < a id = "SP3" > < / a > < b > § 3. < / b > "Region" is in fact one of the four top-level kinds in the standard I7
hierarchy, alongside thing, room and direction.
< / p >
< pre class = "display" >
< span class = "identifier" > kind< / span > < span class = "plain" > *< / span > < span class = "identifier" > K_region< / span > < span class = "plain" > = < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > inference_subject< / span > < span class = "plain" > *< / span > < span class = "identifier" > infs_region< / span > < span class = "plain" > = < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > property< / span > < span class = "plain" > *< / span > < span class = "identifier" > P_map_region< / span > < span class = "plain" > = < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > ; < / span > < span class = "comment" > a value property giving the region of a room< / span >
< span class = "identifier" > property< / span > < span class = "plain" > *< / span > < span class = "identifier" > P_regional_found_in< / span > < span class = "plain" > = < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > ; < / span > < span class = "comment" > an I6-only property used for implementation< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "inwebparagraph" > < a id = "SP4" > < / a > < b > § 4. < / b > Every inference subject contains a pointer to its own unique copy of the
following minimal structure, though it will only be relevant for instances of
"room":
< / p >
< pre class = "display" >
< span class = "reserved" > typedef< / span > < span class = "plain" > < / span > < span class = "reserved" > struct< / span > < span class = "plain" > < / span > < span class = "reserved" > regions_data< / span > < span class = "plain" > {< / span >
< span class = "reserved" > struct< / span > < span class = "plain" > < / span > < span class = "identifier" > instance< / span > < span class = "plain" > *< / span > < span class = "identifier" > in_region< / span > < span class = "plain" > ; < / span > < span class = "comment" > smallest region containing me (rooms only)< / span >
< span class = "reserved" > struct< / span > < span class = "plain" > < / span > < span class = "identifier" > parse_node< / span > < span class = "plain" > *< / span > < span class = "identifier" > in_region_set_at< / span > < span class = "plain" > ; < / span > < span class = "comment" > where this is decided< / span >
< span class = "reserved" > struct< / span > < span class = "plain" > < / span > < span class = "identifier" > inter_name< / span > < span class = "plain" > *< / span > < span class = "identifier" > in_region_iname< / span > < span class = "plain" > ; < / span > < span class = "comment" > for testing regional containment found-ins< / span >
< span class = "identifier" > MEMORY_MANAGEMENT< / span >
< span class = "plain" > } < / span > < span class = "reserved" > regions_data< / span > < span class = "plain" > ;< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > The structure regions_data is private to this section.< / p >
< p class = "inwebparagraph" > < a id = "SP5" > < / a > < b > § 5. Initialising. < / b > < / p >
< pre class = "display" >
< span class = "reserved" > void< / span > < span class = "plain" > < / span > < span class = "functiontext" > PL::Regions::start< / span > < span class = "plain" > (< / span > < span class = "reserved" > void< / span > < span class = "plain" > ) {< / span >
< span class = "identifier" > PLUGIN_REGISTER< / span > < span class = "plain" > (< / span > < span class = "identifier" > PLUGIN_NEW_BASE_KIND_NOTIFY< / span > < span class = "plain" > , < / span > < span class = "functiontext" > PL::Regions::regions_new_base_kind_notify< / span > < span class = "plain" > );< / span >
< span class = "identifier" > PLUGIN_REGISTER< / span > < span class = "plain" > (< / span > < span class = "identifier" > PLUGIN_SET_SUBKIND_NOTIFY< / span > < span class = "plain" > , < / span > < span class = "functiontext" > PL::Regions::regions_set_subkind_notify< / span > < span class = "plain" > );< / span >
< span class = "identifier" > PLUGIN_REGISTER< / span > < span class = "plain" > (< / span > < span class = "identifier" > PLUGIN_NEW_SUBJECT_NOTIFY< / span > < span class = "plain" > , < / span > < span class = "functiontext" > PL::Regions::regions_new_subject_notify< / span > < span class = "plain" > );< / span >
< span class = "identifier" > PLUGIN_REGISTER< / span > < span class = "plain" > (< / span > < span class = "identifier" > PLUGIN_NEW_PROPERTY_NOTIFY< / span > < span class = "plain" > , < / span > < span class = "functiontext" > PL::Regions::regions_new_property_notify< / span > < span class = "plain" > );< / span >
< span class = "identifier" > PLUGIN_REGISTER< / span > < span class = "plain" > (< / span > < span class = "identifier" > PLUGIN_COMPLETE_MODEL< / span > < span class = "plain" > , < / span > < span class = "functiontext" > PL::Regions::regions_complete_model< / span > < span class = "plain" > );< / span >
< span class = "identifier" > PLUGIN_REGISTER< / span > < span class = "plain" > (< / span > < span class = "identifier" > PLUGIN_MORE_SPECIFIC< / span > < span class = "plain" > , < / span > < span class = "functiontext" > PL::Regions::regions_more_specific< / span > < span class = "plain" > );< / span >
< span class = "identifier" > PLUGIN_REGISTER< / span > < span class = "plain" > (< / span > < span class = "identifier" > PLUGIN_ESTIMATE_PROPERTY_USAGE< / span > < span class = "plain" > , < / span > < span class = "functiontext" > PL::Regions::regions_estimate_property_usage< / span > < span class = "plain" > );< / span >
< span class = "identifier" > PLUGIN_REGISTER< / span > < span class = "plain" > (< / span > < span class = "identifier" > PLUGIN_INTERVENE_IN_ASSERTION< / span > < span class = "plain" > , < / span > < span class = "functiontext" > PL::Regions::regions_intervene_in_assertion< / span > < span class = "plain" > );< / span >
< span class = "identifier" > PLUGIN_REGISTER< / span > < span class = "plain" > (< / span > < span class = "identifier" > PLUGIN_NAME_TO_EARLY_INFS< / span > < span class = "plain" > , < / span > < span class = "functiontext" > PL::Regions::regions_name_to_early_infs< / span > < span class = "plain" > );< / span >
< span class = "identifier" > PLUGIN_REGISTER< / span > < span class = "plain" > (< / span > < span class = "identifier" > PLUGIN_ADD_TO_WORLD_INDEX< / span > < span class = "plain" > , < / span > < span class = "functiontext" > PL::Regions::regions_add_to_World_index< / span > < span class = "plain" > );< / span >
< span class = "identifier" > infs_region< / span > < span class = "plain" > = < / span > < span class = "identifier" > InferenceSubjects::new< / span > < span class = "plain" > (< / span > < span class = "identifier" > global_constants< / span > < span class = "plain" > ,< / span >
< span class = "identifier" > FUND_SUB< / span > < span class = "plain" > , < / span > < span class = "identifier" > NULL_GENERAL_POINTER< / span > < span class = "plain" > , < / span > < span class = "identifier" > LIKELY_CE< / span > < span class = "plain" > );< / span >
< span class = "plain" > }< / span >
< span class = "reserved" > regions_data< / span > < span class = "plain" > *< / span > < span class = "functiontext" > PL::Regions::new_data< / span > < span class = "plain" > (< / span > < span class = "identifier" > inference_subject< / span > < span class = "plain" > *< / span > < span class = "identifier" > subj< / span > < span class = "plain" > ) {< / span >
< span class = "reserved" > regions_data< / span > < span class = "plain" > *< / span > < span class = "identifier" > rd< / span > < span class = "plain" > = < / span > < span class = "identifier" > CREATE< / span > < span class = "plain" > (< / span > < span class = "reserved" > regions_data< / span > < span class = "plain" > );< / span >
< span class = "identifier" > rd< / span > < span class = "plain" > -< / span > < span class = "element" > > in_region< / span > < span class = "plain" > = < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > rd< / span > < span class = "plain" > -< / span > < span class = "element" > > in_region_set_at< / span > < span class = "plain" > = < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > ;< / span >
2019-03-25 01:27:44 +02:00
< span class = "identifier" > rd< / span > < span class = "plain" > -< / span > < span class = "element" > > in_region_iname< / span > < span class = "plain" > = < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > ;< / span >
2019-03-17 14:40:57 +02:00
< span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "identifier" > rd< / span > < span class = "plain" > ;< / span >
< span class = "plain" > }< / span >
2019-03-25 01:27:44 +02:00
< span class = "identifier" > inter_name< / span > < span class = "plain" > *< / span > < span class = "functiontext" > PL::Regions::found_in_iname< / span > < span class = "plain" > (< / span > < span class = "identifier" > instance< / span > < span class = "plain" > *< / span > < span class = "identifier" > I< / span > < span class = "plain" > ) {< / span >
2019-04-19 16:36:05 +03:00
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > PF_I< / span > < span class = "plain" > (< / span > < span class = "identifier" > regions< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "plain" > )-< / span > < span class = "element" > > in_region_iname< / span > < span class = "plain" > == < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > )< / span >
< span class = "identifier" > PF_I< / span > < span class = "plain" > (< / span > < span class = "identifier" > regions< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "plain" > )-< / span > < span class = "element" > > in_region_iname< / span > < span class = "plain" > = < / span > < span class = "identifier" > Hierarchy::make_iname_in< / span > < span class = "plain" > (< / span > < span class = "identifier" > REGION_FOUND_IN_FN_HL< / span > < span class = "plain" > , < / span > < span class = "identifier" > Instances::package< / span > < span class = "plain" > (< / span > < span class = "identifier" > I< / span > < span class = "plain" > ));< / span >
2019-03-25 01:27:44 +02:00
< span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "identifier" > PF_I< / span > < span class = "plain" > (< / span > < span class = "identifier" > regions< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "plain" > )-< / span > < span class = "element" > > in_region_iname< / span > < span class = "plain" > ;< / span >
< span class = "plain" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > The function PL::Regions::start appears nowhere else.< / p >
< p class = "endnote" > The function PL::Regions::new_data is used in < a href = "#SP7" > § 7< / a > .< / p >
2019-03-25 01:27:44 +02:00
< p class = "endnote" > The function PL::Regions::found_in_iname is used in < a href = "#SP19_2" > § 19.2< / a > , < a href = "#SP20" > § 20< / a > .< / p >
2019-03-17 14:40:57 +02:00
< p class = "inwebparagraph" > < a id = "SP6" > < / a > < b > § 6. Kinds. < / b > This a kind name to do with regions which Inform provides special support
for; it recognises the English name when defined by the Standard Rules. (So
there is no need to translate this to other languages.)
< / p >
< pre class = "display" >
< span class = "plain" > < < / span > < span class = "identifier" > notable< / span > < span class = "plain" > -< / span > < span class = "identifier" > regions< / span > < span class = "plain" > -< / span > < span class = "identifier" > kinds< / span > < span class = "plain" > > ::=< / span >
< span class = "identifier" > region< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "inwebparagraph" > < a id = "SP7" > < / a > < b > § 7. < / b > < / p >
< pre class = "display" >
< span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "functiontext" > PL::Regions::regions_new_base_kind_notify< / span > < span class = "plain" > (< / span > < span class = "identifier" > kind< / span > < span class = "plain" > *< / span > < span class = "identifier" > new_base< / span > < span class = "plain" > , < / span > < span class = "reserved" > char< / span > < span class = "plain" > *< / span > < span class = "identifier" > text_stream< / 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 = "reserved" > if< / span > < span class = "plain" > (< < / span > < span class = "identifier" > notable< / span > < span class = "plain" > -< / span > < span class = "identifier" > regions< / span > < span class = "plain" > -< / span > < span class = "identifier" > kinds< / span > < span class = "plain" > > (< / span > < span class = "identifier" > W< / span > < span class = "plain" > )) {< / span >
< span class = "identifier" > K_region< / span > < span class = "plain" > = < / span > < span class = "identifier" > new_base< / span > < span class = "plain" > ; < / span > < span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "identifier" > TRUE< / span > < span class = "plain" > ;< / 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 = "plain" > }< / span >
< span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "functiontext" > PL::Regions::regions_new_subject_notify< / span > < span class = "plain" > (< / span > < span class = "identifier" > inference_subject< / span > < span class = "plain" > *< / span > < span class = "identifier" > subj< / span > < span class = "plain" > ) {< / span >
< span class = "identifier" > CREATE_PF_DATA< / span > < span class = "plain" > (< / span > < span class = "identifier" > regions< / span > < span class = "plain" > , < / span > < span class = "identifier" > subj< / span > < span class = "plain" > , < / span > < span class = "functiontext" > PL::Regions::new_data< / 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 = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > The function PL::Regions::regions_new_base_kind_notify is used in < a href = "#SP5" > § 5< / a > .< / p >
< p class = "endnote" > The function PL::Regions::regions_new_subject_notify is used in < a href = "#SP5" > § 5< / a > .< / p >
< p class = "inwebparagraph" > < a id = "SP8" > < / a > < b > § 8. < / b > Region needs to be an abstract object, not a thing or a room, so:
< / p >
< pre class = "display" >
< span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "functiontext" > PL::Regions::regions_set_subkind_notify< / span > < span class = "plain" > (< / span > < span class = "identifier" > kind< / span > < span class = "plain" > *< / span > < span class = "identifier" > sub< / span > < span class = "plain" > , < / span > < span class = "identifier" > kind< / span > < span class = "plain" > *< / span > < span class = "identifier" > super< / span > < span class = "plain" > ) {< / span >
< span class = "reserved" > if< / span > < span class = "plain" > ((< / span > < span class = "identifier" > sub< / span > < span class = "plain" > == < / span > < span class = "identifier" > K_region< / span > < span class = "plain" > ) & & (< / span > < span class = "identifier" > super< / span > < span class = "plain" > != < / span > < span class = "identifier" > K_object< / span > < span class = "plain" > )) {< / span >
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > problem_count< / span > < span class = "plain" > == 0)< / span >
2020-03-11 02:21:09 +02:00
< span class = "identifier" > Problems::Issue::sentence_problem< / span > < span class = "plain" > (< / span > < span class = "identifier" > Task::syntax_tree< / span > < span class = "plain" > (), < / span > < span class = "identifier" > _p_< / span > < span class = "plain" > (< / span > < span class = "identifier" > PM_RegionAdrift< / span > < span class = "plain" > ),< / span >
2019-03-17 14:40:57 +02:00
< span class = "string" > "'region' is not allowed to be a kind of anything (other than "< / span >
< span class = "string" > "'object')"< / span > < span class = "plain" > ,< / span >
< span class = "string" > "because it's too fundamental to the way Inform maps out the "< / span >
< span class = "string" > "geography of the physical world."< / span > < span class = "plain" > );< / span >
< span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "identifier" > TRUE< / span > < span class = "plain" > ;< / 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 = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > The function PL::Regions::regions_set_subkind_notify is used in < a href = "#SP5" > § 5< / a > .< / p >
< p class = "inwebparagraph" > < a id = "SP9" > < / a > < b > § 9. < / b > < / p >
< pre class = "display" >
< span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "functiontext" > PL::Regions::object_is_a_region< / span > < span class = "plain" > (< / span > < span class = "identifier" > instance< / span > < span class = "plain" > *< / span > < span class = "identifier" > I< / span > < span class = "plain" > ) {< / span >
< span class = "reserved" > if< / span > < span class = "plain" > ((< / span > < span class = "identifier" > Plugins::Manage::plugged_in< / span > < span class = "plain" > (< / span > < span class = "identifier" > regions_plugin< / span > < span class = "plain" > )) & & (< / span > < span class = "identifier" > K_region< / span > < span class = "plain" > ) & & (< / span > < span class = "identifier" > I< / span > < span class = "plain" > ) & & < / span >
< span class = "plain" > (< / span > < span class = "identifier" > Instances::of_kind< / span > < span class = "plain" > (< / span > < span class = "identifier" > I< / span > < span class = "plain" > , < / span > < span class = "identifier" > K_region< / span > < span class = "plain" > ))) < / span > < span class = "reserved" > return< / 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" > FALSE< / span > < span class = "plain" > ;< / span >
< span class = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > The function PL::Regions::object_is_a_region is used in < a href = "#SP18" > § 18< / a > , 3/sm (< a href = "3-sm.html#SP32_2" > § 32.2< / a > ), 3/em (< a href = "3-em.html#SP11" > § 11< / a > , < a href = "3-em.html#SP22_4_1" > § 22.4.1< / a > ).< / p >
< p class = "inwebparagraph" > < a id = "SP10" > < / a > < b > § 10. < / b > Rooms are always more specific than regions; if region X is within
region Y, then X is more specific than Y; otherwise any two regions are
equally specific. (This is used in sorting rules by the specificity of their
domains.)
< / p >
< pre class = "display" >
< span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "functiontext" > PL::Regions::regions_more_specific< / span > < span class = "plain" > (< / span > < span class = "identifier" > instance< / span > < span class = "plain" > *< / span > < span class = "identifier" > I1< / span > < span class = "plain" > , < / span > < span class = "identifier" > instance< / span > < span class = "plain" > *< / span > < span class = "identifier" > I2< / span > < span class = "plain" > ) {< / span >
< span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > r1< / span > < span class = "plain" > = < / span > < span class = "identifier" > Instances::of_kind< / span > < span class = "plain" > (< / span > < span class = "identifier" > I1< / span > < span class = "plain" > , < / span > < span class = "identifier" > K_room< / span > < span class = "plain" > );< / span >
< span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > r2< / span > < span class = "plain" > = < / span > < span class = "identifier" > Instances::of_kind< / span > < span class = "plain" > (< / span > < span class = "identifier" > I2< / span > < span class = "plain" > , < / span > < span class = "identifier" > K_room< / span > < span class = "plain" > );< / span >
< span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > reg1< / span > < span class = "plain" > = < / span > < span class = "identifier" > Instances::of_kind< / span > < span class = "plain" > (< / span > < span class = "identifier" > I1< / span > < span class = "plain" > , < / span > < span class = "identifier" > K_region< / span > < span class = "plain" > );< / span >
< span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > reg2< / span > < span class = "plain" > = < / span > < span class = "identifier" > Instances::of_kind< / span > < span class = "plain" > (< / span > < span class = "identifier" > I2< / span > < span class = "plain" > , < / span > < span class = "identifier" > K_region< / span > < span class = "plain" > );< / span >
< span class = "reserved" > if< / span > < span class = "plain" > ((< / span > < span class = "identifier" > r1< / span > < span class = "plain" > ) & & (< / span > < span class = "identifier" > reg2< / span > < span class = "plain" > )) < / span > < span class = "reserved" > return< / span > < span class = "plain" > 1;< / span >
< span class = "reserved" > if< / span > < span class = "plain" > ((< / span > < span class = "identifier" > reg1< / span > < span class = "plain" > ) & & (< / span > < span class = "identifier" > r2< / span > < span class = "plain" > )) < / span > < span class = "reserved" > return< / span > < span class = "plain" > -1;< / span >
< span class = "reserved" > if< / span > < span class = "plain" > ((< / span > < span class = "identifier" > reg1< / span > < span class = "plain" > ) & & (< / span > < span class = "identifier" > reg2< / span > < span class = "plain" > )) {< / span >
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "functiontext" > PL::Spatial::encloses< / span > < span class = "plain" > (< / span > < span class = "identifier" > I1< / span > < span class = "plain" > , < / span > < span class = "identifier" > I2< / span > < span class = "plain" > )) < / span > < span class = "reserved" > return< / span > < span class = "plain" > 1;< / span >
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "functiontext" > PL::Spatial::encloses< / span > < span class = "plain" > (< / span > < span class = "identifier" > I2< / span > < span class = "plain" > , < / span > < span class = "identifier" > I1< / span > < span class = "plain" > )) < / span > < span class = "reserved" > return< / span > < span class = "plain" > -1;< / span >
< span class = "plain" > }< / span >
< span class = "reserved" > return< / span > < span class = "plain" > 0;< / span >
< span class = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > The function PL::Regions::regions_more_specific is used in < a href = "#SP5" > § 5< / a > .< / p >
< p class = "inwebparagraph" > < a id = "SP11" > < / a > < b > § 11. Properties. < / b > This is a property name to do with regions which Inform provides special
support for; it recognises the English name when it is defined by the
Standard Rules. (So there is no need to translate this to other languages.)
< / p >
< pre class = "display" >
< span class = "plain" > < < / span > < span class = "identifier" > notable< / span > < span class = "plain" > -< / span > < span class = "identifier" > regions< / span > < span class = "plain" > -< / span > < span class = "identifier" > properties< / span > < span class = "plain" > > ::=< / span >
< span class = "identifier" > map< / span > < span class = "plain" > < / span > < span class = "identifier" > region< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "inwebparagraph" > < a id = "SP12" > < / a > < b > § 12. < / b > < / p >
< pre class = "display" >
< span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "functiontext" > PL::Regions::regions_new_property_notify< / span > < span class = "plain" > (< / span > < span class = "identifier" > 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" > notable< / span > < span class = "plain" > -< / span > < span class = "identifier" > regions< / span > < span class = "plain" > -< / span > < span class = "identifier" > properties< / span > < span class = "plain" > > (< / span > < span class = "identifier" > prn< / span > < span class = "plain" > -< / span > < span class = "element" > > name< / span > < span class = "plain" > ))< / span >
< span class = "identifier" > P_map_region< / span > < span class = "plain" > = < / span > < span class = "identifier" > prn< / 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 = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > The function PL::Regions::regions_new_property_notify is used in < a href = "#SP5" > § 5< / a > .< / p >
< p class = "inwebparagraph" > < a id = "SP13" > < / a > < b > § 13. < / b > < / p >
< pre class = "display" >
< span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "functiontext" > PL::Regions::regions_estimate_property_usage< / 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" > int< / span > < span class = "plain" > *< / span > < span class = "identifier" > words_used< / 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" > K_region< / span > < span class = "plain" > )) *< / span > < span class = "identifier" > words_used< / span > < span class = "plain" > += 2;< / span >
< span class = "reserved" > return< / 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 = "endnote" > The function PL::Regions::regions_estimate_property_usage is used in < a href = "#SP5" > § 5< / a > .< / p >
< p class = "inwebparagraph" > < a id = "SP14" > < / a > < b > § 14. Assertions. < / b > The following doesn't really intervene at all: it simply produces two problem
messages which would have been less helpful if core Inform had produced them.
< / p >
< pre class = "display" >
< span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "functiontext" > PL::Regions::regions_intervene_in_assertion< / span > < span class = "plain" > (< / span > < span class = "identifier" > parse_node< / span > < span class = "plain" > *< / span > < span class = "identifier" > px< / span > < span class = "plain" > , < / span > < span class = "identifier" > parse_node< / span > < span class = "plain" > *< / span > < span class = "identifier" > py< / 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" > px< / span > < span class = "plain" > ) == < / span > < span class = "identifier" > PROPER_NOUN_NT< / span > < span class = "plain" > ) & & < / span >
< span class = "plain" > (< / span > < span class = "identifier" > ParseTree::get_type< / span > < span class = "plain" > (< / span > < span class = "identifier" > py< / span > < span class = "plain" > ) == < / span > < span class = "identifier" > COMMON_NOUN_NT< / span > < span class = "plain" > )) {< / span >
< span class = "identifier" > inference_subject< / span > < span class = "plain" > *< / span > < span class = "identifier" > left_subject< / span > < span class = "plain" > = < / span > < span class = "identifier" > ParseTree::get_subject< / span > < span class = "plain" > (< / span > < span class = "identifier" > px< / span > < span class = "plain" > );< / span >
< span class = "identifier" > inference_subject< / span > < span class = "plain" > *< / span > < span class = "identifier" > right_kind< / span > < span class = "plain" > = < / span > < span class = "identifier" > ParseTree::get_subject< / span > < span class = "plain" > (< / span > < span class = "identifier" > py< / span > < span class = "plain" > );< / span >
< span class = "reserved" > if< / span > < span class = "plain" > ((< / span > < span class = "identifier" > InferenceSubjects::is_an_object< / span > < span class = "plain" > (< / span > < span class = "identifier" > left_subject< / span > < span class = "plain" > )) & & < / span >
< span class = "plain" > (< / span > < span class = "identifier" > right_kind< / span > < span class = "plain" > == < / span > < span class = "identifier" > Kinds::Knowledge::as_subject< / span > < span class = "plain" > (< / span > < span class = "identifier" > K_region< / span > < span class = "plain" > ))) {< / span >
< span class = "identifier" > instance< / span > < span class = "plain" > *< / span > < span class = "identifier" > left_object< / span > < span class = "plain" > = < / span > < span class = "identifier" > InferenceSubjects::as_object_instance< / span > < span class = "plain" > (< / span > < span class = "identifier" > left_subject< / span > < span class = "plain" > );< / span >
< span class = "reserved" > if< / span > < span class = "plain" > ((< / span > < span class = "identifier" > left_object< / span > < span class = "plain" > ) & & < / span >
< span class = "plain" > (< / span > < span class = "identifier" > current_sentence< / span > < span class = "plain" > != < / span > < span class = "identifier" > Instances::get_creating_sentence< / span > < span class = "plain" > (< / span > < span class = "identifier" > left_object< / span > < span class = "plain" > )) & & < / span >
< span class = "plain" > (< / span > < span class = "identifier" > Instances::of_kind< / span > < span class = "plain" > (< / span > < span class = "identifier" > left_object< / span > < span class = "plain" > , < / span > < span class = "identifier" > K_region< / span > < span class = "plain" > ) == < / span > < span class = "identifier" > FALSE< / span > < span class = "plain" > )) {< / span >
< span class = "identifier" > Problems::Issue::subject_problem_at_sentence< / span > < span class = "plain" > (< / span > < span class = "identifier" > _p_< / span > < span class = "plain" > (< / span > < span class = "identifier" > PM_ExistingRegion< / span > < span class = "plain" > ),< / span >
< span class = "identifier" > left_subject< / span > < span class = "plain" > ,< / span >
< span class = "string" > "(which I notice in another sentence) seems now to "< / span >
< span class = "string" > "be declared as a new region"< / span > < span class = "plain" > ,< / span >
< span class = "string" > "which is suspect. Perhaps I have misinterpreted what was "< / span >
< span class = "string" > "meant to be a new name for an old one?"< / span > < span class = "plain" > );< / span >
< span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "identifier" > TRUE< / span > < span class = "plain" > ;< / 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" > ParseTree::get_type< / span > < span class = "plain" > (< / span > < span class = "identifier" > px< / span > < span class = "plain" > ) == < / span > < span class = "identifier" > RELATIONSHIP_NT< / span > < span class = "plain" > ) & & < / span >
< span class = "plain" > (< / span > < span class = "identifier" > ParseTree::get_subject< / span > < span class = "plain" > (< / span > < span class = "identifier" > py< / span > < span class = "plain" > ) == < / span > < span class = "identifier" > Kinds::Knowledge::as_subject< / span > < span class = "plain" > (< / span > < span class = "identifier" > K_region< / span > < span class = "plain" > ))) {< / span >
2020-03-11 02:21:09 +02:00
< span class = "identifier" > Problems::Issue::assertion_problem< / span > < span class = "plain" > (< / span > < span class = "identifier" > Task::syntax_tree< / span > < span class = "plain" > (), < / span > < span class = "identifier" > _p_< / span > < span class = "plain" > (< / span > < span class = "identifier" > PM_RegionRelated< / span > < span class = "plain" > ),< / span >
2019-03-17 14:40:57 +02:00
< span class = "string" > "a region cannot be given a specific location"< / span > < span class = "plain" > ,< / span >
< span class = "string" > "since it contains what may be many rooms, which may not be "< / span >
< span class = "string" > "contiguous and could be scattered about all over. (Sometimes "< / span >
< span class = "string" > "this problem arises because an ambiguous sentence like 'East "< / span >
< span class = "string" > "of Eden is a region.' has been used: Inform reads that as "< / span >
< span class = "string" > "saying that a nameless region lies to the east of the room "< / span >
< span class = "string" > "'Eden'. The desired effect can be got using 'called' to stop "< / span >
< span class = "string" > "Inform taking 'East of' literally: for instance, 'The Land of "< / span >
< span class = "string" > "Nod is in a region called East of Eden.'"< / span > < span class = "plain" > );< / span >
< span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "identifier" > TRUE< / span > < span class = "plain" > ;< / 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 = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > The function PL::Regions::regions_intervene_in_assertion is used in < a href = "#SP5" > § 5< / a > .< / p >
< p class = "inwebparagraph" > < a id = "SP15" > < / a > < b > § 15. Relations. < / b > < / p >
< pre class = "display" >
< span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "functiontext" > PL::Regions::regions_name_to_early_infs< / 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" > inference_subject< / 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" > notable< / span > < span class = "plain" > -< / span > < span class = "identifier" > regions< / span > < span class = "plain" > -< / span > < span class = "identifier" > kinds< / span > < span class = "plain" > > (< / span > < span class = "identifier" > W< / span > < span class = "plain" > )) & & (< / span > < span class = "identifier" > K_region< / span > < span class = "plain" > == < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > )) *< / span > < span class = "identifier" > infs< / span > < span class = "plain" > = < / span > < span class = "identifier" > infs_region< / 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 = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > The function PL::Regions::regions_name_to_early_infs is used in < a href = "#SP5" > § 5< / a > .< / p >
< p class = "inwebparagraph" > < a id = "SP16" > < / a > < b > § 16. < / b > < / p >
< pre class = "display" >
< span class = "reserved" > void< / span > < span class = "plain" > < / span > < span class = "functiontext" > PL::Regions::create_relations< / span > < span class = "plain" > (< / span > < span class = "reserved" > void< / span > < span class = "plain" > ) {< / span >
< span class = "identifier" > R_regional_containment< / span > < span class = "plain" > =< / span >
< span class = "identifier" > BinaryPredicates::make_pair< / span > < span class = "plain" > (< / span > < span class = "identifier" > SPATIAL_KBP< / span > < span class = "plain" > ,< / span >
< span class = "identifier" > BinaryPredicates::new_term< / span > < span class = "plain" > (< / span > < span class = "identifier" > infs_region< / span > < span class = "plain" > ),< / span >
< span class = "identifier" > BinaryPredicates::new_term< / span > < span class = "plain" > (< / span > < span class = "identifier" > Kinds::Knowledge::as_subject< / span > < span class = "plain" > (< / span > < span class = "identifier" > K_object< / span > < span class = "plain" > )),< / span >
< span class = "identifier" > I< / span > < span class = "string" > "region-contains"< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "in-region"< / span > < span class = "plain" > ,< / span >
< span class = "identifier" > NULL< / span > < span class = "plain" > , < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > , < / span > < span class = "identifier" > Calculus::Schemas::new< / span > < span class = "plain" > (< / span > < span class = "string" > "TestRegionalContainment(*2,*1)"< / span > < span class = "plain" > ),< / span >
< span class = "identifier" > Preform::Nonparsing::wording< / span > < span class = "plain" > (< < / span > < span class = "identifier" > relation< / span > < span class = "plain" > -< / span > < span class = "identifier" > names< / span > < span class = "plain" > > ,< / span >
< span class = "identifier" > REGIONAL_CONTAINMENT_RELATION_NAME< / span > < span class = "plain" > ));< / span >
< span class = "identifier" > BinaryPredicates::set_index_details< / span > < span class = "plain" > (< / span > < span class = "identifier" > R_regional_containment< / span > < span class = "plain" > , < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > , < / span > < span class = "string" > "room/region"< / span > < span class = "plain" > );< / span >
< span class = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > The function PL::Regions::create_relations is used in 3/sr (< a href = "3-sr.html#SP3" > § 3< / a > ).< / p >
< p class = "inwebparagraph" > < a id = "SP17" > < / a > < b > § 17. < / b > We intervene only in limited cases: X contains Y, X regionally contains Y,
or X incorporates Y; and only when X is a region. (This of course only
applies to the built-in spatial relationships; regions are entirely free
to participate in nonspatial relations.)
< / p >
< pre class = "display" >
< span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "functiontext" > PL::Regions::assert_relations< / span > < span class = "plain" > (< / span > < span class = "identifier" > binary_predicate< / span > < span class = "plain" > *< / span > < span class = "identifier" > relation< / span > < span class = "plain" > ,< / span >
< span class = "identifier" > instance< / span > < span class = "plain" > *< / span > < span class = "identifier" > I0< / span > < span class = "plain" > , < / span > < span class = "identifier" > instance< / span > < span class = "plain" > *< / span > < span class = "identifier" > I1< / span > < span class = "plain" > ) {< / span >
< span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > I0_is_region< / 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" > Instances::of_kind< / span > < span class = "plain" > (< / span > < span class = "identifier" > I0< / span > < span class = "plain" > , < / span > < span class = "identifier" > K_region< / span > < span class = "plain" > )) < / span > < span class = "identifier" > I0_is_region< / span > < span class = "plain" > = < / span > < span class = "identifier" > TRUE< / span > < span class = "plain" > ;< / span >
< span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > I1_is_region< / 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" > Instances::of_kind< / span > < span class = "plain" > (< / span > < span class = "identifier" > I1< / span > < span class = "plain" > , < / span > < span class = "identifier" > K_region< / span > < span class = "plain" > )) < / span > < span class = "identifier" > I1_is_region< / span > < span class = "plain" > = < / span > < span class = "identifier" > TRUE< / span > < span class = "plain" > ;< / span >
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > I0_is_region< / span > < span class = "plain" > ) {< / span >
< span class = "reserved" > if< / span > < span class = "plain" > ((< / span > < span class = "identifier" > relation< / span > < span class = "plain" > == < / span > < span class = "identifier" > R_incorporation< / span > < span class = "plain" > ) ||< / span >
< span class = "plain" > (< / span > < span class = "identifier" > relation< / span > < span class = "plain" > == < / span > < span class = "identifier" > R_containment< / span > < span class = "plain" > ) ||< / span >
< span class = "plain" > (< / span > < span class = "identifier" > relation< / span > < span class = "plain" > == < / span > < span class = "identifier" > R_regional_containment< / span > < span class = "plain" > )) {< / span >
< < span class = "cwebmacro" > You can only be declared as in one region< / span > < span class = "cwebmacronumber" > 17.1< / span > > < span class = "plain" > ;< / span >
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > I1_is_region< / span > < span class = "plain" > ) < / span > < < span class = "cwebmacro" > A region is being put inside a region< / span > < span class = "cwebmacronumber" > 17.2< / span > >
< span class = "reserved" > else< / span > < span class = "plain" > < / span > < < span class = "cwebmacro" > A room is being put inside a region< / span > < span class = "cwebmacronumber" > 17.3< / span > > < span class = "plain" > ;< / span >
< span class = "plain" > } < / span > < span class = "reserved" > else< / span > < span class = "plain" > {< / span >
2020-03-11 02:21:09 +02:00
< span class = "identifier" > Problems::Issue::sentence_problem< / span > < span class = "plain" > (< / span > < span class = "identifier" > Task::syntax_tree< / span > < span class = "plain" > (), < / span > < span class = "identifier" > _p_< / span > < span class = "plain" > (< / span > < span class = "identifier" > PM_RegionRelation< / span > < span class = "plain" > ),< / span >
2019-03-17 14:40:57 +02:00
< span class = "string" > "regions can only contain rooms"< / span > < span class = "plain" > ,< / span >
< span class = "string" > "and have no other relationships."< / span > < span class = "plain" > );< / span >
< span class = "plain" > }< / span >
< span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "identifier" > TRUE< / 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" > I1_is_region< / span > < span class = "plain" > ) {< / span >
< span class = "reserved" > if< / span > < span class = "plain" > ((< / span > < span class = "identifier" > relation< / span > < span class = "plain" > == < / span > < span class = "identifier" > R_incorporation< / span > < span class = "plain" > ) ||< / span >
< span class = "plain" > (< / span > < span class = "identifier" > relation< / span > < span class = "plain" > == < / span > < span class = "identifier" > R_containment< / span > < span class = "plain" > ) ||< / span >
< span class = "plain" > (< / span > < span class = "identifier" > relation< / span > < span class = "plain" > == < / span > < span class = "identifier" > R_regional_containment< / span > < span class = "plain" > )) {< / span >
2020-03-11 02:21:09 +02:00
< span class = "identifier" > Problems::Issue::sentence_problem< / span > < span class = "plain" > (< / span > < span class = "identifier" > Task::syntax_tree< / span > < span class = "plain" > (), < / span > < span class = "identifier" > _p_< / span > < span class = "plain" > (< / span > < span class = "identifier" > PM_RegionRelation2< / span > < span class = "plain" > ),< / span >
2019-03-17 14:40:57 +02:00
< span class = "string" > "regions can only be contained in other regions"< / span > < span class = "plain" > ,< / span >
< span class = "string" > "and not for example in rooms."< / span > < span class = "plain" > );< / span >
< span class = "plain" > }< / 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 = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > The function PL::Regions::assert_relations is used in 3/sr (< a href = "3-sr.html#SP6_1" > § 6.1< / a > ).< / p >
< p class = "inwebparagraph" > < a id = "SP17_1" > < / a > < b > § 17.1. < / b > < code class = "display" >
< < span class = "cwebmacrodefn" > You can only be declared as in one region< / span > < span class = "cwebmacronumber" > 17.1< / span > > =
< / code > < / p >
< pre class = "displaydefn" >
< span class = "reserved" > if< / span > < span class = "plain" > ((< / span > < span class = "identifier" > PF_I< / span > < span class = "plain" > (< / span > < span class = "identifier" > regions< / span > < span class = "plain" > , < / span > < span class = "identifier" > I1< / span > < span class = "plain" > )-< / span > < span class = "element" > > in_region< / span > < span class = "plain" > ) & & < / span >
< span class = "plain" > (< / span > < span class = "identifier" > PF_I< / span > < span class = "plain" > (< / span > < span class = "identifier" > regions< / span > < span class = "plain" > , < / span > < span class = "identifier" > I1< / span > < span class = "plain" > )-< / span > < span class = "element" > > in_region< / span > < span class = "plain" > != < / span > < span class = "identifier" > I0< / span > < span class = "plain" > )) {< / span >
2020-03-11 02:21:09 +02:00
< span class = "identifier" > Problems::Issue::sentence_problem< / span > < span class = "plain" > (< / span > < span class = "identifier" > Task::syntax_tree< / span > < span class = "plain" > (), < / span > < span class = "identifier" > _p_< / span > < span class = "plain" > (< / span > < span class = "identifier" > PM_RegionInTwoRegions< / span > < span class = "plain" > ),< / span >
2019-03-17 14:40:57 +02:00
< span class = "string" > "each region can only be declared to be inside a single "< / span >
< span class = "string" > "other region"< / span > < span class = "plain" > ,< / span >
< span class = "string" > "since although regions can be placed inside each other, "< / span >
< span class = "string" > "they are not permitted to overlap."< / span > < span class = "plain" > );< / span >
< span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "identifier" > TRUE< / span > < span class = "plain" > ;< / span >
< span class = "plain" > }< / span >
< span class = "identifier" > PF_I< / span > < span class = "plain" > (< / span > < span class = "identifier" > regions< / span > < span class = "plain" > , < / span > < span class = "identifier" > I1< / span > < span class = "plain" > )-< / span > < span class = "element" > > in_region< / span > < span class = "plain" > = < / span > < span class = "identifier" > I0< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > PF_I< / span > < span class = "plain" > (< / span > < span class = "identifier" > regions< / span > < span class = "plain" > , < / span > < span class = "identifier" > I1< / span > < span class = "plain" > )-< / span > < span class = "element" > > in_region_set_at< / span > < span class = "plain" > = < / span > < span class = "identifier" > current_sentence< / span > < span class = "plain" > ;< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > This code is used in < a href = "#SP17" > § 17< / a > .< / p >
< p class = "inwebparagraph" > < a id = "SP17_2" > < / a > < b > § 17.2. < / b > < code class = "display" >
< < span class = "cwebmacrodefn" > A region is being put inside a region< / span > < span class = "cwebmacronumber" > 17.2< / span > > =
< / code > < / p >
< pre class = "displaydefn" >
< span class = "identifier" > inference_subject< / span > < span class = "plain" > *< / span > < span class = "identifier" > inner< / span > < span class = "plain" > = < / span > < span class = "identifier" > Instances::as_subject< / span > < span class = "plain" > (< / span > < span class = "identifier" > I1< / span > < span class = "plain" > );< / span >
< span class = "identifier" > inference_subject< / span > < span class = "plain" > *< / span > < span class = "identifier" > outer< / span > < span class = "plain" > = < / span > < span class = "identifier" > Instances::as_subject< / span > < span class = "plain" > (< / span > < span class = "identifier" > I0< / span > < span class = "plain" > );< / span >
< span class = "identifier" > World::Inferences::draw< / span > < span class = "plain" > (< / span > < span class = "constant" > PARENTAGE_INF< / span > < span class = "plain" > , < / span > < span class = "identifier" > inner< / span > < span class = "plain" > , < / span > < span class = "identifier" > CERTAIN_CE< / span > < span class = "plain" > , < / span > < span class = "identifier" > outer< / span > < span class = "plain" > , < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > );< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > This code is used in < a href = "#SP17" > § 17< / a > .< / p >
< p class = "inwebparagraph" > < a id = "SP17_3" > < / a > < b > § 17.3. < / b > Anything in or part of a region is necessarily a room, if it isn't known
to be a region already:
< / p >
< p class = "macrodefinition" > < code class = "display" >
< < span class = "cwebmacrodefn" > A room is being put inside a region< / span > < span class = "cwebmacronumber" > 17.3< / span > > =
< / code > < / p >
< pre class = "displaydefn" >
< span class = "identifier" > inference_subject< / span > < span class = "plain" > *< / span > < span class = "identifier" > rm< / span > < span class = "plain" > = < / span > < span class = "identifier" > Instances::as_subject< / span > < span class = "plain" > (< / span > < span class = "identifier" > I1< / 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 = "identifier" > Rvalues::from_instance< / span > < span class = "plain" > (< / span > < span class = "identifier" > I0< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Calculus::Propositions::Abstract::assert_kind_of_object< / span > < span class = "plain" > (< / span > < span class = "identifier" > I1< / span > < span class = "plain" > , < / span > < span class = "identifier" > K_room< / span > < span class = "plain" > );< / span >
< span class = "identifier" > World::Inferences::draw_property< / span > < span class = "plain" > (< / span > < span class = "identifier" > rm< / span > < span class = "plain" > , < / span > < span class = "identifier" > P_map_region< / span > < span class = "plain" > , < / span > < span class = "identifier" > spec< / span > < span class = "plain" > );< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > This code is used in < a href = "#SP17" > § 17< / a > .< / p >
< p class = "inwebparagraph" > < a id = "SP18" > < / a > < b > § 18. < / b > Note that because we use regular < code class = "display" > < span class = "extract" > PARENTAGE_INF< / span > < / code > inferences to remember
that one region is inside another, it follows that the progenitor of a
region is either the next broadest region containing it, or else < code class = "display" > < span class = "extract" > NULL< / span > < / code > .
< / p >
< pre class = "display" >
< span class = "identifier" > instance< / span > < span class = "plain" > *< / span > < span class = "functiontext" > PL::Regions::enclosing< / span > < span class = "plain" > (< / span > < span class = "identifier" > instance< / span > < span class = "plain" > *< / span > < span class = "identifier" > reg< / span > < span class = "plain" > ) {< / span >
< span class = "identifier" > instance< / span > < span class = "plain" > *< / span > < span class = "identifier" > P< / 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 = "functiontext" > PL::Spatial::object_is_a_room< / span > < span class = "plain" > (< / span > < span class = "identifier" > reg< / span > < span class = "plain" > )) < / span > < span class = "identifier" > P< / span > < span class = "plain" > = < / span > < span class = "identifier" > PF_I< / span > < span class = "plain" > (< / span > < span class = "identifier" > regions< / span > < span class = "plain" > , < / span > < span class = "identifier" > reg< / span > < span class = "plain" > )-< / span > < span class = "element" > > in_region< / span > < span class = "plain" > ;< / span >
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "functiontext" > PL::Regions::object_is_a_region< / span > < span class = "plain" > (< / span > < span class = "identifier" > reg< / span > < span class = "plain" > )) < / span > < span class = "identifier" > P< / span > < span class = "plain" > = < / span > < span class = "functiontext" > PL::Spatial::progenitor< / span > < span class = "plain" > (< / span > < span class = "identifier" > reg< / span > < span class = "plain" > );< / span >
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "functiontext" > PL::Regions::object_is_a_region< / span > < span class = "plain" > (< / span > < span class = "identifier" > P< / 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" > NULL< / span > < span class = "plain" > ;< / span >
< span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "identifier" > P< / span > < span class = "plain" > ;< / span >
< span class = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > The function PL::Regions::enclosing is used in < a href = "#SP21" > § 21< / a > , 3/sm2 (< a href = "3-sm2.html#SP38" > § 38< / a > , < a href = "3-sm2.html#SP42_1" > § 42.1< / a > , < a href = "3-sm2.html#SP43_2" > § 43.2< / a > ), 3/hm (< a href = "3-hm.html#SP6_2" > § 6.2< / a > , < a href = "3-hm.html#SP13" > § 13< / a > ), 3/em (< a href = "3-em.html#SP11" > § 11< / a > ).< / p >
< p class = "inwebparagraph" > < a id = "SP19" > < / a > < b > § 19. Model completion. < / b > < / p >
< pre class = "display" >
< span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "functiontext" > PL::Regions::regions_complete_model< / span > < span class = "plain" > (< / span > < span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > stage< / span > < span class = "plain" > ) {< / span >
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > stage< / span > < span class = "plain" > == 2) < / span > < < span class = "cwebmacro" > Assert map-region properties of rooms and regions< / span > < span class = "cwebmacronumber" > 19.1< / span > > < span class = "plain" > ;< / span >
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > stage< / span > < span class = "plain" > == 3) < / span > < < span class = "cwebmacro" > Assert regional-found-in properties of regions< / span > < span class = "cwebmacronumber" > 19.2< / 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 = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > The function PL::Regions::regions_complete_model is used in < a href = "#SP5" > § 5< / a > .< / p >
< p class = "inwebparagraph" > < a id = "SP19_1" > < / a > < b > § 19.1. < / b > The following is needed in case somebody does something like this:
< / p >
< blockquote >
< p > A desert room is a kind of room. The map region of a desert room is usually Sahara.< / p >
< / blockquote >
< p class = "macrodefinition" > < code class = "display" >
< < span class = "cwebmacrodefn" > Assert map-region properties of rooms and regions< / span > < span class = "cwebmacronumber" > 19.1< / span > > =
< / code > < / p >
< pre class = "displaydefn" >
< span class = "identifier" > instance< / span > < span class = "plain" > *< / span > < span class = "identifier" > I< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > LOOP_OVER_OBJECT_INSTANCES< / span > < span class = "plain" > (< / span > < span class = "identifier" > I< / span > < span class = "plain" > )< / span >
< span class = "reserved" > if< / span > < span class = "plain" > ((< / span > < span class = "identifier" > Instances::of_kind< / span > < span class = "plain" > (< / span > < span class = "identifier" > I< / span > < span class = "plain" > , < / span > < span class = "identifier" > K_room< / span > < span class = "plain" > )) ||< / span >
< span class = "plain" > (< / span > < span class = "identifier" > Instances::of_kind< / span > < span class = "plain" > (< / span > < span class = "identifier" > I< / span > < span class = "plain" > , < / span > < span class = "identifier" > K_region< / span > < span class = "plain" > ))) {< / span >
< span class = "identifier" > parse_node< / span > < span class = "plain" > *< / span > < span class = "identifier" > where< / span > < span class = "plain" > = < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > parse_node< / span > < span class = "plain" > *< / span > < span class = "identifier" > val< / span > < span class = "plain" > = < / span > < span class = "identifier" > World::Inferences::get_prop_state_at< / span > < span class = "plain" > (< / span >
< span class = "identifier" > Instances::as_subject< / span > < span class = "plain" > (< / span > < span class = "identifier" > I< / span > < span class = "plain" > ), < / span > < span class = "identifier" > P_map_region< / span > < span class = "plain" > , & < / span > < span class = "identifier" > where< / span > < span class = "plain" > );< / span >
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > val< / span > < span class = "plain" > ) {< / span >
< span class = "identifier" > instance< / span > < span class = "plain" > *< / span > < span class = "identifier" > reg< / span > < span class = "plain" > =< / span >
< span class = "identifier" > Rvalues::to_object_instance< / span > < span class = "plain" > (< / span > < span class = "identifier" > val< / span > < span class = "plain" > );< / span >
< span class = "identifier" > PF_I< / span > < span class = "plain" > (< / span > < span class = "identifier" > regions< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "plain" > )-< / span > < span class = "element" > > in_region< / span > < span class = "plain" > = < / span > < span class = "identifier" > reg< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > PF_I< / span > < span class = "plain" > (< / span > < span class = "identifier" > regions< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "plain" > )-< / span > < span class = "element" > > in_region_set_at< / span > < span class = "plain" > = < / span > < span class = "identifier" > where< / span > < span class = "plain" > ;< / span >
< span class = "plain" > }< / span >
< span class = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > This code is used in < a href = "#SP19" > § 19< / a > .< / p >
< p class = "inwebparagraph" > < a id = "SP19_2" > < / a > < b > § 19.2. < / b > < code class = "display" >
< < span class = "cwebmacrodefn" > Assert regional-found-in properties of regions< / span > < span class = "cwebmacronumber" > 19.2< / span > > =
< / code > < / p >
< pre class = "displaydefn" >
< span class = "identifier" > P_regional_found_in< / span > < span class = "plain" > = < / span > < span class = "identifier" > Properties::Valued::new_nameless< / span > < span class = "plain" > (< / span >
< span class = "identifier" > I< / span > < span class = "string" > "regional_found_in"< / span > < span class = "plain" > , < / span > < span class = "identifier" > K_text< / span > < span class = "plain" > );< / span >
< span class = "identifier" > instance< / span > < span class = "plain" > *< / span > < span class = "identifier" > I< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > LOOP_OVER_OBJECT_INSTANCES< / span > < span class = "plain" > (< / span > < span class = "identifier" > I< / span > < span class = "plain" > )< / span >
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > Instances::of_kind< / span > < span class = "plain" > (< / span > < span class = "identifier" > I< / span > < span class = "plain" > , < / span > < span class = "identifier" > K_region< / span > < span class = "plain" > )) {< / span >
2019-03-25 01:27:44 +02:00
< span class = "identifier" > inter_name< / span > < span class = "plain" > *< / span > < span class = "identifier" > iname< / span > < span class = "plain" > = < / span > < span class = "functiontext" > PL::Regions::found_in_iname< / span > < span class = "plain" > (< / span > < span class = "identifier" > I< / span > < span class = "plain" > );< / span >
2019-03-17 14:40:57 +02:00
< span class = "identifier" > Properties::Valued::assert< / span > < span class = "plain" > (< / span > < span class = "identifier" > P_regional_found_in< / span > < span class = "plain" > , < / span > < span class = "identifier" > Instances::as_subject< / span > < span class = "plain" > (< / span > < span class = "identifier" > I< / span > < span class = "plain" > ),< / span >
< span class = "identifier" > Rvalues::from_iname< / span > < span class = "plain" > (< / span > < span class = "identifier" > iname< / span > < span class = "plain" > ), < / span > < span class = "identifier" > CERTAIN_CE< / span > < span class = "plain" > );< / span >
< span class = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > This code is used in < a href = "#SP19" > § 19< / a > .< / p >
< p class = "inwebparagraph" > < a id = "SP20" > < / a > < b > § 20. < / b > < / p >
< pre class = "display" >
< span class = "reserved" > void< / span > < span class = "plain" > < / span > < span class = "functiontext" > PL::Regions::write_regional_found_in_routines< / span > < span class = "plain" > (< / span > < span class = "reserved" > void< / span > < span class = "plain" > ) {< / span >
< span class = "identifier" > instance< / span > < span class = "plain" > *< / span > < span class = "identifier" > I< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > LOOP_OVER_OBJECT_INSTANCES< / span > < span class = "plain" > (< / span > < span class = "identifier" > I< / span > < span class = "plain" > )< / span >
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > Instances::of_kind< / span > < span class = "plain" > (< / span > < span class = "identifier" > I< / span > < span class = "plain" > , < / span > < span class = "identifier" > K_region< / span > < span class = "plain" > )) {< / span >
2019-03-25 01:27:44 +02:00
< span class = "identifier" > inter_name< / span > < span class = "plain" > *< / span > < span class = "identifier" > iname< / span > < span class = "plain" > = < / span > < span class = "functiontext" > PL::Regions::found_in_iname< / span > < span class = "plain" > (< / span > < span class = "identifier" > I< / span > < span class = "plain" > );< / span >
< span class = "identifier" > packaging_state< / span > < span class = "plain" > < / span > < span class = "identifier" > save< / span > < span class = "plain" > = < / span > < span class = "identifier" > Routines::begin< / span > < span class = "plain" > (< / span > < span class = "identifier" > iname< / span > < span class = "plain" > );< / span >
2019-08-31 15:56:36 +03:00
< span class = "identifier" > Produce::inv_primitive< / span > < span class = "plain" > (< / span > < span class = "identifier" > Emit::tree< / span > < span class = "plain" > (), < / span > < span class = "identifier" > IF_BIP< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Produce::down< / span > < span class = "plain" > (< / span > < span class = "identifier" > Emit::tree< / span > < span class = "plain" > ());< / span >
< span class = "identifier" > Produce::inv_call_iname< / span > < span class = "plain" > (< / span > < span class = "identifier" > Emit::tree< / span > < span class = "plain" > (), < / span > < span class = "identifier" > Hierarchy::find< / span > < span class = "plain" > (< / span > < span class = "identifier" > TESTREGIONALCONTAINMENT_HL< / span > < span class = "plain" > ));< / span >
< span class = "identifier" > Produce::down< / span > < span class = "plain" > (< / span > < span class = "identifier" > Emit::tree< / span > < span class = "plain" > ());< / span >
< span class = "identifier" > Produce::val_iname< / span > < span class = "plain" > (< / span > < span class = "identifier" > Emit::tree< / span > < span class = "plain" > (), < / span > < span class = "identifier" > K_object< / span > < span class = "plain" > , < / span > < span class = "identifier" > Hierarchy::find< / span > < span class = "plain" > (< / span > < span class = "identifier" > LOCATION_HL< / span > < span class = "plain" > ));< / span >
< span class = "identifier" > Produce::val_iname< / span > < span class = "plain" > (< / span > < span class = "identifier" > Emit::tree< / span > < span class = "plain" > (), < / span > < span class = "identifier" > K_object< / span > < span class = "plain" > , < / span > < span class = "identifier" > Instances::iname< / span > < span class = "plain" > (< / span > < span class = "identifier" > I< / span > < span class = "plain" > ));< / span >
< span class = "identifier" > Produce::up< / span > < span class = "plain" > (< / span > < span class = "identifier" > Emit::tree< / span > < span class = "plain" > ());< / span >
< span class = "identifier" > Produce::code< / span > < span class = "plain" > (< / span > < span class = "identifier" > Emit::tree< / span > < span class = "plain" > ());< / span >
< span class = "identifier" > Produce::down< / span > < span class = "plain" > (< / span > < span class = "identifier" > Emit::tree< / span > < span class = "plain" > ());< / span >
< span class = "identifier" > Produce::rtrue< / span > < span class = "plain" > (< / span > < span class = "identifier" > Emit::tree< / span > < span class = "plain" > ());< / span >
< span class = "identifier" > Produce::up< / span > < span class = "plain" > (< / span > < span class = "identifier" > Emit::tree< / span > < span class = "plain" > ());< / span >
< span class = "identifier" > Produce::up< / span > < span class = "plain" > (< / span > < span class = "identifier" > Emit::tree< / span > < span class = "plain" > ());< / span >
< span class = "identifier" > Produce::rfalse< / span > < span class = "plain" > (< / span > < span class = "identifier" > Emit::tree< / span > < span class = "plain" > ());< / span >
2019-03-25 01:27:44 +02:00
< span class = "identifier" > Routines::end< / span > < span class = "plain" > (< / span > < span class = "identifier" > save< / span > < span class = "plain" > );< / span >
2019-03-17 14:40:57 +02:00
< span class = "plain" > }< / span >
< span class = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > The function PL::Regions::write_regional_found_in_routines appears nowhere else.< / p >
< p class = "inwebparagraph" > < a id = "SP21" > < / a > < b > § 21. < / b > < / p >
< pre class = "display" >
< span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "functiontext" > PL::Regions::regions_add_to_World_index< / span > < span class = "plain" > (< / span > < span class = "identifier" > OUTPUT_STREAM< / span > < span class = "plain" > , < / span > < span class = "identifier" > instance< / span > < span class = "plain" > *< / span > < span class = "identifier" > O< / span > < span class = "plain" > ) {< / span >
< span class = "reserved" > if< / span > < span class = "plain" > ((< / span > < span class = "identifier" > O< / span > < span class = "plain" > ) & & (< / span > < span class = "identifier" > Instances::of_kind< / span > < span class = "plain" > (< / span > < span class = "identifier" > O< / span > < span class = "plain" > , < / span > < span class = "identifier" > K_room< / span > < span class = "plain" > ))) {< / span >
< span class = "identifier" > instance< / span > < span class = "plain" > *< / span > < span class = "identifier" > R< / span > < span class = "plain" > = < / span > < span class = "functiontext" > PL::Regions::enclosing< / span > < span class = "plain" > (< / span > < span class = "identifier" > O< / span > < span class = "plain" > );< / span >
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > R< / span > < span class = "plain" > ) < / span > < span class = "functiontext" > PL::HTMLMap::colour_chip< / span > < span class = "plain" > (< / span > < span class = "identifier" > OUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > O< / span > < span class = "plain" > , < / span > < span class = "identifier" > R< / span > < span class = "plain" > , < / span > < span class = "identifier" > PF_I< / span > < span class = "plain" > (< / span > < span class = "identifier" > regions< / span > < span class = "plain" > , < / span > < span class = "identifier" > O< / span > < span class = "plain" > )-< / span > < span class = "element" > > in_region_set_at< / span > < span class = "plain" > );< / 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 = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > The function PL::Regions::regions_add_to_World_index is used in < a href = "#SP5" > § 5< / a > .< / p >
< hr class = "tocbar" >
< ul class = "toc" > < li > < a href = "3-bck.html" > Back to 'Backdrops'< / a > < / li > < li > < a href = "3-tm.html" > Continue with 'The Map'< / a > < / li > < / ul > < hr class = "tocbar" >
2019-04-22 17:42:10 +03:00
<!-- End of weave -->
2019-03-17 14:40:57 +02:00
< / body >
< / html >