April 4, 2008

Process of “The IBM Poem” by Emmett Williams

by Nick Montfort · , 9:11 am

Chris Funkhouser is author of the excellent volume Prehistoric Digital Poetry, which I hope to write about at greater length before too long. He told us today during the Codework workshop at WVU about Emmett Williams’s “The IBM Poem,” a 1966 computationally-generated poem and system for generating poems. I can find little information about this poem on the Web – certainly, not the specification of how the generator works, which Funkhouser was kind enough to hand out to us on paper.

Here is a partial implementation (Update: a complete implementation; my earlier version is still available) of the poem-generating process in Python which I just wrote up. You may modify or do anything you like with this. I dedicate this program to the public domain as described in the linked document. I’ve uploaded a text file containing the program that also appears in this post, below.

# IBM Poem Generator, complete version, nm, 4 April 2008

# This version is a complete model of Emmett William's process in
# generating "The IBM Poem," as I understand it, except that, being a
# console program, it does not increase the size of the type as words
# are re-used.
# That could be done, too - for instance, if the output were in HTML 
# with CSS.

vocab = [''] * 26

def expand(word):
  # A general method to expand a sequence of letters into words
  expanded = []
  for letter in word:
    expanded.append(vocab[ord(letter) - 97])
  return expanded

print "Provide a word (a sequence of letters) for each letter from a to z."

# Get a vocabulary word (the user types one "at random") for each letter a-z
for i in range(26):
  anyword = ''
  while anyword == '' or not anyword.isalpha():
    anyword = raw_input(chr(97+i) + '=')
  vocab[i] = anyword.lower()

# Ask for "IBM" or another three-letter word or acronym
tlw = ''
while len(tlw) <> 3 and not tlw.isalpha():
  tlw = raw_input('Provide a 3 letter word or phrase: ')
  tlw = tlw.lower()
seed = [tlw]

# Expand three times, printing along the way:
# 0. Three-letter word into title
# 1. Title into three lines
# 2. Each of the three lines into as many lines as there are words
newseed = []
for i in range(3):
  for word in seed:
    words = expand(word)
    line = ' '.join(words)
    print line
    if i == 0:
    newseed += words
  seed = newseed
  newseed = []

A sample run (thanks to Rita Raley):


flower paper bush

falluja hawaii paper coffee battle brick
pencil dog pencil battle brick
run link nick toggle
falluja dog hawaii hawaii link banana dog
toggle dog coffee dog algorithm algorithm
pencil dog pencil battle brick
cat paper falluja falluja battle battle
run dog flick flick hawaii battle
run brick algorithm cat papaya
pencil battle fork cat algorithm hawaii
flower paper bush
pencil battle fork cat algorithm hawaii
run dog flick flick hawaii battle
run brick algorithm cat papaya
brick link fork
hawaii algorithm fork papaya
fork algorithm cat papaya
flick paper bush bush hawaii battle

Please feel free to not only leave comments of the traditional sort, but to also drop us any interesting code modifications or poems that you’ve generated.

7 Responses to “Process of “The IBM Poem” by Emmett Williams”

  1. Rita R Says:


  2. nick Says:

    Arg! I’ve fixed my mistake – sorry, Rita.

  3. Chris Says:

    Oh wow, thanks for this. I didn’t realize that Williams had worked with expansion-by-letters (which I have also worked with). I first saw that idea done by Jackson Mac Low in his Stanzas for Iris Lezak, which include a set of poems using similar methods — the “3rd Asymmetry for Iris”, for instance, dated 23 Sept 1960, is the most clearly like this, although it pulls its words from another source text. (It’s reprinted in the recent selected Mac Low, Thing of Beauty.) Anyway, Mac Low’s book wasn’t published until 1971, but it was published by Something Else Press, which had also published Williams, so I don’t know whether Williams would have heard about this idea from Mac Low or not.

  4. chris funkhouser Says:

    hi Chris,
    The way Williams explains it in _A Valentine for Noel_ (Something Else, 1973) is that in ’65 he–after someone asked him if he wanted “to do something with a computer”–automated a process he devised in ’55. I don’t know who influenced who, but certainly these artists knew each other and doing procedural works seemed to be part of the spirit of the time. In any case, to read my recent lecture on the IBM poem see http://web.njit.edu/~funkhous/2008/machine/ – ok – cfunk

  5. Elliot Smith Says:

    Hmm, not very good poetry :) I wrote a simple Prolog poetry generator which produces (near) grammatical sentences from a simple grammar. If you’re interested, you’re more than welcome to a copy.

  6. Grand Text Auto » Codework Positions and Engagements Says:

    […] the one about the relationship between creative writing and programming? Maybe not, but my posts on on Emmett Williams’s IBM Poem and programs Ted Nelson likes were from there. Nineteen short position papers from the workshop are […]

  7. Ivor Griffiths Says:

    I have been programming for years and have written a few poetry generators. I never found any of them to be much good. The problem with poetry, if one can call it that, is the fact that it is so human. It is full of cultural and gender references that are beyond programming in simply linguistic terms. Turing and Wittgenstein have considered these two aspects, at the philosophical level, over fifty years ago. Still one day perhaps a poem will pass the “turing test”. Software and AI has no response to the question, “what is reality?” Poetry does.

Powered by WordPress