Appendix: Quick reference
The bare bones
- Comments:
- 
From %%to end of line.
- Special characters:
- 
#,$,@,~,*,|,\, parentheses, brackets, and braces. Prefix by\to print.
- Rule definitions:
- 
- 
The rule head is in the leftmost column. 
- 
The rule body is a sequence of statements, not in the leftmost column. They form a conjunction. 
- 
Multiple rule definitions for the same predicate are tried in order. They form a disjunction. 
- 
Queries succeed or fail. Failure causes backtracking. 
 
- 
- Statements:
- 
- 
Queries (normal, negated, or multi-) to predicates, 
- 
text to be printed, or 
- 
special syntax. 
 
- 
Value syntax:
- #abc
- 
Object name. 
- @abc
- 
Dictionary word. The @is optional inside list expressions. Special words to represent non-printable keys:@\n,@\b,@\s,@\u,@\d,@\l,@\r.
- $abc
- 
Variable. 
- 123
- 
Number (the valid range is 0–16383). 
- []
- 
Empty list. 
- [ element1 element2 element3 … ]
- 
Complete list. 
- [ element1 element2 element3 … | tail ]
- 
Partial list. 
- { … }
- 
Closure. 
- *
- 
Current topic. 
The current topic is set with an object name in the leftmost column.
- Unification:
- 
- 
Arguments are passed by unification. 
- 
Simple values unify with themselves. 
- 
Lists unify when each element unifies. 
- 
Unbound variables unify (with values or unbound variables) by binding. 
 
- 
Special syntax
- { … }
- 
Conjunction. 
- ~{ … }
- 
Negated conjunction. 
- … (or) … (or) …
- 
Disjunction. 
- (if) … (then) … (elseif) … (then) … (else) … (endif)
- 
Conditions are evaluated at most once. Missing else-clause is assumed to be empty, i.e. succeeds. 
- (select) … (or) … (or) … (stopping)
- 
Branches entered one at a time, then the final branch repeats. 
- (select) … (or) … (or) … (cycling)
- 
Branches entered one at a time, then the cycle repeats. 
- (select) … (or) … (or) … (at random)
- 
Branches entered at random, avoiding repetition. 
- (select) … (or) … (or) … (purely at random)
- 
Branches entered at random, allowing repetition. 
- (select) … (or) … (or) … (then at random)
- 
First like (select) … (stopping), then like(select) … (at random).
- (select) … (or) … (or) … (then purely at random)
- 
First like (select) … (stopping), then like(select) …(purely at random).
- (exhaust) statement
- 
Backtracks over all solutions to the statement (typically a block). 
- (collect $Element) … (into $List)
- 
Backtracks over all solutions to the inner expression. Values bound to $Elementare collected in order and unified with$List.
- (collect words) … (into $List)
- 
Backtracks over all solutions to the inner expression, grabbing all output. Printed words are diverted into $List, possibly out of order.
- (accumulate $Element) … (into $Sum)
- 
Backtracks over all solutions to the inner expression. Values bound to $Elementare added and their sum is unified with$Sum.
- (determine object $Obj) … (from words) … (matching all of $List)
- 
Backtracks over every object $Objthat makes the first inner expression succeed, and for which the second expression (when exhausted) emits at least every word in$List.
- (stoppable) statement
- 
The inner statement executes, succeeding at most once. The (stop)built-in breaks out of the innermost stoppable environment. The stoppable environment itself always succeeds.
- (span $Class) statement
- 
The inner statement executes, succeeding at most once. All output is rendered according to the given style class. 
- (div $Class) statement
- 
The inner statement executes, succeeding at most once. All output is rendered into a rectangular area according to the given style class. 
- (status bar $Class) statement
- 
Like (div $), but the output is rendered into the top status area, which is created if necessary.
- (inline status bar $Class) statement
- 
Like (div $), but the output is rendered into an inline status area. The previous inline status area, if any, is removed from display.
- (link) statement
- 
The inner statement executes, succeeding at most once. The interpreter displays the output, optionally in the form of a hyperlink. If the hyperlink is selected by the player, the output from the inner statement is appended to the current input buffer, which is submitted. 
- (link $Words) statement
- 
The inner statement executes, succeeding at most once. The interpreter displays the output, optionally in the form of a hyperlink. If the hyperlink is selected by the player, the given $Wordsare appended to the current input buffer, which is submitted.
- (link resource $Id) statement
- 
The inner statement executes, succeeding at most once. The interpreter displays the output, optionally in the form of a hyperlink. The hyperlink leads to the resource identified by $Id.
- (log) statement
- 
If running in the debugger, execute the inner statement in a stoppable environment. The output appears between line breaks, in a distinct style. 
- (now) pseudo-query
- 
Updates a dynamic predicate. 
- (just)
- 
Removes choice-points created since the current predicate was queried. 
- (global variable (name of predicate $))
- 
Declares a global variable. 
- (interface (name of predicate))
- 
Declares an interface, i.e. the intended use of a predicate. 
- (generate $N (name of predicate $))
- 
Creates $Nanonymous objects, for which the predicate will succeed.
- @(…) …
- 
Defines an access predicate. Queries or definitions matching the rule head are transformed into the rule body at compile-time. 
Built-in predicates
The list is sorted alphabetically, considering just the non-parameter words.
- ($X = $Y)
- 
Unifies $Xwith$Y.
- ($X < $Y)
- 
Succeeds if $Xand$Yare numbers, and$Xis strictly less than$Y.
- ($X > $Y)
- 
Succeeds if $Xand$Yare numbers, and$Xis strictly greater than$Y.
- (append $A $B $AB)
- 
Unifies $ABwith the concatenation of$A(which must be bound) and$B.
- (bold)
- 
Enables bold text. 
- (bound $X)
- 
Succeeds if $Xis bound to a value.
- (breakpoint)
- 
Suspends execution (if running in the debugger). 
- (clear)
- 
Clears the main window, but not the top status area. 
- (clear all)
- 
Clears the screen and disables the top status area. 
- (clear div)
- 
Clears or hides the current div. 
- (clear links)
- 
Transforms all hyperlinks into plain text, except in the status areas. 
- (clear old)
- 
Clears the screen from all text that the player has had a chance to read. 
- (compiler version)
- 
Prints the name and version of the compiler. 
- (display memory statistics)
- 
Displays a backend-specific line of memory usage statistics. 
- ($X divided by $Y into $Z)
- 
Unifies $Zwith the quotient after dividing$Xby$Y.
- (embed resource $Id)
- 
Displays the resource identified by $Id, embedded in the story text.
- (empty $X)
- 
Succeeds if $Xis bound to an empty list.
- (fail)
- 
Fails. Equivalent in functionality to e.g. (1 = 2).
- (fixed pitch)
- 
Enables fixed-pitch text. 
- (fully bound $X)
- 
Succeeds if $Xis bound to a value, and—in case of a list—contains only fully bound elements.
- (get input $)
- 
Reads a line of input from the player. Returns a list of words. 
- (get key $)
- 
Waits for the player to press a key. Returns a single-character word. 
- ($X has parent $Y)
- 
Dynamic predicate that succeeds when $Xis a direct child of$Yin the object tree. Either parameter can be unbound.
- (interpreter can embed $Id)
- 
Succeeds if the current interpreter supports the resource identified by $Id, and is able to display it using(embed resource $Id)without falling back on just printing the alt-text.
- (interpreter supports inline status bar)
- 
Succeeds if the current interpreter supports inline status areas. 
- (interpreter supports links)
- 
Succeeds if the current interpreter claims to support hyperlinks, and they are currently enabled. This can change at runtime, for instance if a game is saved and subsequently restored on a different interpreter. 
- (interpreter supports quit)
- 
Succeeds if the current interpreter supports quit in a way that is meaningful to the player. This can change at runtime, for instance if a game is saved and subsequently restored on a different interpreter. 
- (interpreter supports status bar)
- 
Succeeds if the current interpreter supports the top status area. 
- (interpreter supports undo)
- 
Succeeds if the current interpreter claims to support undo. This can change at runtime, for instance if a game is saved and subsequently restored on a different interpreter. 
- ($X is one of $Y)
- 
Unifies $Xwith each element of$Yin turn.
- (italic)
- 
Enables italic text. 
- (join words $List into $Word)
- 
Concatenates the dictionary words (or numbers) in $Listinto a new dictionary word (or number), and unifies the result with$Word.
- (line)
- 
Requests a line break. 
- (list $X)
- 
Succeeds if $Xis bound to a list (empty or non-empty).
- ($X minus $Y into $Z)
- 
Unifies $Zwith the difference between$Xand$Y.
- ($X modulo $Y into $Z)
- 
Unifies $Zwith the remainder after dividing$Xby$Y.
- (nonempty $X)
- 
Succeeds if $Xis bound to an non-empty list.
- (no space)
- 
Inhibits automatic whitespace before the next word or punctuation mark. 
- (number $X)
- 
Succeeds if $Xis bound to a number.
- (object $X)
- 
Checks if $Xis an object, or—in a multi-query—backtracks over every object.
- (par)
- 
Requests a paragraph break. 
- (progress bar $ of $)
- 
Draws a progress bar scaled to fit the width of the current div. 
- ($X plus $Y into $Z)
- 
Unifies $Zwith the sum of$Xand$Y.
- (quit)
- 
Immediately terminates the interpreter. 
- (random from $X to $Y into $Z)
- 
Unifies $Zwith a random number in the range$Xto$Yinclusive.
- (repeat forever)
- 
Provides an infinite supply of choice points. Generally invoked with a multi-query. 
- (restart)
- 
Restarts the program. 
- (restore)
- 
Restores a saved game (the interpreter asks for a filename). 
- (reverse)
- 
Enables reverse-video text. 
- (roman)
- 
Disables all text styles (bold, italic, reverse, and fixed pitch). 
- (save $ComingBack)
- 
Saves the current game (the interpreter asks for a filename). Unifies $ComingBackwith 0 after a successful save, 1 after a successful restore.
- (save undo $ComingBack)
- 
Saves the current program state in memory. Unifies $ComingBackwith 0 after a successful save, 1 after a successful restore.
- (script off)
- 
Disables transcription. 
- (script on)
- 
Enables transcription (the interpreter asks for a filename). 
- (serial number)
- 
Prints the serial number (compilation date) of the current program. 
- (space)
- 
Forces whitespace before the next word or punctuation mark. 
- (space $N)
- 
Prints $Nspace characters.
- (split $X by $Y into $Left and $Right)
- 
Splits $Xinto two halves around each occurrence of$Yor any member of$Y.
- (split word $Word into $List)
- 
Converts the dictionary word (or number) $Wordinto a list of its constituent characters, and unifies the result with$List.
- (stop)
- 
Breaks out of the innermost (stoppable)environment.
- ($X times $Y into $Z)
- 
Unifies $Zwith the product of$Xand$Y.
- (trace off)
- 
Disables query tracing. 
- (trace on)
- 
Enables query tracing. 
- (undo)
- 
Restores the program state at the time of the latest (save undo 0).
- (unknown word $X)
- 
Succeeds if $Xis bound to a word that wasn’t found in the game dictionary.
- (unstyle)
- 
Select the default text style for the current division. 
- (uppercase)
- 
Convert the next printed character to uppercase. 
- (word $X)
- 
Succeeds if $Xis bound to a dictionary word.
Entry points and metadata predicates
- (error $ErrorCode entry point)
- 
Execution restarts here when a fatal error has occurred. 
- (program entry point)
- 
Normal execution starts here. 
- (story author)
- 
Metadata: Defines the author of the story. 
- (story blurb)
- 
Metadata: Defines the blurb for the story. 
- (story ifid)
- 
Metadata: Defines the IFID of the story. 
- (story noun)
- 
Metadata: Defines the noun (also known as the headline) of the story. 
- (story release $N)
- 
Metadata: Defines the release number of the story. 
- (story title)
- 
Metadata: Defines the title of the story. 
- (library version)
- 
Defines the library version and is used to identify the library source code file. 
- (removable word endings)
- 
Defines one or more word endings that can be removed when parsing user input. 
- (style class $Name)
- 
Associates one or more style attributes with the given class name. 
- (define resource $Id)
- 
Defines the location (local filename or URL) and alt-text of a resource.