Last updated: September 1997
In 1984, William Chamberlain published a book called "The Policeman's Beard is Half Constructed" (Warner Books, NY. 0-446-38051-2, paper $9.95). The introduction claims: "With the exception of this introduction, the writing in this book was all done by computer."
The authorship is attributed to RACTER, "written in compiled BASIC on a Z80 with 64k of RAM." Racter (the program) was co-authored by Chamberlain and Thomas Etter.
The introduction goes on to claim that Racter strings together words according to "syntax directives", and that the illusion of coherence is increased by repeated re-use of text variables.
Only the most generous interpretation of these claims will hold up under close scrutiny. None of the long pieces in the book could have been produced except by using elaborate boilerplate templates that are *not* included in the commercially available release of Racter. Nor does the Inrac language include any sort of 'syntax directive' powerful enough to string words together into a form like the published stories.
So Racter never *adds* any coherence to the templates-- it's text-template 'degeneration' more than text generation. And this truth is further disguised by using templates that are themselves 'wacky', leading one to attribute to Racter a style that's really Chamberlain's.
Still, it's a fine piece of work! The Macintosh version (at least) includes speech synthesis, and is lots of fun. And the Inrac compiler, for inputting your own templates, is quite an elaborate achievement that deserves considerable honor for pioneering this genre, and will surely *someday* inspire better successors.
RACTER may still be available in MS-DOS and Macintosh versions for about $50, from:
John D Owens
INRAC Corp./ Nickers International Ltd.
12 Schubert Street, Staten Island NY 10305
718-448-6283 or (fax) 718-448-6298
The Inrac compiler is $200 (MS-DOS only), and the Inrac manual alone is $25.
Be warned that the Mac version is an orphaned, *single-sided* 400k disk that still bears the 1985-era Mindscape label, and is copy-protected (meaning it must always be booted-from), with an *ancient* version of System, that works fine on SEs or 512s, but not on my SE/30 at all. (I will do more tests. Owens says nobody's complained, but I have to wonder.) Owens says there's little hope of a Mac update because those source files were lost. I expect when the Mindscape edition runs out, there'll be some way to copy it exactly, but it will likely still be 400k, etc.
Also, the print driver on the Mac version didn't do linefeeds right with the Imagewriter 2 I tested it on, so there may be no easy way to save your output.
But the voice-synthesis (Mac only? I haven't checked this) is splendid, and this is still great fun, despite all the caveats.
The Inrac compiler comes with a disastrous antique text editor called "E". The manual is about 100 unindexed pages in a 3-ring binder, but reasonably well-written, especially by 1985 standards. Anyone interested in AI- history should grab a copy.
There's plenty of untapped capability in Inrac, too, I think, if you're patient enough to master the messy syntax. (see samples below)
Owens claims (phone conversation, June 25 1993) that the program he's selling as Racter is capable of generating all the stories in "Policeman's Beard". Examination of the included text files indicates very strongly that this cannot be true. However, using Inrac with the right 'boilerplate' text certainly *could* do so, but Chamberlain's claims about the minimal degree of boilerplating still appear highly exaggerated.
There's a mail-order software retailer called "Mindware" whose address is: Mindware, 1803 Mission St, Ste 414, Santa Cruz, CA 95060-5292, phone numbers 800-447-0477 or 408-427-9455 (fax: 408-429-5302).
They sell a range of 'human potential' software, entirely for MS-DOS and Windows (no Mac), including Racter, but also the winners of the 1991 and 1992 Loebner Prizes for AI, a 'Turing test' hosted I believe by the Boston Computer Museum.
The 1991 winner was PC Therapist III, which "learns everything you say to it." It sells for $54.95, and is available with "a cute talking head and voice synthesis" for $5 more, as PC Therapist IV. "PC Therapist IV is an excellent learning aid. Type in 50 or 100 sentences about a topic and the software becomes a suitable teacher on that topic." (Yeah, right...
;^)
The 1992 winner was PC Therapist by Joseph Weintraub, which "draws on a knowledgebase of 6000 sentences... that specifically deals with [human] *relationships*." This one sells for $89.95 and includes the "original" Eliza, for comparison.
Babbitt, along with other enthusiasts, married a runner, and consequently L. Ron Hubbard married Schubert, the confused feeler, himself who was divorcing L. Ron Hubbard's Tasmanian devil. Then elegance prevailed. Poor Babbitt! But that's how enthusiasts are. I wonder if muddleheads like strength?
Policeman's Beard 'output'
At all events my own essays and dissertations about love and its endless pain and perpetual pleasure will be known and understood by all of you who read this and talk or sing or chant about it to your worried friends or nervous enemies. Love is the question and the subject of this essay. We will commence with a question: does steak love lettuce? This quesion is implacably hard and inevitably difficult to answer. Here is a question: does an electron love a proton, or does it love a neutron? Here is a question: does a man love a woman or, to be specific and to be precise, does Bill love Diane? The interesting and critical response to this question is: no! He is obsessed and infatuated with her. He is loony and crazy about her. That is not the love of steak and lettuce, of electron and proton and neutron. This dissertation will show that the love of a man and a woman is not the love of steak and lettuce. Love is interesting to me and fascinating to you but it is painful to Bill and Diane. That is love!
Actual underlying template, reconstructed
Key:
<text variables>
(redundancies) explicitly added by Chamberlain, by repeating a text-
variable type, apparently for camouflage
<Intro phrase> my own (essays) about love and its (endless) pain and pleasure will be (understood) by all of you who read this and (talk) about it to your (<worried> <friends>). Love is the (subject) of this <essay>. We will <begin> with a question: does <meat> love <vegetable>? This quesion is (<implacably> <hard>) to answer. (Here is a question: does a man love a woman or, (to be specific), does <man> love <woman>?) The (interesting) response to this question is: no! (He is (infatuated) with her.) That is not the love (of <meat> and <vegeable>). This <essay> will show that the love of a man and a woman is not the love of <meat> and <vegetable>. Love is (interesting) to me and you but it is painful to <man> and <woman>. That is love!
Here's a code sample from the compiler book, followed by a detailed trace of what it should do. It *doesn't* illustrate all of Inrac's functions. {I don't have the compiler, just the manual, so in places I've had to guess its output):
*story code section
a %PEOPLE #
b >HERO*person[&P] >VILLAIN*person[&N] #
c $VILLAIN #RND3 bit robbed hit $HERO , #
d but $HERO just #RND3 smiled laughed shrugged . #
' new:
e $VILLAIN snarled >X=Saint,HERO "> $X , I presume <*. #
f "That's a !Y=VILLAIN;esque remark" replied $HERO .
g >X*person !Y=X,hoo
=== *story code section =================================================
This is just a header.
=== a %PEOPLE # =========================================================This temporarily loads the "PEOPLE" file, a long list of names tagged for gender, goodness or badness, and field-of-relevance (politics, literature, etc.)
These tags are implemented as short strings like "MPn2", called 'identifiers', where the first letter is always reserved for (eg) gender, the second for goodness, etc.
=== b >HERO*person[&P] >VILLAIN*person[&N] # ============================The ">"s create two variables (called "cells") named HERO and VILLAIN, and initializes them with a randomly chosen good person ("P" for positive) and bad person ("N"). (It's also easy to request two good people, with assurances that the second will be different from the first.)
"[&P]" is an identifier-patternmatch command. The "&" is a wildcard, needed because the property of goodness/ badness is assumed as assigned to the *second* letter.
Inrac supports a maximum of 128 variables.
=== c $VILLAIN #RND3 bit robbed hit $HERO , # ==========================
Joseph Stalin robbed Mother Theresa,
The witty PEOPLE file helps a lot.
#RND3 means choose one of the next three words, randomly.
=== d but $HERO just #RND3 smiled laughed shrugged . # ==================
but Mother Theresa just laughed.
=== ' new: ==============================================================
??? I haven't found the explanation of this yet.
=== e $VILLAIN snarled >X=Saint,HERO "> $X , I presume <". # ============
Joseph Stalin snarled, "Saint Mother Theresa, I presume".
">" assigns a new variable X, and $X prints it. This is demo code, it
could be done more simply.
=== f "That's a !Y=VILLAIN;esque remark" replied $HERO . ===============
"That's a Joseph Stalinesque remark" replied Mother Theresa.
The "!" is for inline assignment *and* printing. Y now equals "Joseph
Stalinesque"
=== g >X*person !Y=X,hoo ===============================================X is reassigned to some new person. I *think* this will print
Jane Fonda hoo
(Don't ask me why!)
#RND2
#RND[any integer]
#RND [no integer indicates entire rest of sentence]
From the indicated set of words, choose one randomly.
# goto next line (normal continue)
* insert indicated line(s) (or randomly chosen line from range)
#* goto indicated line (or randomly chosen line from range)
## repeat same line (rarely used, because of infiniteloop danger)
?? get input from user
?pattern search inputline for pattern
/iffound \ifnotfound if-then-else syntax
?pattern+ search forward from current point
?pattern- search backward from point
?pattern+[integer] compare pattern to specific word relative to point
?&pattern match any word ending in pattern
?pattern& match any word beginning with pattern
If a search is successful, one can assign variables to the two sentence-
fragments in the split, or to the word-part matched by "&".
variable.offset
Conjugations of verbs (and 'conjugations' of nouns, too) are handled by a
p-list:
have 1 has 3 had 5 had
where the numbers stand for properties, preset to represent first person,
plural, past tense, or whatever. Various tricks allow one to maintain
agreement among conjugable forms.
=----------=- ,!. --=----=----=----=----=----=----=----=----=----=----=
Jorn Barger j't Anon-ftp to ftp.mcs.com in mcsnet.users/jorn for:
<:^)^:< K=-=:: -=-> Finnegans Wake, artificial intelligence, Ascii-TV,
.::.:.::.. "=i.: [-' fractal-thicket indexing, semantic-topology theory,
jorn@mcs.com /;:":.\ DecentWrite, MiniTech, nant/nart, flame theory &c!
=----------= ;}' '(, -=----=----=----=----=----=----=----=----=----=----=
[Up- NLP] [Map- AI] [No next] [Robot Wisdom home page] (Feedback)