let's play: Inform 10's Basic Inform and Standard Rules (SR: Physical World Model 5)

I can’t rule that out!

1 Like

Wouldn’t the equality relation be “if X is 5”?

I believe that’s “the chair can be intact or ruined”.

Huh! I’d never seen this syntax before.

1 Like

Yes, that’s what I was going for. You’re right that I messed up and accidentally posted an example of containment rather than equality, though. A better example would be:

if a door is unlocked

Unlike your example, that doesn’t sound like strict equality on the surface, but I suspect both the same syntactic structure and likely both boil down to the equality relation – in your example, X and 5 can be seen as “descriptions of numbers”, whereas in my example, a door and unlocked are “descriptions of things”.

1 Like

Great! Some feedback!

OK! Let’s update the basic inform project.

Got it! Do uses [value name] is a kind of value and [value name] [are] [list of values] have meanings “exposed” in Basic Inform? Or are those baked in at a deeper level?

After making some tweaks, this

file document is called "document"

compiles but these do not:

figure filfre is the file "filfre.jpg".
sound gong is the file "gong.ogg".

They do compile with Standard Inform, though.

What a deep cut! I am sure I’ve seen this discussed before, but I couldn’t locate it in the documentation. This sentence doesn’t compile in Basic Inform, so far as I can tell. I observed that story genre doesn’t compile, either, so not all bibliographical options are available.

That makes sense to me. Would the meaning make more sense in the Standard Rules, then? There are other meanings asserted there.

I’m surprised this does compile, as Inform seems strict about file extensions. But Standard Inform accepts this and Basic Inform does not.

That makes sense, too!

Thanks for all the comments! I’ve updated the Basic Inform test project here:

basic inform test project
"basic inform test"

to begin:
	say "BI test.";

"frob" is a verb.

frotz is a kind of value.

[	The verb to be means the built-in new-plural meaning.]
the plural of frotz is frotzes.

[	The verb to be means the equality relation.]
the frotzes are serious and laugable.

frotza is a frotz that varies.
frotzb is a frotz that varies.
frotzc is a frotz that varies.

frotz verification is a rulebook.

[	The verb to be means the built-in new-either-or meaning.]
guncho is an object.
guncho can be spoken or inscribed.

a frotz verification rule (this is the fv rule):
[	The verb to be means the equality relation.]
	if frotza is frotzb or frotza is frotzc, say "Yes!";
	
[	The verb to be means the built-in rule-listed-in meaning.]
the fv rule is listed first in the frotz verification rules.

[
	The verb to be means the built-in new-figure meaning.
	The verb to be means the built-in new-sound meaning.

These do not presently work:

	figure filfre is the file "filfre.jpg".
	sound gong is the file "gong.ogg".
		]
[	The verb to be means the built-in new-file meaning.]		
file document is called "document".

[
The verb to be means the built-in episode meaning.
This seems to apply to "episode" as bibliographical data, but declaring an episode does not compile in Basic Inform.

	The story is episode 22 of "Basic Inform and Standard Rules Playthrough".
		]

[
```The verb to be means the built-in new-action meaning.```
Even though this meaning is part of Basic Inform, actions are not.
		]
2 Likes

Ah, I think I see the issue. If you’re only using Basic Inform, then it would make sense that figures and sounds and actions aren’t available. You’d need to somehow specify that you want to load the kits that define them. I don’t know anything about how that’s done, though.

I think I’d say that yes, the action meaning might make more sense in the Standard Rules. No clue on the others.

I don’t know, sorry…

Pretty sure there’s exactly zero mention of it in the documentation. I only found it by reading through one of the older Preform documents (the marked-up version).

1 Like

Right, so ultimately there will be two test projects, one for the SR and one for BI. Others have suggested that we’ll find things in Basic Inform that only work with Standard Inform (or with some some help from kits), and I’ll note those as they arise. This must be one of those cases!

I’ll be taking Danni’s suggested route, so we’ll be looking at the SR Preamble soon. It won’t initially feel like much of a change, though, since the SR Preamble consists of i6 built-ins.

Now that I think of it, I’m pretty sure that I saw you mention it somewhere!

1 Like

As a note, I updated the top post to include some of Zed’s comments, and additionally updated the “Introducing Basic Inform” post.

I think the only outstanding question from that post pertains to uses of to be that don’t seem to fit the identified meanings. My guess is that anything left over is handled in the compiler. Which is not a problem, really, I’ll just name those cases in the post.

Things that have already been mentioned (there may be other usages):

frotz is a kind of value.
the frotzes are serious and laughable

If anyone has any comments on other meanings of to be, I’ll incorporate them. Otherwise, next up is §4, which deals with “miscellaneous other important verbs.”

As a last note, I have also linked meanings of to be to Inform’s documentation wherever possible (and will continue this practice throughout the thread).

1 Like

Having incorporated some good feedback to be as well as some background informtion, we are ready to continue. This post will be added to the table of contents at the top of the thread.

Basic Inform (Preamble Part 2)

§4. And now miscellaneous other important verbs. Note the plus notation, new in May 2016, which marks for a second object phrase, and is thus only useful for built-in meanings.

The meaning of “second object phrase” is not utterly clear to me, but let’s try to work it out as we go.


The verb to be able to be means the built-in can-be meaning.

[item]can be either [option 1] or [option 2].
[item] can be [property].

This is closely related to the new-either-or meaning of to be, and both are documented in the same place.


The verb to specify means the built-in specifies-notation meaning.
[number][text] specifies a [value name].

Specification is a way to define quantitative “units”, which are a kind of value.


The verb to relate means the built-in new-relation meaning.
[new relation name] relates [item 1] to [item 2]

The verb to relate is used to create new relations.


The verb to relate means the universal relation.

According to my research, there is no way for authors to invoke this meaning of to relate or otherwise access the relation in natural language, as it is used by the compiler to make new, author-facing relations.


The verb to substitute for means the built-in rule-substitutes-for meaning.
[the rule name] substitutes for [rule name].

Basic Inform can substitute one rule for another.


The verb to do means the built-in rule-does-nothing meaning.
The verb to do + if means the built-in rule-does-nothing-if meaning.
The verb to do + when means the built-in rule-does-nothing-if meaning.
The verb to do + unless means the built-in rule-does-nothing-unless meaning.
[rule name] does nothing.
[rule name] does nothing if [condition].
[rule name] does nothing when [condition].
[rule name] does nothing unless [condition].

I assume that these are all variations on a theme.


The verb to translate into + as means the built-in translates-into-unicode meaning.
[nickname] translates into unicode as [accepted unicode designation]

Authors can designate friendly names for Unicode characters.


The verb to translate into + as means the built-in translates-into-i6 meaning.

A discussion of Inform 6 code in Inform projects is stashed away in the chapter on extensions. I’m not equipped to discuss it, but this usage can be found there.. It appears that translates into inter might mean the same thing, but that usage is undocumented and may well be deprecated.


The verb to translate into + as means the built-in translates-into-language meaning.

This is apparently an undocumented meaning used with non-English language extensions. If anyone can contribute more, please let me know and I’ll update this section. I note that I could not personally get any language extension (of those hosted at the Friends of Inform repo) to compile, so I am unable to verify the functionality of this meaning.

It’s possible that other communities maintain operational versions of respective language extensions, but so far as the scope of this project goes, I am unable to use translates-into-language at all. There is a Jira report about applying this meaning, so it’s possible that it doesn’t work for anyone, extensions or no.


The verb to translate as means the built-in use-translates meaning.

This meaning appears to be used to set use options. Some applications will be reviewed in later posts.


Use full-length room descriptions translates as (- #IFNDEF I7_LOOKMODE; Constant I7_LOOKMODE = 2; #ENDIF; -).
Use abbreviated room descriptions translates as (- #IFNDEF I7_LOOKMODE; Constant I7_LOOKMODE = 3; #ENDIF; -)

These two particular use options, unless I am mistaken, do not work in Basic Inform because BI has does not specify rooms.


The verb to provide means the provision relation.
if [item] provides the property [property]

If something provides a property, this means that it is possible for it to have that property.


These felt easier to digest, with the exception of the Inform 6 items. I welcome feedback, expansion, or suggestions!

2 Likes

The verb “to be” is pretty ubiquitous, so it might be a little tough to make an exhaustive list of its uses. The biggest use of course is the simple declaration assertion, like “The cheese is a thing”. Then there’s its very widespread use as an auxiliary verb, essentially a component of other verbs such as “is in” or “is on”.

Hmm… I always thought this refers to syntax like the following:

if the tree relates to a container by the incorporation relationship:

But looking at the index, it appears that’s a phrase and not a relation. So, I’m not really sure what the universal relation is supposed to be…

This would be something for language extensions, such as “French Language”. I think it gives the name for a kind or value in the new language, eg:

person translates into French as personne.

Side note: translates into I6 and translates into inter are synonyms for most intents and purposes. There may be some subtle difference, but I’m not aware of it.

Technically it defines a use option, which isn’t necessarily just a simple constant (some use options are more like a static compile-time variable). I think this syntax is deprecated (or maybe even removed?) in the latest Inform.

1 Like

You’re right, and it makes sense to leave them as defined at a lower lever, but I like to account for everything (generally, not just with IF). I know this won’t be possible here, it’s just a tendency I have.

It’s a mystery. There is a thread that mentions it here… The answer seems to be “possibly used by the compiler.” If there’s any more on this, I’ll add it in.

Ok! Good to know. I’ll update the post.

Thanks for this, too. I’ll make a correction.

some more on translates-into-language

I have limited ability to test this in Basic, as language extensions appear to be concerned in large part with the contents of the Standard Rules.

container translates into Spanish as contenedor

I note that including this sentence in a BI project without a language extension throws the same error documented here (referring to SI with a language extension). I can’t determine whether this meaning works at all, or what it would take to enable it.

Including the same sentence in a Standard Inform project (without a language extension) blows up the compiler with a message concerning a “declension table,” which makes sense.

From that thread it kinda sounds like it’s linking up the verb definition with the syntactical construct that defines relations. In other words, it’s specifying how to conjugate “relate” in this construct:

Friendship relates various people to various people.

However, the syntax of that construct (and the verb to use) is hard-coded into the Preform, I believe, or possibly into the compiler itself; so even if you try to define another verb for the universal relation, you can’t actually use it to define relations.

The declension table is specified in the Preform, so yeah, you can’t use translates-into-language without having the full language extension loaded.

1 Like

OK, back at it! I’ve made corrections to the latest post, so it’s time to move on. Further corrections and observations are still welcome, of course, the door is never closed.

Basic Inform (Preamble Part 3)

§5. Next, the verbs used as imperatives:


The verb to use in the imperative means the built-in use meaning.

To employ a use option. Those definitions are discussed later in this post.


The verb to include + in in the imperative means the built-in include-in meaning.
The verb to omit + from in the imperative means the built-in omit-from meaning.

These verbs are undocumented debugging features. I do not know how to access them or use them.


The verb to test + with in the imperative means the built-in test-with meaning.
test [test name] with [specifically formatted sequence of commands]

An author can create a repeatable sequence of tests via the test command.


I’ll post two brief, related sections in proximity:

§6. We might as well declare these numerical comparisons now, too, though they’re not needed for any of the world-building work.

Here we have more uses of to be:

The verb to be greater than means the numerically-greater-than relation.
The verb to be less than means the numerically-less-than relation.
The verb to be at least means the numerically-greater-than-or-equal-to relation.
The verb to be at most means the numerically-less-than-or-equal-to relation.

It may be of interest to note the employment of relations. I myself had never thought about it!

§7. And these have symbolic equivalents as operators, declared using the following syntax. Operators are unlike other verbs in that they have no inflected forms and exist only in the present tense.

The operator > means the numerically-greater-than relation.
The operator < means the numerically-less-than relation.
The operator >= means the numerically-greater-than-or-equal-to relation.
The operator <= means the numerically-less-than-or-equal-to relation.

It is also interesting to think of these symbols as verbs meaning a relation. Again, it makes perfect sense, but I had never before thought about it.


§9. We can now make definitions of miscellaneous options: none are used by default, but all translate into I6 constant definitions if used. (These are constants whose values are used in the I6 library or in the template layer, which is how they have effect.)

Now that to use has a meaning, BI can define uses. They are all inactive by default, and must be invoked by authors manually. I think I understand all but one intriguing definition. Most use options are discussed in Writing with Inform. Since many are referred to in the same place, I won’t provide individual links for each usage.

Additionally each imperative application of use includes its relevant option name, so there is no need to share example code.


Use American dialect translates as (- Constant DIALECT_US; -).

Inform uses British spellings of words like “recognise” by default. American spellings (as well as a few other conventions) can be employed instead.


Use the serial comma translates as (- Constant SERIAL_COMMA; -).

Since I do not wish to stir up controvery, I will simply say that I am glad to have this option.


Use memory economy translates as (- Constant MEMORY_ECONOMY; -).

Writing with Inform discusses memory economy elsewhere. According to the documentation, Z-Machine projects may run out of resources with larger games. use memory economy is suggested as a stopgap, but the long term solution is, according to Nelson, switching to Glulx.


Use engineering notation translates as (- Constant USE_E_NOTATION = 0; -).

“Engineering notation” is mentioned only once. If it is used in a project, Inform will format numbers in this way: 6.022141E+23;.


Use unabbreviated object names translates as (- Constant UNABBREVIATED_OBJECT_NAMES = 0; -).

This usage is also mentioned only once in the documentation. It prevents the practice of abbreviating the name of something immediately after it has been declared, i.e.,

the brick road is west of the firehouse. the road is east of the shaded lane.

Without abbreviated names, Inform interprets brick road and road as two different rooms.


Use predictable randomisation translates as (- Constant FIX_RNG; -).

This usage is not mentioned in the documentation. Instead, authors are directed to select the option “Make random outcomes predictable when testing.” Theory: this is an option for people who don’t use the native IDE (VSCode, etc.)


Use fast route-finding translates as (- Constant FAST_ROUTE_FINDING; -).
Use slow route-finding translates as (- Constant SLOW_ROUTE_FINDING; -).

Both of these options affect the amount of memory available to Inform’s route-finding function. By default, Glux is fast and Z-machine is slow.


Use numbered rules translates as (- Constant NUMBERED_RULES; -).

This is an interesting one. It either numbers rules, or exposes the numbers to authors (most likely the first). I have only seen it mentioned in threads on this forum for the purposes of debugging. See here for more details. If this use has any other purpose beyond debugging, I’d love to hear about it!


Use telemetry recordings translates as (- Constant TELEMETRY_ON; -).

Intended for classroom use, this option sets Inform to save usage data to a local file.


Use no deprecated features translates as (- Constant NO_DEPRECATED_FEATURES; -).

This option is not mentioned in Writing with Inform. As suggested, it prevents projects from compiling if they include features that are considered deprecated. All of my projects compile with it active, which is quite a relief!


Use authorial modesty translates as (- Constant AUTHORIAL_MODESTY; -).

An extension (and its author) will be excluded from a project’s VERSION information if this is applied within said extension.


Use gn testing version translates as (- Constant GN_TESTING_VERSION; -).

This one is fun to think about. Nobody’s ever mentioned it here, and it isn’t in the documentation. Does GN stand for Graham Nelson? Perhaps it’s a compiler option. I don’t know! If anyone can shine any light, please do.

Update: according to Dannii (below), this usage only appears in older versions of the Standard Rules and is likely lost to the past.


I think that’s enough for now. Here are the outstanding mysteries of the day:

  1. the built-in include-in meaning… extensions, i6? both? neither? I’m tripping over the word in.
  2. GN_TESTING_VERSION
1 Like

I think these are another undocumented syntax that control the debugging log – that is, what information is directly output by the compiler. (I believe this can also be controlled by command-line arguments to the compiler.) So, not actually related to including extensions or I6 code, and definitely not related to omit contents from listing which is a phrase, not a verb.

It looks like borogove doesn’t expose the debug log… I think in the main IDE it may only be exposed if you enable it in the application settings, but I’m not quite sure. It might just be the “compilation in progress” log that you normally see briefly when you press run.

That’s… interesting, because that’s not the normal meaning of “engineering notation”, but it is indeed what it means in Inform, apparently.

Normally, “engineering notation” is a specific output format, similar to scientific notation, but with the exponent restricted to multiples of 3. Where scientific notation would write 5.31×105, engineering notation would write 531×103.

But, it seems, Inform has decided to instead make it mean the now-ubiquitous computer-style real number syntax as an input format – perhaps from misinterpreting the E in that syntax to stand for “engineering”, when in fact it stands for “exponent”.

Or if you want to release a test version of the game that’s predictable, perhaps.

I think I recall this having some effect when used in the main source text too, but I don’t recall exactly what. Maybe it omits any extensions that have the same author as the main source text?

1 Like

I strongly suspect this verb sets up the directive Include xyz in the debugging log. And likewise the omit verb is for Omit xyz from the debugging log. (The options you can put in place of “xyz” are all listed out in the Index somewhere. Or at least they used to be.)

1 Like

That makes sense! I see the basic conjugation for omit and include. I don’t think there is anything more in the index, unless I’ve missed it. I’ll update that.

That’s in the IDE nowadays, and the documentation points to that rather than to the use option. But not everyone uses the IDE, so there has to be another way (that is if they are equivalent). This isn’t something I’ve ever used.

That just leaves GN_TESTING_VERSION; everything else is accounted for.

They are not listed in the index as far as I’m aware… but if you add Include list in the debugging log. then the list of possible options will itself be listed in the debugging log. In addition to that, you can include a specific Preform nonterminal in the log with the syntax Include <symbol> in the debugging log.. I don’t remember what the use of that is though… and I don’t know of a way to list all the nonterminals.

Its only occurrences in the Inform code repository are in the Standard Rules extensions. So I take it that it’s some long vestigial code.

1 Like

In searching, it sounds like it used to be in “preferences->advanced”, but it isn’t there in the Windows IDE. I might try to download an older version just to see if it’s there.

Great! I’ll make a note.

Well, naturally; Graham Nelson is a mathematician, and only engineers have to work with numbers greater than 100.

(Sorry, as an engineer whose sister is a pure mathematician, I had to.)

In seriousness, I’d call that an error in the documentation if nothing else. Not a high priority, but worth filing.

3 Likes