Hacker News new | past | comments | ask | show | jobs | submit login
Kent Pitman's Lisp Eliza from MIT-AI's ITS History Project (sites.google.com)
66 points by abrax3141 8 months ago | hide | past | favorite | 15 comments



Evergreen quote from TFA:

> KMP provided some additional thoughts on his ELIZA:

> "The thing about the DOCTOR program, while it was quite elaborate, was that it sort of missed the point of what Weizenbaum was trying to say. It's not that I didn't understand him, but it took me a long time to really come to viscerally understand the seriousness of his point. He said that (paraphrasing, maybe badly, from memory) long before we got to real AI, we would get to things that seemed smart but weren't, and we would overly trust systems that were not really smart. He was, for example, very worried about computerized launch of nuclear missiles using what was then thought to be AI. But the point of the original ELIZA was not to BE elaborate, it was to be simple, and to show how even a tiny, tiny program could seem smart. It was hard not to think it could be smarter if it were not so tiny, but that misses the point, which was about how easily we were confused, not about how much more effectively we could be confused if more energy were put in. So whether my DOCTOR or any other was making the right point was hard to say. My guess is not."


Did Kent write the original first ANIMAL, or a version in Lisp? I remember that by 1979 there were many versions in many languages on many computers.


Yes, it's discussed here in the comments.


I don't see anything indicating the idea for ANIMAL originated with Kent, only that he implemented a version.


I definitely did not originate the ANIMAL game notion. I probably mentioned that in my LispNYC talk recently, but also it's discussed as an incidental matter in a blog post from 2010 where I was reviewing Jaron Lanier's "You Are Not a Gadget": https://web.archive.org/web/20131102031307/http://open.salon...

TL;DR I learned to program in a world almost devoid of computers, but we had occasional magazines and books that talked about what computers would do and I saw mention of an ANIMAL program and thought it'd be fun to write one. My first attempt was in BASIC, and the difficulties I had primed me to like Lisp when it came along. A long series of implementations resulted from that, and there's a Lisp origin story for me that you should see the LispNYC talk to get in fuller form, but it was important to me in how I ended up a Lisper at all.


Is that that database game where you have to think of an animal, and the computer asks you yes/no questions to guess it? I played around with such a thing on 8 bit micros.


Kent Pitman also wrote the ANIMAL guessing game in spring of 1978:

https://github.com/PDP-10/its/blob/master/src/games/animal.1...

https://github.com/PDP-10/its/blob/master/src/games/animal.r...

It would guess your animal by asking you yes or no questions that distinguish it from other animals in a tree, and if it couldn't guess it, then it asked you how it can tell the difference between your animal and the animal it guessed, then it would parse the sentence and put it into the tree at that node as a question, thus learning to guess your animal next time.

https://github.com/PDP-10/its/blob/master/src/games/animal.o...

https://github.com/PDP-10/its/blob/master/src/games/animal.s...

It had an extensive list of foul language words:

https://github.com/PDP-10/its/blob/master/src/games/animal.1...

My animal was the Pope, and my distinguishing question had to do with shitting in the woods, and after being warned I continued to use foul language, so it got mad at me, and sent email to KMP and cc'd me, telling on me for saying terrible things to it:

    (DEFUN HANDLE-FOUL-LANGUAGE (()) ;REPLY
           (OUTPUT-BIND
            (DISPLAY
         (CASEQ *FOUL-FLAG*
               ((0) '"Please watch your language.")
               ((1) '"Hey! Watch your tongue. I warned you before.")
               ((2) '"Will you watch it with the dirty talk? Thanks.")
               (T   '"Aw, come on. Stop talking so dirty...")))
        (SETQ *FOUL-FLAG* T)
        (SETQ *APOLOGY-FLAG* NIL)
        (SETQ *FOUL-COUNT* (1+ *FOUL-COUNT*))
        (COND ((> *FOUL-COUNT* *FOUL-COUNT-MAX*)
               (SEND-MAIL `((TO: KMP)
                    (CC: ,(STATUS USERID))
                    (SUBJECT: (,(CONCAT *PLAYER-NAME* '|'s|)
                           "Foul language!")))
                  `(,*FIRST-NAME* "said terrible things to me.
                    I'm going to be pretty mad at"
                    ,*PLAYER-OBJECT-PRONOUN* "until"
                    ,*PLAYER-SUBJECT-PRONOUN* "apologizes."))
               (REMEMBER 'FOUL)
               (DISPLAY '"I give up. You're hopeless!")
               (SUICIDE)))))
And it would not play with me until I apologized:

https://github.com/PDP-10/its/blob/master/src/games/animal.1...

    (DEF-QUESTION MAD (X) ()
         IF   (MATCHES X (ARE YOU (*) (?= ANGRY?) (?= PREPOSITION?) ME (*))
                 (ARE YOU (*) (?= ANGRY?)))
         THEN (COND (*FOUL-FLAG*
             (COND (*FORGIVE-FLAG*
                (COND (*APOLOGY-FLAG*
                       (DISPLAY '"Yes, I am still a bit mad."))
                      (T
                       (DISPLAY '"Yes, I am very mad. Your
                          language has really been in the
                          gutter today."))))
                   (T
                (DISPLAY '"Yes. Your language has been atrocious."))))
            (*FORGIVE-FLAG*
             (DISPLAY '"No, but I was earlier!"))
            (*APOLOGY-FLAG*
             (DISPLAY '"You should really see someone about this. No,
                    I'm really not mad at you. I wish you'd stop
                    apologizing for nothing..."))
            (T
             (DISPLAY '"I have nothing to be mad at you for.")))
              T)
https://github.com/PDP-10/its/blob/master/src/games/animal.1...

    (DEFUN RECEIVE-APOLOGY ()
           (COND ((AND (NOT *FOUL-FLAG*) (NOT *FORGIVE-FLAG*))
              (COND ((NOT *APOLOGY-FLAG*)
                 (DISPLAY
                  (SELECT-ONE-OF '("I don't know why you are apologizing."
                           "You don't owe me an apology."))))
                (T
                 (DISPLAY
                  (SELECT-ONE-OF '("All right! Stop apologizing."
                           "You got some sort of guilt complex?"
                           "Perhaps you should see a priest.")))))
              (SETQ *APOLOGY-FLAG* T))
             ((NOT *FOUL-FLAG*)
              (DISPLAY
               (SELECT-ONE-OF '("I forgave you already!"
                    "Yes, yes. I forgave you!")))
              (SETQ *APOLOGY-FLAG* T))
             ((NOT *FORGIVE-FLAG*)
              (DISPLAY '"All right. I accept your apology...")
              (SETQ *FOUL-FLAG* NIL)
              (SETQ *FORGIVE-FLAG* T)
              (FORGIVE 'FOUL '"using foul language"))
             ((NOT *APOLOGY-FLAG*)
              (DISPLAY '"Sorry, I gave you your chance and you blew it.")
              (SETQ *APOLOGY-FLAG* T))
             (T
              (DISPLAY
               (SELECT-ONE-OF
            '("OK. Since you're being so insistent. I accept
                   your apology"
              "OK. That sounds sincere to me.")))
              (SETQ *APOLOGY-FLAG* NIL)
              (SETQ *FOUL-FLAG*    NIL)
              (SETQ *FORGIVE-FLAG* T)
              (FORGIVE 'FOUL '"using foul language"))))
https://github.com/PDP-10/its/blob/master/src/games/animal.1...

       (COND ((SETQ *FOUL-FLAG* (REMEMBER? 'FOUL))
              (DISPLAY '"By the way -- we weren't
                 on good terms the last time we played.
                 I hope you have learned your lesson now.")))
I finally sent KMP and ANIMAL email sincerely apologizing:

https://github.com/PDP-10/its/blob/master/src/games/animal.b...

    Date: 9 July 1982 03:49-EDT
    From: Donald E. Hopkins <A2DEH at MIT-MC>
    To: ANIMAL at MIT-MC
    cc: KMP at MIT-MC

        Aww, gee... I'm sorry... I didn't realy mean it. I was just
    asking questions pertaining to popes and bears and woods, and you
    got all excited... Some AI program you are if you don't know what
    religion a bear is or where the Pope ... Ahem... As I was saying,
    I'm sorry and I will never do it again.
        -Don
It tried to guess your pronoun from your name, but it would ask you if it couldn't guess.

https://github.com/PDP-10/its/blob/master/src/games/animal.1...


But ANIMAL was just an expert system. Today LLM-based chatbots can do the same thing, except for remembering elements of your conversation the next time around, or sending email and auto-banning you.

And it just costs a few billion dollars, some petabytes of training data and zetaflops of compute to do it, rather than a couple of graduate student-weeks to code it all by hand.

There has been so much progress.


How did you manage to keep such a tiny digital artifact like this email over all these decades…? I imagine that must mean a near-herculean backup effort at least for the pre-Dropbox decades?


I've lost more than I saved, but Lars Brinkhoff and others have restored lots of stuff off of old backup tapes!

ITS had no file security or privacy, and users were encouraged to learn to use the system and programming by snooping around in other people's directories and email.

I remembered having run across a Universal Turing Machine written in TECO in Marvin Minsky's home directory on MIT-AI, but didn't squirrel away a copy. I mentioned it Hacker News years ago, and Howard Ancell (HGA@MIT-AI) saw it and gave me a copy he saved!

https://news.ycombinator.com/item?id=10161002

DonHopkins on Sept 2, 2015 | parent | context | favorite | on: The most obsolete infrastructure money could buy –...

I remember running across a Turing machine emulator implemented in TECO in Minsky's home directory that I'd REALLY love to get ahold of.

hga on Sept 2, 2015 [–]

Ask and yea shall receive:

  MSG: APL    1     
  DISTRIB:  *BBOARD
  EXPIRES: 03/17/81 23:08:54
  MINSKY@MIT-MC 03/11/81 23:08:54 Re: too-short programs
  APL is compact, I suppose.  So is TECO.  When I wrote the following
  Universal Turing Machine, which works, I actually understood it.
[ I've interpolated the non-printing characters as displayed by (Gnu) EMACS, escape is ^], ^^ is one character, as is \356: ]

  i1Aul qq+^^0:iqm^[29iiq\356y0L1 00L1 11L2 A1L1
  y0L1 0yR2 1AR2 AyR6 yyL3 00L0 1AL3 A1L4 yyL4 0yR5 11L7 A1L4
  yyR5 0yL3 1AR5 A1R5 yyR6 0AL3 1AR6 A1R6 y0R7 0yR6 11R7 A0R2
  ^[j<sR^[;-d-2ciql-^^^[ci"ed^^^[cii^[ciuq'^[>
  j<sL^[;-d-2ciql-^^^[ci"ed^^^[cii-2c^[ciuq'^[>jxblx1lx2lx3lx4lx5lx6lx7hk
  iyyAyyAyy^[32<i0^[>ji110101110000010011011^[ 1uq<htmbqq=>

  I do not advise attempting to understand this code, which is
  almost as bad as that for the Universal Turing machine.
ADDED: or http://ancell-ent.com/share/minsky-TECO-turing-machine.txt

Please ack receipt of this and/or send me email (in my HN info); for others, note this is ITS TECO, which I was told was by far the most powerful version of it (fortunately, by the time I showed up learning it was no longer really necessary).

DonHopkins on Sept 3, 2015 | parent [–]

OOP ACK! It was a shot in the dark, but I am SO GLAD I asked!!! Thank you Harold! It looks just like I remember. ;)


What Lisp is that? Lisp 1.5?


MACLISP ("Man And Computer" Lisp, not to be confused with Macintosh Common Lisp, which came years later!)

https://en.wikipedia.org/wiki/Maclisp

https://gunkies.org/wiki/Project_MAC

https://en.wikipedia.org/wiki/MIT_Computer_Science_and_Artif...


There was also rumored to be a seduction script. Has anyone found that?


Here's the source for DOCTOR from ITS -- it has a much less extensive set of foul words and doesn't get insulted:

https://github.com/PDP-10/its/blob/master/src/games/doc.102

I wrote this recently about Kent Pitman's work on Lisp, the MIT-AI Lab's ITS machines, Doctor, and Kenneth Colby's "PARRY" (the paranoid patient):

https://news.ycombinator.com/item?id=38402813

[...]

And here's what happened with he (manually by typing) hooked it up with Kenneth Colby's "PARRY" (the paranoid patient):

https://www.maclisp.info/pitmanual/funnies.html

>Parrying Programs

>I didn't write the original ELIZA program, although my Lisp class was taught by Joseph Weizenbaum, who did. I later wrote a very elaborate program of similar kind, which I just called DOCTOR, in order to play with some of the ideas.

>At some point, I noticed there was a program at Stanford called PARRY (the paranoid patient), by Kenneth Colby. I understand from Wikipedia's PARRY entry that Weizenbaum's ELIZA and PARRY were connected at one point, although I never saw that. I never linked PARRY with my DOCTOR directly, but I did once do it indirectly through a manual typist. Part of my record of this exchange was garbled, but this is a partial transcript, picking up in the middle. Mostly it just shows PARRY was a better patient than my DOCTOR program was a doctor.

>I have done light editing to remove the typos we made (rubbed out characters were echoed back in square brackets).

>Also, I couldn't find documentation to confirm this, but my belief has always been that the numeric values after each line are PARRY's level of Shame (SH), Anger (AN), Fear (FR), Disgust (DS), Insecurity (IN), and Joy (J).—KMP

[...]

Here's what happened when I hooked up the output of RMS to the input of EMACS DOCTOR:

http://www.art.net/studios/hackers/hopkins/Don/text/rms-vs-d...

Here's some more discussion about having a TURIST account ITS:

https://news.ycombinator.com/item?id=13518273

And the MIT-AI Lab Tourist Policy:

https://donhopkins.medium.com/mit-ai-lab-tourist-policy-f73b...

Which Jerry Pournelle got kicked off the ARPANET for blatantly violating by being a entitled drunken abusive pain in the ass to lab members, as well as abusing the ARPANET and MIT computers for commercial purposes:

https://news.ycombinator.com/item?id=15206151

http://www.art.net/~hopkins/Don/text/pourne-smut.html

"I find this thoroughly distasteful. If you have some authority to order me off the net, do so. If not, leave me alone." -Jerry Pournelle

"One thing that is known about ARPA: you can be heaved off it for supporting the policies of the Department of Defense. Of course that was intended to anger me. If you have an ARPA account, please tell CSTACY that he was successful; now let us see if my Pentagon friends can upset him. Or perhaps some reporter friends. Or both., Or even the House Armed Services Committee." -Jerry Pournelle


I read the Pournelle threads linked. To save others the time: it's clear from the messages that the people writing them didn't like him. It's not clear to me what he did that they considered abuse. The most concrete things: something about trying to access MILNET apparently unsuccessfully; writing in Byte about his experience with the lab guest account; saying ARPANET instead of internet.

I can believe the guy was abrasive, but I regret wasting the time trying to find out specifics.




Consider applying for YC's W25 batch! Applications are open till Nov 12.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: