§21.6. Lists of objects
Lists can be made of values of any kind (including other lists), but lists of objects are especially useful. We could always make these "by hand":
let L be {the pot plant, the foxglove};
But it is usually easier and clearer to use descriptions.
list of (description of values) ... value
This phrase produces the list of all values matching the given description. Inform will issue a problem message if the result would be an infinite list, or one which is impractical to test: for instance "list of even numbers" is not feasible.
While that works nicely for many kinds of value ("list of recurring scenes", say), it's particularly useful for objects:
let L be the list of open containers;
add the list of open doors to L;
means that L now contains the open containers (if any) followed by the open doors (if any). Or, for example:
let L be the list of things;
remove the list of backdrops from L;
makes a list of all non-backdrops.
As mentioned above, lists of objects can be said in two additional ways:
"[L with definite articles]"
"[L with indefinite articles]"
And as mentioned below, they can be sorted in property value order:
sort L in P order;
sort L in reverse P order;
where P is any value property. In all other respects, lists of objects are no different to other lists.
![]() | Start of Chapter 21: Lists |
![]() | Back to §21.5. Building lists |
![]() | Onward to §21.7. Lists of values matching a description |
|
Suppose we have an item that produces an interesting result the first time the player lifts it -- a rock with dangerous ants revealed underneath. The effect of the surprise is a little weakened, though, if the player sees that response as the result of a TAKE ALL, when it might be printed like this:
The calm response to "rusty nail" looks odd now, and the score change is disconnected from the event that caused it. To manage this, we might institute a system so that interesting objects are handled last in their list, like so:
Note that while one could also manipulate the object list to add or remove items at this stage, there's a simpler way to control what Inform considers "ALL" to mean in commands: see the activity "Deciding whether all includes" in the activities chapter. |
|
Suppose we have an item that produces an interesting result the first time the player lifts it -- a rock with dangerous ants revealed underneath. The effect of the surprise is a little weakened, though, if the player sees that response as the result of a TAKE ALL, when it might be printed like this:
The calm response to "rusty nail" looks odd now, and the score change is disconnected from the event that caused it. To manage this, we might institute a system so that interesting objects are handled last in their list, like so:
Note that while one could also manipulate the object list to add or remove items at this stage, there's a simpler way to control what Inform considers "ALL" to mean in commands: see the activity "Deciding whether all includes" in the activities chapter. Suppose we have an item that produces an interesting result the first time the player lifts it -- a rock with dangerous ants revealed underneath. The effect of the surprise is a little weakened, though, if the player sees that response as the result of a TAKE ALL, when it might be printed like this:
The calm response to "rusty nail" looks odd now, and the score change is disconnected from the event that caused it. To manage this, we might institute a system so that interesting objects are handled last in their list, like so:
Note that while one could also manipulate the object list to add or remove items at this stage, there's a simpler way to control what Inform considers "ALL" to mean in commands: see the activity "Deciding whether all includes" in the activities chapter. |