2020-01-10 01:10:09 +02:00
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
< html >
< head >
2020-04-14 19:56:54 +03:00
< title > Combinations Template< / title >
2020-03-19 02:11:25 +02:00
< meta name = "viewport" content = "width=device-width initial-scale=1" >
2020-01-10 01:10:09 +02:00
< meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" >
< meta http-equiv = "Content-Language" content = "en-gb" >
2020-03-19 02:11:25 +02:00
< link href = "../inweb.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
2020-04-14 19:56:54 +03:00
2020-01-10 01:10:09 +02:00
< / head >
< body >
2020-03-19 02:11:25 +02:00
< nav role = "navigation" >
2020-04-14 19:56:54 +03:00
< 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 >
2020-03-19 02:11:25 +02:00
< li > < a href = "../other.html" > other tools< / a > < / li >
2020-04-14 19:56:54 +03:00
< li > < a href = "../extensions.html" > extensions and kits< / a > < / li >
2020-03-19 02:11:25 +02:00
< li > < a href = "../units.html" > unit test tools< / a > < / li >
2020-04-14 19:56:54 +03:00
< / ul > < h2 > Extensions< / h2 > < ul >
< li > < a href = "../basic_inform/index.html" > basic_inform< / a > < / li >
< li > < a href = "../standard_rules/index.html" > standard_rules< / a > < / li >
< / ul > < h2 > Kits< / h2 > < ul >
< li > < a href = "index.html" > < span class = "selectedlink" > BasicInformKit< / span > < / a > < / li >
2020-03-19 02:11:25 +02:00
< li > < a href = "../BasicInformExtrasKit/index.html" > BasicInformExtrasKit< / a > < / li >
< li > < a href = "../CommandParserKit/index.html" > CommandParserKit< / a > < / li >
< li > < a href = "../EnglishLanguageKit/index.html" > EnglishLanguageKit< / a > < / li >
< li > < a href = "../WorldModelKit/index.html" > WorldModelKit< / a > < / li >
2020-04-14 19:56:54 +03:00
< / ul >
2020-03-19 02:11:25 +02:00
< / nav >
< main role = "main" >
2020-04-14 19:56:54 +03:00
<!-- Weave of 'Combinations Template' generated by 7 -->
< ul class = "crumbs" > < li > < a href = "../index.html" > Home< / a > < / li > < li > < a href = "../extensions.html" > Kits< / a > < / li > < li > < a href = "index.html" > BasicInformKit< / a > < / li > < li > < b > Combinations Template< / b > < / li > < / ul > < p class = "purpose" > Code to support the combination kind of value constructor.< / p >
2020-01-10 01:10:09 +02:00
2020-04-16 01:49:59 +03:00
< ul class = "toc" > < li > < a href = "S-cmb.html#SP1" > § 1. Block Format< / a > < / li > < li > < a href = "S-cmb.html#SP2" > § 2. KOV Support< / a > < / li > < li > < a href = "S-cmb.html#SP3" > § 3. Creation< / a > < / li > < li > < a href = "S-cmb.html#SP4" > § 4. Destruction< / a > < / li > < li > < a href = "S-cmb.html#SP5" > § 5. Copying< / a > < / li > < li > < a href = "S-cmb.html#SP6" > § 6. Comparison< / a > < / li > < li > < a href = "S-cmb.html#SP7" > § 7. Hashing< / a > < / li > < li > < a href = "S-cmb.html#SP8" > § 8. Printing< / a > < / li > < / ul > < hr class = "tocbar" >
2020-01-10 01:10:09 +02:00
< p class = "inwebparagraph" > < a id = "SP1" > < / a > < b > § 1. Block Format. < / b > A combination is like a list, but simpler; it has a fixed, usually short,
size. On the other hand, its entries are not all of the same kind as each
other.
< / p >
< p class = "inwebparagraph" > The short block for a combination is simply a pointer to the long block.
This consists of one word to hold the strong kind ID, and then one word
for each entry in the combination. Thus, a triple combination uses 4 words.
< / p >
< pre class = "display" >
2020-04-07 03:06:09 +03:00
< span class = "reserved" > Constant< / span > < span class = "plain" > < / span > < span class = "identifier" > COMBINATION_KIND_F< / span > < span class = "plain" > = < / span > < span class = "constant" > 0< / span > < span class = "plain" > ; < / span > < span class = "comment" > Strong kind ID< / span >
< span class = "reserved" > Constant< / span > < span class = "plain" > < / span > < span class = "identifier" > COMBINATION_ITEM_BASE< / span > < span class = "plain" > = < / span > < span class = "constant" > 1< / span > < span class = "plain" > ; < / span > < span class = "comment" > List items begin at this entry< / span >
2020-01-10 01:10:09 +02:00
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "inwebparagraph" > < a id = "SP2" > < / a > < b > § 2. KOV Support. < / b > See the "BlockValues.i6t" segment for the specification of the following
routines.
< / p >
< pre class = "display" >
2020-01-12 02:35:36 +02:00
< span class = "plain" > [ < / span > < span class = "identifier" > COMBINATION_TY_Support< / span > < span class = "plain" > < / span > < span class = "identifier" > task< / span > < span class = "plain" > < / span > < span class = "identifier" > arg1< / span > < span class = "plain" > < / span > < span class = "identifier" > arg2< / span > < span class = "plain" > < / span > < span class = "identifier" > arg3< / span > < span class = "plain" > ;< / span >
< span class = "reserved" > switch< / span > < span class = "plain" > (< / span > < span class = "identifier" > task< / span > < span class = "plain" > ) {< / span >
< span class = "identifier" > CREATE_KOVS< / span > < span class = "plain" > : < / span > < span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "identifier" > COMBINATION_TY_Create< / span > < span class = "plain" > (< / span > < span class = "identifier" > arg1< / span > < span class = "plain" > , < / span > < span class = "identifier" > arg2< / span > < span class = "plain" > );< / span >
< span class = "identifier" > DESTROY_KOVS< / span > < span class = "plain" > : < / span > < span class = "identifier" > COMBINATION_TY_Destroy< / span > < span class = "plain" > (< / span > < span class = "identifier" > arg1< / span > < span class = "plain" > );< / span >
< span class = "identifier" > MAKEMUTABLE_KOVS< / span > < span class = "plain" > : < / span > < span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "constant" > 1< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > COPYKIND_KOVS< / span > < span class = "plain" > : < / span > < span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "identifier" > COMBINATION_TY_CopyKind< / span > < span class = "plain" > (< / span > < span class = "identifier" > arg1< / span > < span class = "plain" > , < / span > < span class = "identifier" > arg2< / span > < span class = "plain" > );< / span >
< span class = "identifier" > COPYQUICK_KOVS< / span > < span class = "plain" > : < / span > < span class = "reserved" > rtrue< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > COPYSB_KOVS< / span > < span class = "plain" > : < / span > < span class = "identifier" > BlkValueCopySB1< / span > < span class = "plain" > (< / span > < span class = "identifier" > arg1< / span > < span class = "plain" > , < / span > < span class = "identifier" > arg2< / span > < span class = "plain" > );< / span >
< span class = "identifier" > KINDDATA_KOVS< / span > < span class = "plain" > : < / span > < span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "identifier" > COMBINATION_TY_KindData< / span > < span class = "plain" > (< / span > < span class = "identifier" > arg1< / span > < span class = "plain" > );< / span >
2020-04-07 03:06:09 +03:00
< span class = "identifier" > EXTENT_KOVS< / span > < span class = "plain" > : < / span > < span class = "reserved" > return< / span > < span class = "plain" > -1;< / span >
2020-01-12 02:35:36 +02:00
< span class = "identifier" > COPY_KOVS< / span > < span class = "plain" > : < / span > < span class = "identifier" > COMBINATION_TY_Copy< / span > < span class = "plain" > (< / span > < span class = "identifier" > arg1< / span > < span class = "plain" > , < / span > < span class = "identifier" > arg2< / span > < span class = "plain" > , < / span > < span class = "identifier" > arg3< / span > < span class = "plain" > );< / span >
< span class = "identifier" > COMPARE_KOVS< / span > < span class = "plain" > : < / span > < span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "identifier" > COMBINATION_TY_Compare< / span > < span class = "plain" > (< / span > < span class = "identifier" > arg1< / span > < span class = "plain" > , < / span > < span class = "identifier" > arg2< / span > < span class = "plain" > );< / span >
< span class = "identifier" > HASH_KOVS< / span > < span class = "plain" > : < / span > < span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "identifier" > COMBINATION_TY_Hash< / span > < span class = "plain" > (< / span > < span class = "identifier" > arg1< / span > < span class = "plain" > );< / span >
< span class = "identifier" > DEBUG_KOVS< / span > < span class = "plain" > : < / span > < span class = "reserved" > print< / span > < span class = "plain" > < / span > < span class = "string" > " = "< / span > < span class = "plain" > , (< / span > < span class = "identifier" > COMBINATION_TY_Say< / span > < span class = "plain" > ) < / span > < span class = "identifier" > arg1< / span > < span class = "plain" > ;< / span >
2020-01-10 01:10:09 +02:00
< span class = "plain" > }< / span >
2020-04-07 03:06:09 +03:00
< span class = "comment" > We choose not to respond to: CAST_KOVS, READ_FILE_KOVS, WRITE_FILE_KOVS< / span >
2020-01-12 02:35:36 +02:00
< span class = "reserved" > rfalse< / span > < span class = "plain" > ;< / span >
2020-01-10 01:10:09 +02:00
< span class = "plain" > ];< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "inwebparagraph" > < a id = "SP3" > < / a > < b > § 3. Creation. < / b > A combination is like a list, but simpler; it has a fixed, usually short,
size. On the other hand, its entries are not all of the same kind as each
other.
< / p >
< p class = "inwebparagraph" > Combinations are stored as a fixed-sized block of word entries. The first
block is the only header information: a pointer to a further structure in
memory, describing the kind. The subsequent blocks are the actual records.
2020-04-14 19:56:54 +03:00
Thus, a triple \((x, y, z)\) uses 4 words.
2020-01-10 01:10:09 +02:00
< / p >
< pre class = "display" >
2020-01-12 02:35:36 +02:00
< span class = "plain" > [ < / span > < span class = "identifier" > COMBINATION_TY_Create< / span > < span class = "plain" > < / span > < span class = "identifier" > kind< / span > < span class = "plain" > < / span > < span class = "identifier" > sb< / span > < span class = "plain" > < / span > < span class = "identifier" > long_block< / span > < span class = "plain" > < / span > < span class = "identifier" > N< / span > < span class = "plain" > < / span > < span class = "identifier" > i< / span > < span class = "plain" > < / span > < span class = "identifier" > bk< / span > < span class = "plain" > < / span > < span class = "identifier" > v< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > N< / span > < span class = "plain" > = < / span > < span class = "identifier" > KindBaseArity< / span > < span class = "plain" > (< / span > < span class = "identifier" > kind< / span > < span class = "plain" > );< / span >
< span class = "identifier" > long_block< / span > < span class = "plain" > = < / span > < span class = "identifier" > FlexAllocate< / span > < span class = "plain" > (< / span >
< span class = "plain" > (< / span > < span class = "identifier" > COMBINATION_ITEM_BASE< / span > < span class = "plain" > +< / span > < span class = "identifier" > N< / span > < span class = "plain" > )*< / span > < span class = "identifier" > WORDSIZE< / span > < span class = "plain" > , < / span > < span class = "identifier" > COMBINATION_TY< / span > < span class = "plain" > , < / span > < span class = "identifier" > BLK_FLAG_WORD< / span > < span class = "plain" > );< / span >
< span class = "identifier" > BlkValueWrite< / span > < span class = "plain" > (< / span > < span class = "identifier" > long_block< / span > < span class = "plain" > , < / span > < span class = "identifier" > COMBINATION_KIND_F< / span > < span class = "plain" > , < / span > < span class = "identifier" > kind< / span > < span class = "plain" > , < / span > < span class = "reserved" > true< / span > < span class = "plain" > );< / span >
< span class = "reserved" > for< / span > < span class = "plain" > (< / span > < span class = "identifier" > i< / span > < span class = "plain" > =0: < / span > < span class = "identifier" > i< / span > < span class = "plain" > < < / span > < span class = "identifier" > N< / span > < span class = "plain" > : < / span > < span class = "identifier" > i< / span > < span class = "plain" > ++) {< / span >
< span class = "identifier" > bk< / span > < span class = "plain" > = < / span > < span class = "identifier" > KindBaseTerm< / span > < span class = "plain" > (< / span > < span class = "identifier" > kind< / 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" > KOVIsBlockValue< / span > < span class = "plain" > (< / span > < span class = "identifier" > bk< / span > < span class = "plain" > )) < / span > < span class = "identifier" > v< / span > < span class = "plain" > = < / span > < span class = "identifier" > BlkValueCreate< / span > < span class = "plain" > (< / span > < span class = "identifier" > bk< / span > < span class = "plain" > );< / span >
< span class = "reserved" > else< / span > < span class = "plain" > < / span > < span class = "identifier" > v< / span > < span class = "plain" > = < / span > < span class = "identifier" > DefaultValueOfKOV< / span > < span class = "plain" > (< / span > < span class = "identifier" > bk< / span > < span class = "plain" > );< / span >
< span class = "identifier" > BlkValueWrite< / span > < span class = "plain" > (< / span > < span class = "identifier" > long_block< / span > < span class = "plain" > , < / span > < span class = "identifier" > COMBINATION_ITEM_BASE< / span > < span class = "plain" > +< / span > < span class = "identifier" > i< / span > < span class = "plain" > , < / span > < span class = "identifier" > v< / span > < span class = "plain" > , < / span > < span class = "reserved" > true< / span > < span class = "plain" > );< / span >
2020-01-10 01:10:09 +02:00
< span class = "plain" > }< / span >
2020-01-12 02:35:36 +02:00
< span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "identifier" > BlkValueCreateSB1< / span > < span class = "plain" > (< / span > < span class = "identifier" > sb< / span > < span class = "plain" > , < / span > < span class = "identifier" > long_block< / span > < span class = "plain" > );< / span >
2020-01-10 01:10:09 +02:00
< span class = "plain" > ];< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "inwebparagraph" > < a id = "SP4" > < / a > < b > § 4. Destruction. < / b > If the comb items are themselves block-values, they must all be freed before
the comb itself can be freed.
< / p >
< pre class = "display" >
2020-01-12 02:35:36 +02:00
< span class = "plain" > [ < / span > < span class = "identifier" > COMBINATION_TY_Destroy< / span > < span class = "plain" > < / span > < span class = "identifier" > comb< / span > < span class = "plain" > < / span > < span class = "identifier" > kind< / span > < span class = "plain" > < / span > < span class = "identifier" > no_items< / span > < span class = "plain" > < / span > < span class = "identifier" > i< / span > < span class = "plain" > < / span > < span class = "identifier" > bk< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > kind< / span > < span class = "plain" > = < / span > < span class = "identifier" > BlkValueRead< / span > < span class = "plain" > (< / span > < span class = "identifier" > comb< / span > < span class = "plain" > , < / span > < span class = "identifier" > COMBINATION_KIND_F< / span > < span class = "plain" > );< / span >
< span class = "identifier" > no_items< / span > < span class = "plain" > = < / span > < span class = "identifier" > KindBaseArity< / span > < span class = "plain" > (< / span > < span class = "identifier" > kind< / span > < span class = "plain" > );< / span >
< span class = "reserved" > for< / span > < span class = "plain" > (< / span > < span class = "identifier" > i< / span > < span class = "plain" > =0: < / span > < span class = "identifier" > i< / span > < span class = "plain" > < < / span > < span class = "identifier" > no_items< / span > < span class = "plain" > : < / span > < span class = "identifier" > i< / span > < span class = "plain" > ++) {< / span >
< span class = "identifier" > bk< / span > < span class = "plain" > = < / span > < span class = "identifier" > KindBaseTerm< / span > < span class = "plain" > (< / span > < span class = "identifier" > kind< / 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" > KOVIsBlockValue< / span > < span class = "plain" > (< / span > < span class = "identifier" > bk< / span > < span class = "plain" > ))< / span >
< span class = "identifier" > BlkValueFree< / span > < span class = "plain" > (< / span > < span class = "identifier" > BlkValueRead< / span > < span class = "plain" > (< / span > < span class = "identifier" > comb< / span > < span class = "plain" > , < / span > < span class = "identifier" > i< / span > < span class = "plain" > +< / span > < span class = "identifier" > COMBINATION_ITEM_BASE< / span > < span class = "plain" > ));< / span >
2020-01-10 01:10:09 +02:00
< span class = "plain" > }< / span >
< span class = "plain" > ];< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "inwebparagraph" > < a id = "SP5" > < / a > < b > § 5. Copying. < / b > Again, if the comb contains block-values then they must be duplicated rather
than bitwise copied as pointers.
< / p >
< pre class = "display" >
2020-01-12 02:35:36 +02:00
< span class = "plain" > [ < / span > < span class = "identifier" > COMBINATION_TY_CopyKind< / span > < span class = "plain" > < / span > < span class = "reserved" > to< / span > < span class = "plain" > < / span > < span class = "identifier" > from< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > BlkValueWrite< / span > < span class = "plain" > (< / span > < span class = "reserved" > to< / span > < span class = "plain" > , < / span > < span class = "identifier" > COMBINATION_KIND_F< / span > < span class = "plain" > , < / span > < span class = "identifier" > BlkValueRead< / span > < span class = "plain" > (< / span > < span class = "identifier" > from< / span > < span class = "plain" > , < / span > < span class = "identifier" > COMBINATION_KIND_F< / span > < span class = "plain" > ));< / span >
2020-01-10 01:10:09 +02:00
< span class = "plain" > ];< / span >
2020-01-12 02:35:36 +02:00
< span class = "plain" > [ < / span > < span class = "identifier" > COMBINATION_TY_CopySB< / span > < span class = "plain" > < / span > < span class = "reserved" > to< / span > < span class = "plain" > < / span > < span class = "identifier" > from< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > BlkValueCopySB1< / span > < span class = "plain" > (< / span > < span class = "reserved" > to< / span > < span class = "plain" > , < / span > < span class = "identifier" > from< / span > < span class = "plain" > );< / span >
2020-01-10 01:10:09 +02:00
< span class = "plain" > ];< / span >
2020-01-12 02:35:36 +02:00
< span class = "plain" > [ < / span > < span class = "identifier" > COMBINATION_TY_KindData< / span > < span class = "plain" > < / span > < span class = "identifier" > comb< / span > < span class = "plain" > ;< / span >
< span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "identifier" > BlkValueRead< / span > < span class = "plain" > (< / span > < span class = "identifier" > comb< / span > < span class = "plain" > , < / span > < span class = "identifier" > COMBINATION_KIND_F< / span > < span class = "plain" > );< / span >
2020-01-10 01:10:09 +02:00
< span class = "plain" > ];< / span >
2020-01-12 02:35:36 +02:00
< span class = "plain" > [ < / span > < span class = "identifier" > COMBINATION_TY_Copy< / span > < span class = "plain" > < / span > < span class = "identifier" > to_comb< / span > < span class = "plain" > < / span > < span class = "identifier" > from_comb< / span > < span class = "plain" > < / span > < span class = "identifier" > precopied_comb_kov< / span > < span class = "plain" > < / span > < span class = "identifier" > no_items< / span > < span class = "plain" > < / span > < span class = "identifier" > i< / span > < span class = "plain" > < / span > < span class = "identifier" > nv< / span > < span class = "plain" > < / span > < span class = "identifier" > kind< / span > < span class = "plain" > < / span > < span class = "identifier" > bk< / span > < span class = "plain" > ;< / span >
2020-04-07 03:06:09 +03:00
< span class = "comment" > kind = BlkValueRead(to_comb, COMBINATION_KIND_F);< / span >
2020-01-12 02:35:36 +02:00
< span class = "identifier" > no_items< / span > < span class = "plain" > = < / span > < span class = "identifier" > KindBaseArity< / span > < span class = "plain" > (< / span > < span class = "identifier" > precopied_comb_kov< / span > < span class = "plain" > );< / span >
< span class = "identifier" > BlkValueWrite< / span > < span class = "plain" > (< / span > < span class = "identifier" > to_comb< / span > < span class = "plain" > , < / span > < span class = "identifier" > COMBINATION_KIND_F< / span > < span class = "plain" > , < / span > < span class = "identifier" > precopied_comb_kov< / span > < span class = "plain" > );< / span >
< span class = "reserved" > for< / span > < span class = "plain" > (< / span > < span class = "identifier" > i< / span > < span class = "plain" > =0: < / span > < span class = "identifier" > i< / span > < span class = "plain" > < < / span > < span class = "identifier" > no_items< / span > < span class = "plain" > : < / span > < span class = "identifier" > i< / span > < span class = "plain" > ++) {< / span >
< span class = "identifier" > bk< / span > < span class = "plain" > = < / span > < span class = "identifier" > KindBaseTerm< / span > < span class = "plain" > (< / span > < span class = "identifier" > kind< / 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" > KOVIsBlockValue< / span > < span class = "plain" > (< / span > < span class = "identifier" > bk< / span > < span class = "plain" > )) {< / span >
< span class = "identifier" > nv< / span > < span class = "plain" > = < / span > < span class = "identifier" > BlkValueCreate< / span > < span class = "plain" > (< / span > < span class = "identifier" > bk< / span > < span class = "plain" > );< / span >
< span class = "identifier" > BlkValueCopy< / span > < span class = "plain" > (< / span > < span class = "identifier" > nv< / span > < span class = "plain" > , < / span > < span class = "identifier" > BlkValueRead< / span > < span class = "plain" > (< / span > < span class = "identifier" > from_comb< / span > < span class = "plain" > , < / span > < span class = "identifier" > i< / span > < span class = "plain" > +< / span > < span class = "identifier" > COMBINATION_ITEM_BASE< / span > < span class = "plain" > ));< / span >
< span class = "identifier" > BlkValueWrite< / span > < span class = "plain" > (< / span > < span class = "identifier" > to_comb< / span > < span class = "plain" > , < / span > < span class = "identifier" > i< / span > < span class = "plain" > +< / span > < span class = "identifier" > COMBINATION_ITEM_BASE< / span > < span class = "plain" > , < / span > < span class = "identifier" > nv< / span > < span class = "plain" > );< / span >
2020-01-10 01:10:09 +02:00
< span class = "plain" > }< / span >
< span class = "plain" > }< / span >
< span class = "plain" > ];< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "inwebparagraph" > < a id = "SP6" > < / a > < b > § 6. Comparison. < / b > This is a lexicographic comparison and assumes both combinations have the
same kind.
< / p >
< pre class = "display" >
2020-01-12 02:35:36 +02:00
< span class = "plain" > [ < / span > < span class = "identifier" > COMBINATION_TY_Compare< / span > < span class = "plain" > < / span > < span class = "identifier" > left_comb< / span > < span class = "plain" > < / span > < span class = "identifier" > right_comb< / span > < span class = "plain" > < / span > < span class = "identifier" > delta< / span > < span class = "plain" > < / span > < span class = "identifier" > no_items< / span > < span class = "plain" > < / span > < span class = "identifier" > i< / span > < span class = "plain" > < / span > < span class = "identifier" > cf< / span > < span class = "plain" > < / span > < span class = "identifier" > kind< / span > < span class = "plain" > < / span > < span class = "identifier" > bk< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > kind< / span > < span class = "plain" > = < / span > < span class = "identifier" > BlkValueRead< / span > < span class = "plain" > (< / span > < span class = "identifier" > left_comb< / span > < span class = "plain" > , < / span > < span class = "identifier" > COMBINATION_KIND_F< / span > < span class = "plain" > );< / span >
< span class = "identifier" > no_items< / span > < span class = "plain" > = < / span > < span class = "identifier" > KindBaseArity< / span > < span class = "plain" > (< / span > < span class = "identifier" > kind< / span > < span class = "plain" > );< / span >
< span class = "reserved" > for< / span > < span class = "plain" > (< / span > < span class = "identifier" > i< / span > < span class = "plain" > =0: < / span > < span class = "identifier" > i< / span > < span class = "plain" > < < / span > < span class = "identifier" > no_items< / span > < span class = "plain" > : < / span > < span class = "identifier" > i< / span > < span class = "plain" > ++) {< / span >
< span class = "identifier" > bk< / span > < span class = "plain" > = < / span > < span class = "identifier" > KindBaseTerm< / span > < span class = "plain" > (< / span > < span class = "identifier" > kind< / span > < span class = "plain" > , < / span > < span class = "identifier" > i< / span > < span class = "plain" > );< / span >
< span class = "identifier" > cf< / span > < span class = "plain" > = < / span > < span class = "identifier" > KOVComparisonFunction< / span > < span class = "plain" > (< / span > < span class = "identifier" > bk< / span > < span class = "plain" > );< / span >
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > cf< / span > < span class = "plain" > == < / span > < span class = "constant" > 0< / span > < span class = "plain" > < / span > < span class = "reserved" > or< / span > < span class = "plain" > < / span > < span class = "identifier" > UnsignedCompare< / span > < span class = "plain" > ) {< / span >
2020-04-07 03:06:09 +03:00
< span class = "identifier" > delta< / span > < span class = "plain" > = < / span > < span class = "identifier" > BlkValueRead< / span > < span class = "plain" > (< / span > < span class = "identifier" > left_comb< / span > < span class = "plain" > , < / span > < span class = "identifier" > i< / span > < span class = "plain" > +< / span > < span class = "identifier" > COMBINATION_ITEM_BASE< / span > < span class = "plain" > ) -< / span >
2020-01-12 02:35:36 +02:00
< span class = "identifier" > BlkValueRead< / span > < span class = "plain" > (< / span > < span class = "identifier" > right_comb< / span > < span class = "plain" > , < / span > < span class = "identifier" > i< / span > < span class = "plain" > +< / span > < span class = "identifier" > COMBINATION_ITEM_BASE< / span > < span class = "plain" > );< / span >
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > delta< / span > < span class = "plain" > ) < / span > < span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "identifier" > delta< / span > < span class = "plain" > ;< / span >
< span class = "plain" > } < / span > < span class = "reserved" > else< / span > < span class = "plain" > {< / span >
< span class = "identifier" > delta< / span > < span class = "plain" > = < / span > < span class = "identifier" > cf< / span > < span class = "plain" > (< / span > < span class = "identifier" > BlkValueRead< / span > < span class = "plain" > (< / span > < span class = "identifier" > left_comb< / span > < span class = "plain" > , < / span > < span class = "identifier" > i< / span > < span class = "plain" > +< / span > < span class = "identifier" > COMBINATION_ITEM_BASE< / span > < span class = "plain" > ),< / span >
< span class = "identifier" > BlkValueRead< / span > < span class = "plain" > (< / span > < span class = "identifier" > right_comb< / span > < span class = "plain" > , < / span > < span class = "identifier" > i< / span > < span class = "plain" > +< / span > < span class = "identifier" > COMBINATION_ITEM_BASE< / span > < span class = "plain" > ));< / span >
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > delta< / span > < span class = "plain" > ) < / span > < span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "identifier" > delta< / span > < span class = "plain" > ;< / span >
2020-01-10 01:10:09 +02:00
< span class = "plain" > }< / span >
< span class = "plain" > }< / span >
2020-01-12 02:35:36 +02:00
< span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "constant" > 0< / span > < span class = "plain" > ;< / span >
2020-01-10 01:10:09 +02:00
< span class = "plain" > ];< / span >
2020-01-12 02:35:36 +02:00
< span class = "plain" > [ < / span > < span class = "identifier" > COMBINATION_TY_Distinguish< / span > < span class = "plain" > < / span > < span class = "identifier" > left_comb< / span > < span class = "plain" > < / span > < span class = "identifier" > right_comb< / span > < span class = "plain" > ;< / span >
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > COMBINATION_TY_Compare< / span > < span class = "plain" > (< / span > < span class = "identifier" > left_comb< / span > < span class = "plain" > , < / span > < span class = "identifier" > right_comb< / span > < span class = "plain" > ) == < / span > < span class = "constant" > 0< / span > < span class = "plain" > ) < / span > < span class = "reserved" > rfalse< / span > < span class = "plain" > ;< / span >
< span class = "reserved" > rtrue< / span > < span class = "plain" > ;< / span >
2020-01-10 01:10:09 +02:00
< span class = "plain" > ];< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "inwebparagraph" > < a id = "SP7" > < / a > < b > § 7. Hashing. < / b > < / p >
< pre class = "display" >
2020-01-12 02:35:36 +02:00
< span class = "plain" > [ < / span > < span class = "identifier" > COMBINATION_TY_Hash< / span > < span class = "plain" > < / span > < span class = "identifier" > comb< / span > < span class = "plain" > < / span > < span class = "identifier" > kind< / span > < span class = "plain" > < / span > < span class = "identifier" > rv< / span > < span class = "plain" > < / span > < span class = "identifier" > no_items< / span > < span class = "plain" > < / span > < span class = "identifier" > i< / span > < span class = "plain" > < / span > < span class = "identifier" > bk< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > rv< / span > < span class = "plain" > = < / span > < span class = "constant" > 0< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > kind< / span > < span class = "plain" > = < / span > < span class = "identifier" > BlkValueRead< / span > < span class = "plain" > (< / span > < span class = "identifier" > comb< / span > < span class = "plain" > , < / span > < span class = "identifier" > COMBINATION_KIND_F< / span > < span class = "plain" > );< / span >
< span class = "identifier" > no_items< / span > < span class = "plain" > = < / span > < span class = "identifier" > KindBaseArity< / span > < span class = "plain" > (< / span > < span class = "identifier" > kind< / span > < span class = "plain" > );< / span >
< span class = "reserved" > for< / span > < span class = "plain" > (< / span > < span class = "identifier" > i< / span > < span class = "plain" > =0: < / span > < span class = "identifier" > i< / span > < span class = "plain" > < < / span > < span class = "identifier" > no_items< / span > < span class = "plain" > : < / span > < span class = "identifier" > i< / span > < span class = "plain" > ++) {< / span >
< span class = "identifier" > bk< / span > < span class = "plain" > = < / span > < span class = "identifier" > KindBaseTerm< / span > < span class = "plain" > (< / span > < span class = "identifier" > kind< / span > < span class = "plain" > , < / span > < span class = "identifier" > i< / span > < span class = "plain" > );< / span >
< span class = "identifier" > rv< / span > < span class = "plain" > = < / span > < span class = "identifier" > rv< / span > < span class = "plain" > * < / span > < span class = "constant" > 33< / span > < span class = "plain" > + < / span > < span class = "identifier" > GetHashValue< / span > < span class = "plain" > (< / span > < span class = "identifier" > bk< / span > < span class = "plain" > , < / span > < span class = "identifier" > BlkValueRead< / span > < span class = "plain" > (< / span > < span class = "identifier" > comb< / span > < span class = "plain" > , < / span > < span class = "identifier" > i< / span > < span class = "plain" > +< / span > < span class = "identifier" > COMBINATION_ITEM_BASE< / span > < span class = "plain" > ));< / span >
2020-01-10 01:10:09 +02:00
< span class = "plain" > }< / span >
2020-01-12 02:35:36 +02:00
< span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "identifier" > rv< / span > < span class = "plain" > ;< / span >
2020-01-10 01:10:09 +02:00
< span class = "plain" > ];< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "inwebparagraph" > < a id = "SP8" > < / a > < b > § 8. Printing. < / b > < / p >
< pre class = "display" >
2020-01-12 02:35:36 +02:00
< span class = "plain" > [ < / span > < span class = "identifier" > COMBINATION_TY_Say< / span > < span class = "plain" > < / span > < span class = "identifier" > comb< / span > < span class = "plain" > < / span > < span class = "identifier" > format< / span > < span class = "plain" > < / span > < span class = "identifier" > no_items< / span > < span class = "plain" > < / span > < span class = "identifier" > v< / span > < span class = "plain" > < / span > < span class = "identifier" > i< / span > < span class = "plain" > < / span > < span class = "identifier" > kind< / span > < span class = "plain" > < / span > < span class = "identifier" > bk< / span > < span class = "plain" > ;< / span >
< span class = "reserved" > if< / span > < span class = "plain" > ((< / span > < span class = "identifier" > comb< / span > < span class = "plain" > ==0) || (< / span > < span class = "identifier" > BlkValueWeakKind< / span > < span class = "plain" > (< / span > < span class = "identifier" > comb< / span > < span class = "plain" > ) ~= < / span > < span class = "identifier" > COMBINATION_TY< / span > < span class = "plain" > )) < / span > < span class = "reserved" > return< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > kind< / span > < span class = "plain" > = < / span > < span class = "identifier" > BlkValueRead< / span > < span class = "plain" > (< / span > < span class = "identifier" > comb< / span > < span class = "plain" > , < / span > < span class = "identifier" > COMBINATION_KIND_F< / span > < span class = "plain" > );< / span >
< span class = "identifier" > no_items< / span > < span class = "plain" > = < / span > < span class = "identifier" > KindBaseArity< / span > < span class = "plain" > (< / span > < span class = "identifier" > kind< / span > < span class = "plain" > );< / span >
< span class = "reserved" > print< / span > < span class = "plain" > < / span > < span class = "string" > "("< / span > < span class = "plain" > ;< / span >
< span class = "reserved" > for< / span > < span class = "plain" > (< / span > < span class = "identifier" > i< / span > < span class = "plain" > =0: < / span > < span class = "identifier" > i< / span > < span class = "plain" > < < / span > < span class = "identifier" > no_items< / 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" > i< / span > < span class = "plain" > > 0) < / span > < span class = "reserved" > print< / span > < span class = "plain" > < / span > < span class = "string" > ", "< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > bk< / span > < span class = "plain" > = < / span > < span class = "identifier" > KindBaseTerm< / span > < span class = "plain" > (< / span > < span class = "identifier" > kind< / span > < span class = "plain" > , < / span > < span class = "identifier" > i< / span > < span class = "plain" > );< / span >
< span class = "identifier" > v< / span > < span class = "plain" > = < / span > < span class = "identifier" > BlkValueRead< / span > < span class = "plain" > (< / span > < span class = "identifier" > comb< / span > < span class = "plain" > , < / span > < span class = "identifier" > i< / span > < span class = "plain" > +< / span > < span class = "identifier" > COMBINATION_ITEM_BASE< / span > < span class = "plain" > );< / span >
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > bk< / span > < span class = "plain" > == < / span > < span class = "identifier" > LIST_OF_TY< / span > < span class = "plain" > ) < / span > < span class = "identifier" > LIST_OF_TY_Say< / span > < span class = "plain" > (< / span > < span class = "identifier" > v< / span > < span class = "plain" > , < / span > < span class = "constant" > 1< / span > < span class = "plain" > );< / span >
< span class = "reserved" > else< / span > < span class = "plain" > < / span > < span class = "identifier" > PrintKindValuePair< / span > < span class = "plain" > (< / span > < span class = "identifier" > bk< / span > < span class = "plain" > , < / span > < span class = "identifier" > v< / span > < span class = "plain" > );< / span >
2020-01-10 01:10:09 +02:00
< span class = "plain" > }< / span >
2020-01-12 02:35:36 +02:00
< span class = "reserved" > print< / span > < span class = "plain" > < / span > < span class = "string" > ")"< / span > < span class = "plain" > ;< / span >
2020-01-10 01:10:09 +02:00
< span class = "plain" > ];< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< hr class = "tocbar" >
2020-04-14 19:56:54 +03:00
< ul class = "toc" > < li > < a href = "S-lst.html" > Back to 'Lists Template'< / a > < / li > < li > < a href = "S-rlt.html" > Continue with 'Relation Kind Template'< / a > < / li > < / ul > < hr class = "tocbar" >
2020-01-10 01:10:09 +02:00
<!-- End of weave -->
2020-04-14 19:56:54 +03:00
< script >
MathJax = {
tex: {
inlineMath: '$', '$'], ['\\(', '\\)'
},
svg: {
fontCache: 'global'
}
};
< / script >
< script type = "text/javascript" id = "MathJax-script" async
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js">
< / script >
2020-03-19 02:11:25 +02:00
< / main >
2020-01-10 01:10:09 +02:00
< / body >
< / html >