Hector: A Literate Haskell Implementation of ELIZA
Hector is a Literate Haskell implementation of Weizenbaum's ELIZA program.
ELIZA is more or less the original “chatterbot”. Implemented by
Weizenbaum in the mid-1960s to demonstrate how seemingly “intelligent”
behaviour could be mimicked by very simple pattern-matching, it shocked even
him with how much ordinary people were taken in by the illusion. It is
probably best known in conjunction with its DOCTOR script, which allows it to
act like a Rogerian psychotherapist (a version of this can be invoked in the
Emacs text editor with “M-x doctor
”). One user was
reportedly so affected by the program that he requested that Weizenbaum give
him some privacy to discuss his issues with the doctor!
The program works by simple pattern matching. The user's input is checked against a list of pre-defined patterns, and if there's a match, a corresponding output is returned. Eliza also has some facilities for extracting content from the input and using it in the reply (e.g. “I need a vacation” might result in “How would you feel if you got a vacation?”). The final bit of finesse is a rudimentary memory, so that it can bring up past topics again if it doesn't know what to say (Hector does not do this).
Hector is a Haskell reimplementation of a very similar system. It is written in a “literate” style, and should be simple to follow along with. Hector is not a doctor like Eliza — instead, he's more of a grizzled old programming veteran, having got his start feeding punchcards into a mainframe in his undergraduate years. He can't help you with relationships or inferiority complexes, but he'll be happy to discuss your programming problems with you.