Inform is a programming language created by Graham Nelson, and is used primarily for the authoring of interactive fiction. It compiles to the z-machine standard, just like the old Infocom text adventures. It and TADS are probably the two most popular languages currently used to write interactive fiction. See also rec.arts.int-fiction.

The obligatory hello world program in inform:

[ Main;
  print "Hello, world!^";
];


Inform is a rather old programming language, but curiously enough it shares some of the attributes of many languages which (at the time of this writeup) are currently popular.

Inform is Object-Oriented

But not in the same way that languages like smalltalk, C++, or Java are. Inform does indeed have classes and the potential for inheritance and even multiple inheritance, but the more common way to use objects in inform is to define them inline. A simple object declaration looks like this:

Object old_book "old book"
  private
    id 23,
    price 5,
  with
    name "old" "book",
    description "A musty old book",
    [ appreciate;
      self.price = self.price + 1;
    ],
  has
    readable;

Inform is procedural

As opposed to rule-based (like prolog) or functional (like lisp or scheme), inform has functions and local variables. It is a common misconception that procedural and object-oriented are mutually exclusive. Java and C++ are both object-oriented and procedural. Here is as simple recursive function for computing factorials. Unfortunately, since inform numbers are only 16 bits, this code will only work for n from 0-7.

[ Factorial n;
  if (n == 1 or 0) return 1;
  return n * Factorial(n - 1);
];

Inform is byte-compiled

Like Java and C#, inform is compiled to an intermediate format that is subsequently interpreted. Inform compilers generate Z-machine files. Inform compilers and Z-machine interpreters exist for many different platforms. As a result, inform is very portable.


My highly subjective opinion of inform

Having only completed one game using inform, I can hardly call myself a master, but I think I got a pretty good feel for the language. My strongest impression of the language is that is is odd.

Inform itself is general enough for most purposes (except for the 16 bit number size, and lack of a floating point type), but it was designed for making interactive fiction. As a result, the standard libraries are completely tailored to this task, and inform really isn't good for anything else. In one respect, this is good, since it simplifies the task of creating game objects and greatly simplifies the herculean task of natural language parsing. However, in many ways inform is counter-intuitive and sometimes downright limiting.

The language is very terse, and the syntax does not closely resemble any other popular language (that I know of). For such a specific language, it is very complex. The manual (which you must read if you want to do anything of consequence in inform) is over 15,000 lines long. I guess my biggest complaint about inform is that it sometimes just seems to be inconsistent. From time to time, it's necessary to call a seemingly random library function just to enable a common feature (pushing a object from one room to another, for instance).

I find myself really split about inform. On one hand, I'd hate to write text adventures without it, and on the other, It can really be a pain to use. I guess this is probably why I don't plan to write any more adventure-like games in the future, but that's not to say that I regret writing the one that I did.


My Inform Game

As I previously mentioned, I completed only one game in inform. It was for Professor John Laird's EECS 494: Computer Game Development. I based my game on characters and plot points from Monty Python and the Holy Grail. However, in my game, you play the part of a lowly squire rather than a heroic knight. I called the game Squire, and if you're interested, you can find it here: http://www.eecs.umich.edu/~baumanj/Squire/


The Inform Designer's Manual Third edition by Graham Nelson was consulted in the creation of this writeup

Inform 7 was recently released. It completely re-makes the language as a natural-language programming environment. It can still be found at http://www.inform-fiction.org/. Graham Nelson is still credited with creating the language, Andrew Hunter and David Kinder are credited with creating the UIs, and Emily Short, Andrew Plotkin, and Sonja Kesserich are all given a degree of credit as well.

"An Example" by Kirk McDonald

An Empty Space is a room. "Around you is an empty room, with plain white walls and a tiled floor."

That is an actual example of code. It defines a single room, with a description that it prints out when the player types "look." More lengthy and useful examples can be found on the website. The first one I read can be found here, and is highly impressive.

Where code written in previous versions of Inform was largely composed of inline object definitions, code in Inform 7 contains many assertions. "An Empty Space is a room" is an assertion. Expanding on our source text above:

A pedestal is in the Empty Space. A stone is on top of the pedestal.

Where before one would probably say something like:

Object -> pedestal "pedestal"
    has static supporter;

Object -> -> stone "stone";

When "played," this example yields:

Empty Space
Around you is an empty room, with plain white walls and a tiled floor.

You can see a pedestal (on which is a stone) here.

>take stone
Taken.

>inventory
You are carrying:
  a stone

As this version is still very new, I haven't yet had a chance to play with it much. (I also haven't played with any version of Inform in several years.) However, what I've seen so far is very promising. It naturally can still compile to the venerable Z-machine format, although by default it uses a newer "blorb" format. This format is a wrapper around the Z-machine format that allows for the storing of additional metadata.

In*form" (?), a. [L. informis; pref. in- not + forma form, shape: cf. F. informe]

Without regular form; shapeless; ugly; deformed.

Cotton.

 

© Webster 1913.


In*form", v. t. [imp. & p. p. Informed (?); p. pr. & vb. n. Informing.] [OE. enformen, OF. enformer, F. informer. L. informare; pref. in- in + formare to form, share, fr. forma form. See Form.]

1.

To give form or share to; to give vital ororganizing power to; to give life to; to imbue and actuate with vitality; to animate; to mold; to figure; to fashion.

"The informing Word." Coleridge.

Let others better mold the running mass Of metals, and inform the breathing brass. Dryden.

Breath informs this fleeting frame. Prior.

Breathes in our soul,informs our mortal part. Pope.

2.

To communicate knowledge to; to make known to; to acquaint; to advise; to instruct; to tell; to notify; to enlighten; -- usually followed by of.

For he would learn their business secretly, And then inform his master hastily. Spenser.

I am informed thoroughky of the cause. Shak.

3.

To communicate a knowledge of facts to,by way of accusation; to warn against anybody.

Tertullus . . . informed the governor against Paul. Acts xxiv. 1.

Syn. -- To acquaint; apprise; tell; teach; instruct; enlighten; animate; fashion.

 

© Webster 1913.


In*form", v. t.

1.

To take form; to become visible or manifest; to appear.

[Obs.]

It is the bloody business which informs Thus to mine eyes. Shak.

2.

To give intelligence or information; to tell.

Shak.

He might either teach in the same manner,or inform how he had been taught. Monthly Rev.

To inform against, to communicate facts by way of accusation against; to denounce; as, two persons came to the magistrate, and informed against A.

 

© Webster 1913.

Log in or register to write something here or to contact authors.