Annotation of 43BSD/contrib/emacs/lisp/doctor.el, revision 1.1.1.1

1.1       root        1: ;; Psychological help for frustrated users.
                      2: ;; Copyright (C) 1985 Sidney Markowitz and Richard M. Stallman
                      3: 
                      4: ;; This file is part of GNU Emacs.
                      5: 
                      6: ;; GNU Emacs is distributed in the hope that it will be useful,
                      7: ;; but WITHOUT ANY WARRANTY.  No author or distributor
                      8: ;; accepts responsibility to anyone for the consequences of using it
                      9: ;; or for whether it serves any particular purpose or works at all,
                     10: ;; unless he says so in writing.  Refer to the GNU Emacs General Public
                     11: ;; License for full details.
                     12: 
                     13: ;; Everyone is granted permission to copy, modify and redistribute
                     14: ;; GNU Emacs, but only under the conditions described in the
                     15: ;; GNU Emacs General Public License.   A copy of this license is
                     16: ;; supposed to have been given to you along with GNU Emacs so you
                     17: ;; can know your rights and responsibilities.  It should be in a
                     18: ;; file named COPYING.  Among other things, the copyright notice
                     19: ;; and this notice must be preserved on all copies.
                     20: 
                     21: 
                     22: (defun cadr (x) (car (cdr x)))
                     23: (defun caddr (x) (car (cdr (cdr x))))
                     24: (defun cddr (x) (cdr (cdr x)))
                     25: 
                     26: (defun member (x y)
                     27:   "Like memq, but uses  equal  for comparison"
                     28:   (while (and y (not (equal x (car y))))
                     29:     (setq y (cdr y)))
                     30:   y)
                     31: 
                     32: (defun random-range (top)
                     33:   "Return a random nonnegative integer less than TOP."
                     34:   (% (logand (random) 0777777) top))
                     35: 
                     36: (defun // (x) x)
                     37: 
                     38: (defmacro $ (what)
                     39:   "quoted arg form of doctor-$"
                     40:   (list 'doctor-$ (list 'quote what)))
                     41: 
                     42: (defun doctor-$ (what)
                     43:   "Return the car of a list, rotating the list each time"
                     44:   (let* ((vv (symbol-value what))
                     45:        (first (car vv))
                     46:        (ww (append (cdr vv) (list first))))
                     47:     (set what ww)
                     48:     first))
                     49: 
                     50: (defvar doctor-mode-map nil)
                     51: (if doctor-mode-map
                     52:     nil
                     53:   (setq doctor-mode-map (make-sparse-keymap))
                     54:   (define-key doctor-mode-map "\n" 'doctor-read-print)
                     55:   (define-key doctor-mode-map "\r" 'doctor-ret-or-read))
                     56: 
                     57: (defun doctor-mode ()
                     58:   "Major mode for running the Doctor (Eliza) program.
                     59: Like Text mode with Auto Fill mode
                     60: except that RET when point is after a newline, or LFD at any time,
                     61: reads the sentence before point, and prints the Doctor's answer."
                     62:   (interactive)
                     63:   (text-mode)
                     64:   (make-doctor-variables)
                     65:   (use-local-map doctor-mode-map)
                     66:   (setq major-mode 'doctor-mode)
                     67:   (setq mode-name "Doctor")
                     68:   (turn-on-auto-fill)
                     69:   (doctor-type '(i am the psychotherapist \.
                     70:                 ($ please) ($ describe) your ($ problems) \.
                     71:                 each time you are finished talking, type \R\E\T twice \.))
                     72:   (insert "\n"))
                     73: 
                     74: (defun make-doctor-variables ()
                     75:   (make-local-variable 'monosyllables)
                     76:   (setq monosyllables
                     77:        "
                     78:      Your attitude at the end of the session was wholly unacceptable.
                     79:      Please try to come back next time with a willingness to speak more
                     80:      freely. If you continue to refuse to talk openly, there is little
                     81:      I can do to help!
                     82: ")
                     83:   (make-local-variable 'typos)
                     84:   (setq typos
                     85:        (mapcar (function (lambda (x)
                     86:                            (put (car x) 'doctor-correction  (cadr x))
                     87:                            (put (cadr x) 'doctor-expansion (caddr x))
                     88:                            (car x)))
                     89:                '((theyll they\'ll (they will))
                     90:                  (theyre they\'re (they are))
                     91:                  (hes he\'s (he is))
                     92:                  (he7s he\'s (he is))
                     93:                  (im i\'m (you are))
                     94:                  (i7m i\'m (you are))
                     95:                  (isa is\ a (is a))
                     96:                  (thier their (their))
                     97:                  (dont don\'t (do not))
                     98:                  (don7t don\'t (do not))
                     99:                  (you7re you\'re (i am))
                    100:                  (you7ve you\'ve (i have))
                    101:                  (you7ll you\'ll (i will)))))
                    102:   (make-local-variable 'found)
                    103:   (setq found nil)
                    104:   (make-local-variable 'owner)
                    105:   (setq owner nil)
                    106:   (make-local-variable 'history)
                    107:   (setq history nil)
                    108:   (make-local-variable '*debug*)
                    109:   (setq *debug* nil)
                    110:   (make-local-variable 'inter)
                    111:   (setq inter
                    112:        '((well\,)
                    113:          (hmmm \.\.\.\ so\,)
                    114:          (so)
                    115:          (\.\.\.and)
                    116:          (then)))
                    117:   (make-local-variable 'continue)
                    118:   (setq continue
                    119:        '((continue)
                    120:          (proceed)
                    121:          (go on)
                    122:          (keep going) ))
                    123:   (make-local-variable 'relation)
                    124:   (setq relation
                    125:        '((your relationship with)
                    126:          (something you remember about)
                    127:          (your feelings toward)
                    128:          (some experiences you have had with)
                    129:          (how you feel about)))
                    130:   (make-local-variable 'fears)
                    131:   (setq fears '( (($ whysay) you are ($ afraidof) (// feared) \?)
                    132:                 (you seem terrified by (// feared) \.)
                    133:                 (when did you first feel ($ afraidof) (// feared) \?) ))
                    134:   (make-local-variable 'sure)
                    135:   (setq sure '((sure)(positive)(certain)(absolutely sure)))
                    136:   (make-local-variable 'afraidof)
                    137:   (setq afraidof '( (afraid of) (frightened by) (scared of) ))
                    138:   (make-local-variable 'areyou)
                    139:   (setq areyou '( (are you)(have you been)(have you been) ))
                    140:   (make-local-variable 'isrelated)
                    141:   (setq isrelated '( (has something to do with)(is related to)
                    142:                     (could be the reason for) (is caused by)(is because of)))
                    143:   (make-local-variable 'arerelated)
                    144:   (setq arerelated '((have something to do with)(are related to)
                    145:                     (could have caused)(could be the reason for) (are caused by)
                    146:                     (are because of)))
                    147:   (make-local-variable 'moods)
                    148:   (setq moods '( (($ areyou)(// found) often \?)
                    149:                 (what causes you to be (// found) \?)
                    150:                 (($ whysay) you are (// found) \?) ))
                    151:   (make-local-variable 'maybe)
                    152:   (setq maybe
                    153:        '((maybe)
                    154:          (perhaps)
                    155:          (possibly)))
                    156:   (make-local-variable 'whatwhen)
                    157:   (setq whatwhen
                    158:        '((what happened when)
                    159:          (what would happen if)))
                    160:   (make-local-variable 'hello)
                    161:   (setq hello
                    162:        '((how do you do \?) (hello \.) (howdy!) (hello \.) (hi \.) (hi there \.)))
                    163:   (make-local-variable 'drnk)
                    164:   (setq drnk
                    165:        '((do you drink a lot of (// found) \?)
                    166:          (do you get drunk often \?)
                    167:          (($ describe) your drinking habits \.) )) 
                    168:   (make-local-variable 'drugs)
                    169:   (setq drugs '( (do you use (// found) often \?)(($ areyou)
                    170:                                                 addicted to (// found) \?)(do you realize that drugs can
                    171:                                                 be very harmful \?)(($ maybe) you should try to quit using (// found)
                    172:                                                 \.)))
                    173:   (make-local-variable 'whywant)
                    174:   (setq whywant '( (($ whysay) (// subj) might ($ want) (// obj) \?)
                    175:                   (how does it feel to want \?)
                    176:                   (why should (// subj) get (// obj) \?)
                    177:                   (when did (// subj) first ($ want) (// obj) \?)
                    178:                   (($ areyou) obsessed with (// obj) \?)
                    179:                   (why should i give (// obj) to (// subj) \?)
                    180:                   (have you ever gotten (// obj) \?) ))
                    181:   (make-local-variable 'canyou)
                    182:   (setq canyou '((of course i can \.)
                    183:                 (why should i \?)
                    184:                 (what makes you think i would even want to \?)
                    185:                 (i am the doctor\, i can do anything i damn please \.)
                    186:                 (not really\, it\'s not up to me \.)
                    187:                 (depends\, how important is it \?)
                    188:                 (i could\, but i don\'t think it would be a wise thing to do \.)
                    189:                 (can you \?)
                    190:                 (maybe i can\, maybe i can\'t \.\.\.)
                    191:                 (i don\'t think i should do that \.)))
                    192:   (make-local-variable 'want)
                    193:   (setq want '( (want) (desire) (wish) (want) (hope) ))
                    194:   (make-local-variable 'shortlst)
                    195:   (setq shortlst
                    196:        '((can you elaborate on that \?)
                    197:          (($ please) continue \.)
                    198:          (go on\, don\'t be afraid \.)
                    199:          (i need a little more detail please \.)
                    200:          (you\'re being a bit brief\, ($ please) go into detail \.)
                    201:          (can you be more explicit \?)
                    202:          (and \?)
                    203:          (($ please) go into more detail \?)
                    204:          (you aren\'t being very talkative today\!)
                    205:          (is that all there is to it \?)
                    206:          (why must you respond so briefly \?)))
                    207: 
                    208:   (make-local-variable 'famlst)
                    209:   (setq famlst
                    210:        '((tell me ($ something) about (// owner) family \.)
                    211:          (you seem to dwell on (// owner) family \.)
                    212:          (($ areyou) hung up on (// owner) family \?)))
                    213:   (make-local-variable 'huhlst)
                    214:   (setq huhlst
                    215:        '((($ whysay)(// sent) \?)
                    216:          (is it because of ($ things) that you say (// sent) \?) ))
                    217:   (make-local-variable 'longhuhlst)
                    218:   (setq longhuhlst
                    219:        '((($ whysay) that \?)
                    220:          (i don\'t understand \.)
                    221:          (($ thlst))
                    222:          (($ areyou) ($ afraidof) that \?)))
                    223:   (make-local-variable 'feelings)
                    224:   (setq feelings-about
                    225:        '((feelings about)
                    226:          (aprehensions toward)
                    227:          (thoughts on)
                    228:          (emotions toward)))
                    229:   (make-local-variable 'random)
                    230:   (setq random-adjective
                    231:        '((vivid)
                    232:          (emotionally stimulating)
                    233:          (exciting)
                    234:          (boring)
                    235:          (interesting)
                    236:          (recent)
                    237:          (random)   ;How can we omit this?
                    238:          (unusual)
                    239:          (shocking)
                    240:          (embarrassing)))
                    241:   (make-local-variable 'whysay)
                    242:   (setq whysay
                    243:        '((why do you say)
                    244:          (what makes you believe)
                    245:          (are you sure that)
                    246:          (do you really think)
                    247:          (what makes you think) ))
                    248:   (make-local-variable 'isee)
                    249:   (setq isee
                    250:        '((i see \.\.\.)
                    251:          (yes\,)
                    252:          (i understand \.)
                    253:          (oh \.) ))
                    254:   (make-local-variable 'please)
                    255:   (setq please 
                    256:        '((please\,)
                    257:          (i would appreciate it if you would)
                    258:          (perhaps you could)
                    259:          (please\,)
                    260:          (would you please)
                    261:          (why don\'t you)
                    262:          (could you)))
                    263:   (make-local-variable 'bye)
                    264:   (setq bye
                    265:        '((my secretary will send you a bill \.)
                    266:          (bye bye \.)
                    267:          (see ya \.)
                    268:          (ok\, talk to you some other time \.)
                    269:          (talk to you later \.)
                    270:          (ok\, have fun \.)
                    271:          (ciao \.)))
                    272:   (make-local-variable 'something)
                    273:   (setq something
                    274:        '((something)
                    275:          (more)
                    276:          (how you feel)))
                    277:   (make-local-variable 'things)
                    278:   (setq things 
                    279:        '(;(your interests in computers)   ;; let's make this less computer oriented
                    280:          ;(the machines you use)
                    281:          (your plans)
                    282:          ;(your use of computers)
                    283:          (your life)
                    284:          ;(other machines you use)
                    285:          (the people you hang around with)
                    286:          ;(computers you like)
                    287:          (problems at school)
                    288:          (any hobbies you have)
                    289:          ;(other computers you use)
                    290:          (your sex life)
                    291:          (hangups you have)
                    292:          (your inhibitions)
                    293:          (some problems in your childhood)
                    294:          ;(knowledge of computers)
                    295:          (some problems at home)))
                    296:   (make-local-variable 'describe)
                    297:   (setq describe
                    298:        '((describe)
                    299:          (tell me about)
                    300:          (talk about)
                    301:          (discuss)
                    302:          (tell me more about)
                    303:          (elaborate on)))
                    304:   (make-local-variable 'ibelieve)
                    305:   (setq ibelieve 
                    306:        '((i believe) (i think) (i have a feeling) (it seems to me that)
                    307:          (it looks like)))
                    308:   (make-local-variable 'problems)
                    309:   (setq problems '( (problems)
                    310:                    (inhibitions)
                    311:                    (hangups)
                    312:                    (difficulties)
                    313:                    (anxieties)
                    314:                    (frustrations) ))
                    315:   (make-local-variable 'bother)
                    316:   (setq bother
                    317:        '((does it bother you that)
                    318:          (are you annoyed that)
                    319:          (did you ever regret)
                    320:          (are you sorry)
                    321:          (are you satisfied with the fact that)))
                    322:   (make-local-variable 'machlst)
                    323:   (setq machlst 
                    324:        '((you have your mind on (// found) \, it seems \.)
                    325:          (you think too much about  (// found) \.)
                    326:          (you should try taking your mind off of (// found)\.)
                    327:          (are you a computer hacker \?)))
                    328:   (make-local-variable 'qlist)
                    329:   (setq qlist
                    330:        '((what do you think \?)
                    331:          (i\'ll ask the questions\, if you don\'t mind!)
                    332:          (i could ask the same thing myself \.)
                    333:          (($ please) allow me to do the questioning \.)
                    334:          (i have asked myself that question many times \.)
                    335:          (($ please) try to answer that question yourself \.)))
                    336:   (make-local-variable 'elist)
                    337:   (setq elist
                    338:        '((($ please) try to calm yourself \.)
                    339:          (you seem very excited \. relax \. ($ please) ($ describe) ($ things)
                    340:               \.)
                    341:          (you\'re being very emotional \. calm down \.)))
                    342:   (make-local-variable 'foullst)
                    343:   (setq foullst
                    344:        '((($ please) watch your tongue!)
                    345:          (($ please) avoid such unwholesome thoughts \.)
                    346:          (($ please) get your mind out of the gutter \.)
                    347:          (such lewdness is not appreciated \.)))
                    348:   (make-local-variable 'deathlst)
                    349:   (setq deathlst
                    350:        '((this is not a healthy way of thinking \.)
                    351:          (($ bother) you\, too\, may die someday \?)
                    352:          (i am worried by your obssession with this topic!)
                    353:          (did you watch a lot of crime and violence on television as a child \?))
                    354:        )
                    355:   (make-local-variable 'sexlst)
                    356:   (setq sexlst 
                    357:        '((($ areyou) ($ afraidof) sex \?)
                    358:          (($ describe)($ something) about your sexual history \.)
                    359:          (($ please)($ describe) your sex life \.\.\.)
                    360:          (($ describe) your ($ feelings-about) your sexual partner \.)
                    361:          (($ describe) your most ($ random-adjective) sexual experience \.)
                    362:          (($ areyou) satisfied with (// lover) \.\.\. \?)))
                    363:   (make-local-variable 'neglst)
                    364:   (setq neglst
                    365:        '((why not \?)
                    366:          (($ bother) i ask that \?)
                    367:          (why not \?)
                    368:          (why not \?)
                    369:          (how come \?)
                    370:          (($ bother) i ask that \?)))
                    371:   (make-local-variable 'beclst)
                    372:   (setq beclst '(
                    373:                 (is it because (// sent) that you came to me \?)
                    374:                 (($ bother)(// sent) \?)
                    375:                 (when did you first know that (// sent) \?)
                    376:                 (is the fact that (// sent) the real reason \?)
                    377:                 (does the fact that (// sent) explain anything else \?)
                    378:                 (($ areyou)($ sure)(// sent) \? ) ))
                    379:   (make-local-variable 'shortbeclst)
                    380:   (setq shortbeclst '(
                    381:                      (($ bother) i ask you that \?)
                    382:                      (that\'s not much of an answer!)
                    383:                      (($ inter) why won\'t you talk about it \?)
                    384:                      (speak up!)
                    385:                      (($ areyou) ($ afraidof) talking about it \?)
                    386:                      (don\'t be ($ afraidof) elaborating \.)
                    387:                      (($ please) go into more detail \.)))
                    388:   (make-local-variable 'thlst)
                    389:   (setq thlst '(
                    390:                (($ maybe)($ things)($ arerelated) this \.)
                    391:                (is it because of ($ things) that you are going through all this \?)
                    392:                (how do you reconcile ($ things) \? )
                    393:                (($ maybe) this ($ isrelated)($ things) \?) ))
                    394:   (make-local-variable 'remlst)
                    395:   (setq remlst '( (earlier you said ($ history) \?)
                    396:                  (you mentioned that ($ history) \?)
                    397:                  (($ whysay)($ history) \? ) ))
                    398:   (make-local-variable 'toklst)
                    399:   (setq toklst
                    400:        '((is this how you relax \?)
                    401:          (how long have you been smoking       grass \?)
                    402:          (($ areyou) ($ afraidof) of being drawn to using harder stuff \?)))
                    403:   (make-local-variable 'states)
                    404:   (setq states
                    405:        '((do you get (// found) often \?)
                    406:          (do you enjoy being (// found) \?)
                    407:          (what makes you (// found) \?)
                    408:          (how often ($ areyou)(// found) \?)
                    409:          (when were you last (// found) \?)))
                    410:   (make-local-variable 'replist)
                    411:   (setq replist 
                    412:        '((i . (you))
                    413:          (my . (your))
                    414:          (me . (you))
                    415:          (you . (me))
                    416:          (your . (my))
                    417:          (mine . (yours))
                    418:          (yours . (mine))
                    419:          (our . (your))
                    420:          (ours . (yours))
                    421:          (we . (you))
                    422:          (dunno . (do not know))
                    423: ;;       (yes . ())
                    424:          (no\, . ())
                    425:          (yes\, . ())
                    426:          (ya . (i))
                    427:          (aint . (am not))
                    428:          (wanna . (want to))
                    429:          (gimme . (give me))
                    430:          (gotta . (have to))
                    431:          (gonna . (going to))
                    432:          (never . (not ever))
                    433:          (doesn\'t . (does not))
                    434:          (don\'t . (do not))
                    435:          (aren\'t . (are not))
                    436:          (isn\'t . (is not))
                    437:          (won\'t . (will not))
                    438:          (can\'t . (cannot))
                    439:          (haven\'t . (have not))
                    440:          (i\'m . (you are))
                    441:          (ourselves . (yourselves))
                    442:          (myself . (yourself))
                    443:          (yourself . (myself))
                    444:          (you\'re . (i am))
                    445:          (you\'ve . (i have))
                    446:          (i\'ve . (you have))
                    447:          (i\'ll . (you will))
                    448:          (you\'ll . (i shall))
                    449:          (i\'d . (you would))
                    450:          (you\'d . (i would))
                    451:          (here . (there))
                    452:          (please . ())
                    453:          (eh\, . ())
                    454:          (eh . ())
                    455:          (oh\, . ())
                    456:          (oh . ())
                    457:          (shouldn\'t . (should not))
                    458:          (wouldn\'t . (would not))
                    459:          (won\'t . (will not))
                    460:          (hasn\'t . (has not))))
                    461:   (make-local-variable 'stallmanlst)
                    462:   (setq stallmanlst '(
                    463:                      (($ describe) your ($ feelings-about) him \.)
                    464:                      (($ areyou) a friend of Stallman \?)
                    465:                      (($ bother) Stallman is ($ random-adjective) \?)
                    466:                      (($ ibelieve) you are ($ afraidof) him \.)))
                    467:   (make-local-variable 'schoollst)
                    468:   (setq schoollst '(
                    469:                    (($ describe) your (// found) \.)
                    470:                    (($ bother) your grades could ($ improve) \?)
                    471:                    (($ areyou) ($ afraidof) (// found) \?)
                    472:                    (($ maybe) this ($ isrelated) to your attitude \.)
                    473:                    (($ areyou) absent often \?)
                    474:                    (($ maybe) you should study ($ something) \.)))
                    475:   (make-local-variable 'improve)
                    476:   (setq improve '((improve) (be better) (be improved) (be higher)))
                    477:   (make-local-variable 'elizalst)
                    478:   (setq elizalst '(
                    479:                   (($ areyou) ($ sure) \?)
                    480:                   (($ ibelieve) you have ($ problems) with (// found) \.)
                    481:                   (($ whysay) (// sent) \?)))
                    482:   (make-local-variable 'sportslst)
                    483:   (setq sportslst '(
                    484:                    (tell me ($ something) about (// found) \.)
                    485:                    (($ describe) ($ relation) (// found) \.)
                    486:                    (do you find (// found) ($ random-adjective) \?)))
                    487:   (make-local-variable 'mathlst)
                    488:   (setq mathlst '(
                    489:                  (($ describe) ($ something) about math \.)
                    490:                  (($ maybe) your ($ problems) ($ arerelated) (// found) \.)
                    491:                  (i do\'nt know much (// found) \, but ($ continue)
                    492:                     anyway \.)))
                    493:   (make-local-variable 'zippylst)
                    494:   (setq zippylst '(
                    495:                   (($ areyou) Zippy \?)
                    496:                   (($ ibelieve) you have some serious ($ problems) \.)
                    497:                   (($ bother) you are a pinhead \?)))
                    498:   (make-local-variable 'chatlst)
                    499:   (setq chatlst '(
                    500:                  (($ maybe) we could chat \.)
                    501:                  (($ please) ($ describe) ($ something) about chat mode \.)
                    502:                  (($ bother) our discussion is so ($ random-adjective) \?)))
                    503:   (make-local-variable 'abuselst)
                    504:   (setq abuselst '(
                    505:                   (($ please) try to be less abusive \.)
                    506:                   (($ describe) why you call me (// found) \.)
                    507:                   (i\'ve had enough of you!)))
                    508:   (make-local-variable 'abusewords)
                    509:   (setq abusewords '(boring bozo clown clumsy cretin dumb dummy
                    510:                            fool foolish gnerd gnurd idiot jerk
                    511:                            lose loser louse lousy luse luser
                    512:                            moron nerd nurd oaf oafish reek
                    513:                            stink stupid tool toolish twit))
                    514:   (make-local-variable 'howareyoulst)
                    515:   (setq howareyoulst  '((how are you) (hows it going) (hows it going eh)
                    516:                        (how\'s it going) (how\'s it going eh) (how goes it)
                    517:                        (whats up) (whats new) (what\'s up) (what\'s new)
                    518:                        (howre you) (how\'re you) (how\'s everything)
                    519:                        (how is everything) (how do you do)
                    520:                        (how\'s it hanging) (que pasa)
                    521:                        (how are you doing) (what do you say)))
                    522:   (make-local-variable 'whereoutp)
                    523:   (setq whereoutp '( huh remem rthing ) )
                    524:   (make-local-variable 'subj)
                    525:   (setq subj nil)
                    526:   (make-local-variable 'verb)
                    527:   (setq verb nil)
                    528:   (make-local-variable 'obj)
                    529:   (setq obj nil)
                    530:   (make-local-variable 'feared)
                    531:   (setq feared nil)
                    532:   (make-local-variable 'observation-list)
                    533:   (setq observation-list nil)
                    534:   (make-local-variable 'repetitive-shortness)
                    535:   (setq repetitive-shortness '(0 . 0))
                    536:   (make-local-variable '**mad**)
                    537:   (setq **mad** nil)
                    538:   (make-local-variable 'rms-flag)
                    539:   (setq rms-flag nil)
                    540:   (make-local-variable 'eliza-flag)
                    541:   (setq eliza-flag nil)
                    542:   (make-local-variable 'zippy-flag)
                    543:   (setq zippy-flag nil)
                    544:   (make-local-variable 'lover)
                    545:   (setq lover '(your partner))
                    546:   (make-local-variable 'bak)
                    547:   (setq bak nil)
                    548:   (make-local-variable 'lincount)
                    549:   (setq lincount 0)
                    550:   (make-local-variable '*print-upcase*)
                    551:   (setq *print-upcase* nil)
                    552:   (make-local-variable '*print-space*)
                    553:   (setq *print-space* nil)
                    554:   (make-local-variable 'howdyflag)
                    555:   (setq howdyflag nil)
                    556:   (make-local-variable 'object)
                    557:   (setq object nil))
                    558: 
                    559: ;; Define equivalence classes of words that get treated alike.
                    560: 
                    561: (defun doctor-meaning (x) (get x 'doctor-meaning))
                    562: 
                    563: (defmacro doctor-put-meaning (symb val)
                    564:     "Store the base meaning of a word on the property list"
                    565:     (list 'put (list 'quote symb) ''doctor-meaning val))
                    566: 
                    567: (doctor-put-meaning howdy 'howdy)
                    568: (doctor-put-meaning hi 'howdy)
                    569: (doctor-put-meaning greetings 'howdy)
                    570: (doctor-put-meaning hello 'howdy)
                    571: (doctor-put-meaning tops20 'mach)
                    572: (doctor-put-meaning tops-20 'mach)
                    573: (doctor-put-meaning tops 'mach)
                    574: (doctor-put-meaning pdp11 'mach)
                    575: (doctor-put-meaning computer 'mach)
                    576: (doctor-put-meaning unix 'mach)
                    577: (doctor-put-meaning machine 'mach)
                    578: (doctor-put-meaning computers 'mach)
                    579: (doctor-put-meaning machines 'mach)
                    580: (doctor-put-meaning pdp11s 'mach)
                    581: (doctor-put-meaning foo 'mach)
                    582: (doctor-put-meaning foobar 'mach)
                    583: (doctor-put-meaning multics 'mach)
                    584: (doctor-put-meaning macsyma 'mach)
                    585: (doctor-put-meaning teletype 'mach)
                    586: (doctor-put-meaning la36 'mach)
                    587: (doctor-put-meaning vt52 'mach)
                    588: (doctor-put-meaning zork 'mach)
                    589: (doctor-put-meaning trek 'mach)
                    590: (doctor-put-meaning startrek 'mach)
                    591: (doctor-put-meaning advent 'mach)
                    592: (doctor-put-meaning pdp 'mach)
                    593: (doctor-put-meaning dec 'mach)
                    594: (doctor-put-meaning commodore 'mach)
                    595: (doctor-put-meaning vic 'mach)
                    596: (doctor-put-meaning bbs 'mach)
                    597: (doctor-put-meaning modem 'mach)
                    598: (doctor-put-meaning baud 'mach)
                    599: (doctor-put-meaning macintosh 'mach)
                    600: (doctor-put-meaning vax 'mach)
                    601: (doctor-put-meaning vms 'mach)
                    602: (doctor-put-meaning ibm 'mach)
                    603: (doctor-put-meaning pc 'mach)
                    604: (doctor-put-meaning bitching 'foul)
                    605: (doctor-put-meaning shit 'foul)
                    606: (doctor-put-meaning bastard 'foul)
                    607: (doctor-put-meaning damn 'foul)
                    608: (doctor-put-meaning damned 'foul)
                    609: (doctor-put-meaning hell 'foul)
                    610: (doctor-put-meaning suck 'foul)
                    611: (doctor-put-meaning sucking 'foul)
                    612: (doctor-put-meaning sux 'foul)
                    613: (doctor-put-meaning ass 'foul)
                    614: (doctor-put-meaning whore 'foul)
                    615: (doctor-put-meaning bitch 'foul)
                    616: (doctor-put-meaning asshole 'foul)
                    617: (doctor-put-meaning shrink 'foul)
                    618: (doctor-put-meaning pot 'toke)
                    619: (doctor-put-meaning grass 'toke)
                    620: (doctor-put-meaning weed 'toke)
                    621: (doctor-put-meaning marijuana 'toke)
                    622: (doctor-put-meaning acapulco 'toke)
                    623: (doctor-put-meaning columbian 'toke)
                    624: (doctor-put-meaning tokin 'toke)
                    625: (doctor-put-meaning joint 'toke)
                    626: (doctor-put-meaning toke 'toke)
                    627: (doctor-put-meaning toking 'toke)
                    628: (doctor-put-meaning tokin\' 'toke)
                    629: (doctor-put-meaning toked 'toke)
                    630: (doctor-put-meaning roach 'toke)
                    631: (doctor-put-meaning pills 'drug)
                    632: (doctor-put-meaning dope 'drug)
                    633: (doctor-put-meaning acid 'drug)
                    634: (doctor-put-meaning lsd 'drug)
                    635: (doctor-put-meaning speed 'drug)
                    636: (doctor-put-meaning heroine 'drug)
                    637: (doctor-put-meaning hash 'drug)
                    638: (doctor-put-meaning cocaine 'drug)
                    639: (doctor-put-meaning uppers 'drug)
                    640: (doctor-put-meaning downers 'drug)
                    641: (doctor-put-meaning loves 'loves)
                    642: (doctor-put-meaning love 'love)
                    643: (doctor-put-meaning loved 'love)
                    644: (doctor-put-meaning hates 'hates)
                    645: (doctor-put-meaning dislikes 'hates)
                    646: (doctor-put-meaning hate 'hate)
                    647: (doctor-put-meaning hated 'hate)
                    648: (doctor-put-meaning dislike 'hate)
                    649: (doctor-put-meaning stoned 'state)
                    650: (doctor-put-meaning drunk 'state)
                    651: (doctor-put-meaning drunken 'state)
                    652: (doctor-put-meaning high 'state)
                    653: (doctor-put-meaning horny 'state)
                    654: (doctor-put-meaning blasted 'state)
                    655: (doctor-put-meaning happy 'state)
                    656: (doctor-put-meaning paranoid 'state)
                    657: (doctor-put-meaning wish 'desire)
                    658: (doctor-put-meaning wishes 'desire)
                    659: (doctor-put-meaning want 'desire)
                    660: (doctor-put-meaning desire 'desire)
                    661: (doctor-put-meaning like 'desire)
                    662: (doctor-put-meaning hope 'desire)
                    663: (doctor-put-meaning hopes 'desire)
                    664: (doctor-put-meaning desires 'desire)
                    665: (doctor-put-meaning wants 'desire)
                    666: (doctor-put-meaning desires 'desire)
                    667: (doctor-put-meaning likes 'desire)
                    668: (doctor-put-meaning needs 'desire)
                    669: (doctor-put-meaning need 'desire)
                    670: (doctor-put-meaning frustrated 'mood)
                    671: (doctor-put-meaning depressed 'mood)
                    672: (doctor-put-meaning annoyed 'mood)
                    673: (doctor-put-meaning upset 'mood)
                    674: (doctor-put-meaning unhappy 'mood)
                    675: (doctor-put-meaning excited 'mood)
                    676: (doctor-put-meaning worried 'mood)
                    677: (doctor-put-meaning lonely 'mood)
                    678: (doctor-put-meaning angry 'mood)
                    679: (doctor-put-meaning mad 'mood)
                    680: (doctor-put-meaning pissed 'mood)
                    681: (doctor-put-meaning jealous 'mood)
                    682: (doctor-put-meaning afraid 'fear)
                    683: (doctor-put-meaning terrified 'fear)
                    684: (doctor-put-meaning fear 'fear)
                    685: (doctor-put-meaning scared 'fear)
                    686: (doctor-put-meaning frightened 'fear)
                    687: (doctor-put-meaning virginity 'sexnoun)
                    688: (doctor-put-meaning virgins 'sexnoun)
                    689: (doctor-put-meaning virgin 'sexnoun)
                    690: (doctor-put-meaning cock 'sexnoun)
                    691: (doctor-put-meaning cocks 'sexnoun)
                    692: (doctor-put-meaning dick 'sexnoun)
                    693: (doctor-put-meaning dicks 'sexnoun)
                    694: (doctor-put-meaning cunt 'sexnoun)
                    695: (doctor-put-meaning cunts 'sexnoun)
                    696: (doctor-put-meaning prostitute 'sexnoun)
                    697: (doctor-put-meaning condom 'sexnoun)
                    698: (doctor-put-meaning sex 'sexnoun)
                    699: (doctor-put-meaning rapes 'sexnoun)
                    700: (doctor-put-meaning wife 'family)
                    701: (doctor-put-meaning family 'family)
                    702: (doctor-put-meaning brothers 'family)
                    703: (doctor-put-meaning sisters 'family)
                    704: (doctor-put-meaning parent 'family)
                    705: (doctor-put-meaning parents 'family)
                    706: (doctor-put-meaning brother 'family)
                    707: (doctor-put-meaning sister 'family)
                    708: (doctor-put-meaning father 'family)
                    709: (doctor-put-meaning mother 'family)
                    710: (doctor-put-meaning husband 'family)
                    711: (doctor-put-meaning siblings 'family)
                    712: (doctor-put-meaning grandmother 'family)
                    713: (doctor-put-meaning grandfather 'family)
                    714: (doctor-put-meaning maternal 'family)
                    715: (doctor-put-meaning paternal 'family)
                    716: (doctor-put-meaning stab 'death)
                    717: (doctor-put-meaning murder 'death)
                    718: (doctor-put-meaning murders 'death)
                    719: (doctor-put-meaning suicide 'death)
                    720: (doctor-put-meaning suicides 'death)
                    721: (doctor-put-meaning kill 'death)
                    722: (doctor-put-meaning kills 'death)
                    723: (doctor-put-meaning die 'death)
                    724: (doctor-put-meaning dies 'death)
                    725: (doctor-put-meaning died 'death)
                    726: (doctor-put-meaning dead 'death)
                    727: (doctor-put-meaning death 'death)
                    728: (doctor-put-meaning deaths 'death)
                    729: (doctor-put-meaning pain 'symptoms)
                    730: (doctor-put-meaning ache 'symptoms)
                    731: (doctor-put-meaning fever 'symptoms)
                    732: (doctor-put-meaning sore 'symptoms)
                    733: (doctor-put-meaning aching 'symptoms)
                    734: (doctor-put-meaning stomachache 'symptoms)
                    735: (doctor-put-meaning headache 'symptoms)
                    736: (doctor-put-meaning hurts 'symptoms)
                    737: (doctor-put-meaning disease 'symptoms)
                    738: (doctor-put-meaning virus 'symptoms)
                    739: (doctor-put-meaning vomit 'symptoms)
                    740: (doctor-put-meaning vomiting 'symptoms)
                    741: (doctor-put-meaning barf 'symptoms)
                    742: (doctor-put-meaning toothache 'symptoms)
                    743: (doctor-put-meaning hurt 'symptoms)
                    744: (doctor-put-meaning rum 'alcohol)
                    745: (doctor-put-meaning gin 'alcohol)
                    746: (doctor-put-meaning vodka 'alcohol)
                    747: (doctor-put-meaning alcohol 'alcohol)
                    748: (doctor-put-meaning bourbon 'alcohol)
                    749: (doctor-put-meaning beer 'alcohol)
                    750: (doctor-put-meaning wine 'alcohol)
                    751: (doctor-put-meaning whiskey 'alcohol)
                    752: (doctor-put-meaning scotch 'alcohol)
                    753: (doctor-put-meaning fuck 'sexverb)
                    754: (doctor-put-meaning fucked 'sexverb)
                    755: (doctor-put-meaning screw 'sexverb)
                    756: (doctor-put-meaning screwing 'sexverb)
                    757: (doctor-put-meaning fucking 'sexverb)
                    758: (doctor-put-meaning rape 'sexverb)4
                    759: (doctor-put-meaning raped 'sexverb)
                    760: (doctor-put-meaning kiss 'sexverb)
                    761: (doctor-put-meaning kissing 'sexverb)
                    762: (doctor-put-meaning kisses 'sexverb)
                    763: (doctor-put-meaning screws 'sexverb)
                    764: (doctor-put-meaning fucks 'sexverb)
                    765: (doctor-put-meaning because 'conj)
                    766: (doctor-put-meaning but 'conj)
                    767: (doctor-put-meaning however 'conj)
                    768: (doctor-put-meaning besides 'conj)
                    769: (doctor-put-meaning anyway 'conj)
                    770: (doctor-put-meaning that 'conj)
                    771: (doctor-put-meaning except 'conj)
                    772: (doctor-put-meaning why 'conj)
                    773: (doctor-put-meaning how 'conj)
                    774: (doctor-put-meaning until 'when)
                    775: (doctor-put-meaning when 'when)
                    776: (doctor-put-meaning whenever 'when)
                    777: (doctor-put-meaning while 'when)
                    778: (doctor-put-meaning since 'when)
                    779: (doctor-put-meaning rms 'rms)
                    780: (doctor-put-meaning stallman 'rms)
                    781: (doctor-put-meaning school 'school)
                    782: (doctor-put-meaning schools 'school)
                    783: (doctor-put-meaning skool 'school)
                    784: (doctor-put-meaning grade 'school)
                    785: (doctor-put-meaning grades 'school)
                    786: (doctor-put-meaning teacher 'school)
                    787: (doctor-put-meaning teachers 'school)
                    788: (doctor-put-meaning classes 'school)
                    789: (doctor-put-meaning professor 'school)
                    790: (doctor-put-meaning prof 'school)
                    791: (doctor-put-meaning profs 'school)
                    792: (doctor-put-meaning professors 'school)
                    793: (doctor-put-meaning mit 'school)
                    794: (doctor-put-meaning emacs 'eliza)
                    795: (doctor-put-meaning eliza 'eliza)
                    796: (doctor-put-meaning liza 'eliza)
                    797: (doctor-put-meaning elisa 'eliza)
                    798: (doctor-put-meaning weizenbaum 'eliza)
                    799: (doctor-put-meaning doktor 'eliza)
                    800: (doctor-put-meaning atheletics 'sports)
                    801: (doctor-put-meaning baseball 'sports)
                    802: (doctor-put-meaning basketball 'sports)
                    803: (doctor-put-meaning football 'sports)
                    804: (doctor-put-meaning frisbee 'sports)
                    805: (doctor-put-meaning gym 'sports)
                    806: (doctor-put-meaning gymnastics 'sports)
                    807: (doctor-put-meaning hockey 'sports)
                    808: (doctor-put-meaning lacrosse 'sports)
                    809: (doctor-put-meaning soccer 'sports)
                    810: (doctor-put-meaning softball 'sports)
                    811: (doctor-put-meaning sports 'sports)
                    812: (doctor-put-meaning swimming 'sports)
                    813: (doctor-put-meaning swim 'sports)
                    814: (doctor-put-meaning tennis 'sports)
                    815: (doctor-put-meaning volleyball 'sports)
                    816: (doctor-put-meaning math 'math)
                    817: (doctor-put-meaning mathematics 'math)
                    818: (doctor-put-meaning mathematical 'math)
                    819: (doctor-put-meaning theorem 'math)
                    820: (doctor-put-meaning axiom 'math)
                    821: (doctor-put-meaning lemma 'math)
                    822: (doctor-put-meaning algebra 'math)
                    823: (doctor-put-meaning algebraic 'math)
                    824: (doctor-put-meaning trig 'math)
                    825: (doctor-put-meaning trigonometry 'math)
                    826: (doctor-put-meaning trigonometric 'math)
                    827: (doctor-put-meaning geometry 'math)
                    828: (doctor-put-meaning geometric 'math)
                    829: (doctor-put-meaning calculus 'math)
                    830: (doctor-put-meaning arithmetic 'math)
                    831: (doctor-put-meaning zippy 'zippy)
                    832: (doctor-put-meaning zippy 'zippy)
                    833: (doctor-put-meaning pinhead 'zippy)
                    834: (doctor-put-meaning chat 'chat)
                    835: 
                    836: (defun doctor ()
                    837:   "Switch to *doctor* buffer and start giving psychotherapy."
                    838:   (interactive)
                    839:   (switch-to-buffer "*doctor*")
                    840:   (doctor-mode))
                    841: 
                    842: (defun doctor-ret-or-read (arg)
                    843:   "Insert a newline if preceding character is not a newline,
                    844: Otherwise call the Doctor to parse preceding sentence"
                    845:   (interactive "*p")
                    846:   (if (= (preceding-char) ?\n)
                    847:       (doctor-read-print)
                    848:     (newline arg)))
                    849: 
                    850: (defun doctor-read-print nil
                    851:   "top level loop"
                    852:   (interactive)
                    853:   (let ((sent (doctor-readin)))
                    854:     (insert "\n")
                    855:     (setq lincount (1+ lincount))
                    856:     (doctor-doc sent)
                    857:     (insert "\n")
                    858:     (setq bak sent)))
                    859: 
                    860: (defun doctor-readin nil
                    861:   "Read a sentence. Return it as a list of words"
                    862:   (let (sentence)
                    863:     (backward-sentence 1)
                    864:     (while (not (eobp))
                    865:       (setq sentence (append sentence (list (doctor-read-token)))))
                    866:     sentence))
                    867: 
                    868: (defun doctor-read-token ()
                    869:   "read one word from buffer"
                    870:   (prog1 (intern (downcase (buffer-substring (dot)
                    871:                                             (progn
                    872:                                               (forward-word 1)
                    873:                                               (dot)))))
                    874:     (re-search-forward "\\Sw*")))
                    875: 
                    876: ;; Main processing function for sentences that have been read.
                    877: 
                    878: (defun doctor-doc (sent)
                    879:   (cond
                    880:    ((equal sent '(foo))
                    881:     (doctor-type '(bar! ($ please)($ continue))))
                    882:    ((member sent howareyoulst)
                    883:     (doctor-type '(i\'m ok \.  ($ describe) yourself \.)))
                    884:    ((or (member sent '((good bye) (see you later) (i quit) (so long)
                    885:                       (go away) (get lost)))
                    886:        (memq (car sent)
                    887:              '(bye halt break quit done exit goodbye 
                    888:                    bye\, stop pause goodbye\, stop pause)))
                    889:     (doctor-type ($ bye)))
                    890:    ((and (eq (car sent) 'you)
                    891:         (memq (cadr sent) abusewords))
                    892:     (setq found (cadr sent))
                    893:     (doctor-type ($ abuselst)))
                    894:    ((eq (car sent) 'whatmeans)
                    895:     (doctor-def (cadr sent)))
                    896:    ((equal sent '(parse))
                    897:     (doctor-type (list  'subj '= subj ",  "
                    898:                        'verb '= verb "\n"
                    899:                        'object 'phrase '= obj ","
                    900:                        'noun 'form '=  object "\n"
                    901:                        'current 'keyword 'is found
                    902:                        ", "
                    903:                        'most 'recent 'possessive
                    904:                        'is owner "\n"
                    905:                        'sentence 'used 'was
                    906:                        "..."
                    907:                        '(// bak))))
                    908:    ;;   ((eq (car sent) 'forget)
                    909:    ;;    (set (cadr sent) nil)
                    910:    ;;    (doctor-type '(($ isee)($ please)
                    911:    ;;     ($ continue)\.)))
                    912:    (t
                    913:     (if (doctor-defq sent) (doctor-define sent found))
                    914:     (if (> (length sent) 12)(doctor-shorten sent))
                    915:     (setq sent (doctor-correct-spelling (doctor-replace sent replist)))
                    916:     (cond ((and (not (memq 'me sent))(not (memq 'i sent))
                    917:                (memq 'am sent))
                    918:           (setq sent (doctor-replace sent '((am . (are)))))))
                    919:     (cond ((equal (car sent) 'yow) (doctor-zippy))
                    920:          ((< (length sent) 2)
                    921:           (cond ((eq (doctor-meaning (car sent)) 'howdy)
                    922:                  (doctor-howdy))
                    923:                 (t (doctor-short))))
                    924:          (t
                    925:           (if (memq 'am sent)
                    926:               (setq sent (doctor-replace sent '((me . (i))))))
                    927:           (setq sent (doctor-fixup sent))
                    928:           (if (and (eq (car sent) 'do) (eq (cadr sent) 'not))
                    929:               (cond ((zerop (random-range 3))
                    930:                      (doctor-type '(are you ($ afraidof) that \?)))
                    931:                     ((zerop (random-range 2))
                    932:                      (doctor-type '(don\'t tell me what to do \. i am the
                    933:                                            psychiatrist here!))
                    934:                      (doctor-rthing))
                    935:                     (t
                    936:                      (doctor-type '(($ whysay) that i shouldn\'t
                    937:                                     (cddr sent)
                    938:                                     \?))))
                    939:             (doctor-go (doctor-wherego sent))))))))
                    940: 
                    941: ;; Things done to process sentences once read.
                    942: 
                    943: (defun doctor-correct-spelling (sent)
                    944:   "correct the spelling and expand each word in sentence"
                    945:   (if sent
                    946:       (apply 'append (mapcar '(lambda (word)
                    947:                                (if (memq word typos)
                    948:                                    (get (get word 'doctor-correction) 'doctor-expansion)
                    949:                                  (list word)))
                    950:                             sent))))
                    951: 
                    952: (defun doctor-shorten (sent)
                    953:   "Make a sentence managably short using a few hacks"
                    954:   (let (foo
                    955:        retval
                    956:        (temp '(because but however besides anyway until
                    957:                    while that except why how)))
                    958:     (while temp
                    959:           (setq foo (memq (car temp) sent))
                    960:           (if (and foo
                    961:                    (> (length foo) 3))
                    962:               (setq sent foo
                    963:                     sent (doctor-fixup sent)
                    964:                     temp nil
                    965:                     retval t)
                    966:               (setq temp (cdr temp))))
                    967:     retval))
                    968: 
                    969: (defun doctor-define (sent found)
                    970:   (doctor-svo sent found 1 nil)
                    971:   (and
                    972:    (doctor-nounp subj)
                    973:    (not (doctor-pronounp subj))
                    974:    subj
                    975:    (doctor-meaning object)
                    976:    (put subj 'doctor-meaning (doctor-meaning object))
                    977:    t))
                    978: 
                    979: (defun doctor-defq (sent)
                    980:   "Set global var  found  to first keyword found in sentence SENT"
                    981:   (setq found nil)
                    982:   (let ((temp '(means applies mean refers refer related
                    983:                      similar defined associated linked like same)))
                    984:     (while temp
                    985:           (if (memq (car temp) sent)
                    986:               (setq found (car temp)
                    987:                     temp nil)
                    988:               (setq temp (cdr temp)))))
                    989:   found)
                    990: 
                    991: (defun doctor-def (x)
                    992:   (progn
                    993:    (doctor-type (list 'the 'word x 'means (doctor-meaning x) 'to 'me)) 
                    994:    nil))
                    995: 
                    996: (defun doctor-forget ()
                    997:   "Delete the last element of the history list"
                    998:   (setq history (reverse (cdr (reverse history)))))
                    999: 
                   1000: (defun doctor-query (x)
                   1001:   "Prompt for a line of input from the minibuffer until a noun or a
                   1002: verb word is seen. Put dialogue in buffer."
                   1003:   (let (a
                   1004:        (prompt (concat (doctor-make-string x)
                   1005:                        " what \?  "))
                   1006:        retval)
                   1007:     (while (not retval)
                   1008:           (while (not a)
                   1009:             (insert ?\n
                   1010:                     prompt
                   1011:                     (read-string prompt)
                   1012:                     ?\n)
                   1013:             (setq a (doctor-readin)))
                   1014:           (while (and a (not retval))
                   1015:                  (cond ((doctor-nounp (car a))
                   1016:                         (setq retval (car a)))
                   1017:                        ((doctor-verbp (car a))
                   1018:                         (setq retval (doctor-build
                   1019:                                       (doctor-build x " ")
                   1020:                                       (car a))))
                   1021:                        ((setq a (cdr a))))))
                   1022:     retval))
                   1023: 
                   1024: (defun doctor-subjsearch (sent key type)
                   1025:   "Search for the subject of a sentence SENT, looking for the noun closest to
                   1026: and preceding KEY by at least TYPE words. Set global variable subj to the
                   1027: subject noun, and return the portion of the sentence following it"
                   1028:   (let ((i (- (length sent) (length (memq key sent)) type)))
                   1029:     (while (and (> i -1) (not (doctor-nounp (nth i sent))))
                   1030:       (setq i (1- i)))
                   1031:     (cond ((> i -1)
                   1032:           (setq subj (nth i sent))
                   1033:           (nthcdr (1+ i) sent))
                   1034:          (t
                   1035:           (setq subj 'you)
                   1036:           nil))))
                   1037: 
                   1038: (defun doctor-nounp (x)
                   1039:   "Returns t if the symbol argument is a noun"
                   1040:        (or (doctor-pronounp x)
                   1041:            (not (or (doctor-verbp x)
                   1042:                     (equal x 'not)
                   1043:                     (doctor-prepp x)
                   1044:                     (doctor-modifierp x) )) ))
                   1045: 
                   1046: (defun doctor-pronounp (x)
                   1047:   "Returns t if the symbol argument is a pronoun"
                   1048:   (memq x '(
                   1049:        i me mine myself
                   1050:        we us ours ourselves ourself
                   1051:        you yours yourself yourselves
                   1052:        he him himself she hers herself
                   1053:        it that those this these things thing
                   1054:        they them themselves theirs
                   1055:        anybody everybody somebody
                   1056:        anyone everyone someone
                   1057:        anything something everything)))
                   1058: 
                   1059: (mapcar (function (lambda (x) (put x 'doctor-sentence-type 'verb)))
                   1060:        '(abort aborted aborts ask asked asks am
                   1061:                applied applies apply are associate
                   1062:                associated ate
                   1063:                be became become becomes becoming
                   1064:                been being believe belived believes
                   1065:                bit bite bites bore bored bores boring bought buy buys buying
                   1066:                call called calling calls came can caught catch come
                   1067:                contract contracted contracts control controlled controls
                   1068:                could croak croaks croaked cut cuts
                   1069:                dare dared define defines dial dialed dials did die died dies
                   1070:                dislike disliked
                   1071:                dislikes do does drank drink drinks drinking
                   1072:                drive drives driving drove dying
                   1073:                eat eating eats expand expanded expands
                   1074:                expect expected expects expel expels expeled expelled
                   1075:                explain explained explains
                   1076:                fart farts feel feels felt fight fights find finds finding
                   1077:                forget forgets forgot fought found fuck fucked
                   1078:                fucking fucks
                   1079:                gave get gets getting give gives go goes going gone got gotten
                   1080:                had harm harms has hate hated hates have having
                   1081:                hear heard hears hearing help helped helping helps
                   1082:                hit hits hope hoped hopes hurt hurts
                   1083:                implies imply is
                   1084:                join joined joins jump jumped jumps
                   1085:                keep keeping keeps kept
                   1086:                kill killed killing kills kiss kissed kisses kissing
                   1087:                knew know knows
                   1088:                laid lay lays let lets lie lied lies like liked likes
                   1089:                liking listen listens
                   1090:                login look looked looking looks
                   1091:                lose losing lost
                   1092:                love loved loves loving
                   1093:                luse lusing lust lusts
                   1094:                made make makes making may mean means meant might
                   1095:                move moved moves moving must
                   1096:                need needed needs 
                   1097:                order ordered orders ought
                   1098:                paid pay pays pick picked picking picks 
                   1099:                placed placing prefer prefers put puts
                   1100:                ran rape raped rapes
                   1101:                read reading reads recall receive received receives
                   1102:                refer refered referred refers
                   1103:                relate related relates remember remembered remembers
                   1104:                romp romped romps run running runs
                   1105:                said sang sat saw say says
                   1106:                screw screwed screwing screws scrod see sees seem seemed
                   1107:                seems seen sell selling sells
                   1108:                send sendind sends sent shall shoot shot should
                   1109:                sing sings sit sits sitting sold studied study
                   1110:                take takes taking talk talked talking talks tell tells telling
                   1111:                think thinks
                   1112:                thought told took tooled touch touched touches touching
                   1113:                transfer transfered transfers transmit transmits transmitted
                   1114:                type types types typing
                   1115:                walk walked walking walks want wanted wants was watch
                   1116:                watched watching went were will wish would work worked works
                   1117:                write writes writing wrote use used uses using))
                   1118: 
                   1119: (defun doctor-verbp (x) (if (symbolp x)
                   1120:                            (eq (get x 'doctor-sentence-type) 'verb)))
                   1121: 
                   1122: (defun doctor-plural (x)
                   1123:   "form the plural of the word argument"
                   1124:   (let ((foo (doctor-make-string x)))
                   1125:     (cond ((string-equal (substring foo -1) "s")
                   1126:           (cond ((string-equal (substring foo -2 -1) "s")
                   1127:                  (intern (concat foo "es")))
                   1128:                 (t x)))
                   1129:           ((string-equal (substring foo -1) "y")
                   1130:            (intern (concat (substring foo 0 -1)
                   1131:                            "ies")))
                   1132:           (t (intern (concat foo "s"))))))
                   1133: 
                   1134: (defun doctor-setprep (sent key)
                   1135:   (let ((val)
                   1136:        (foo (memq key sent)))
                   1137:     (cond ((doctor-prepp (cadr foo))
                   1138:           (setq val (doctor-getnoun (cddr foo)))
                   1139:           (cond (val val)
                   1140:                 (t 'something)))
                   1141:          ((doctor-articlep (cadr foo))
                   1142:           (setq val (doctor-getnoun (cddr foo)))
                   1143:           (cond (val (doctor-build (doctor-build (cadr foo) " ") val))
                   1144:                 (t 'something)))
                   1145:          (t 'something))))
                   1146: 
                   1147: (defun doctor-getnoun (x)
                   1148:   (cond ((null x)(setq object 'something))
                   1149:        ((atom x)(setq object x))
                   1150:        ((eq (length x) 1)
                   1151:         (setq object (cond
                   1152:                       ((doctor-nounp (setq object (car x))) object)
                   1153:                       (t (doctor-query object)))))
                   1154:        ((eq (car x) 'to)
                   1155:         (doctor-build 'to\  (doctor-getnoun (cdr x))))
                   1156:        ((doctor-prepp (car x))
                   1157:         (doctor-getnoun (cdr x)))
                   1158:        ((not (doctor-nounp (car x)))
                   1159:         (doctor-build (doctor-build (cdr (assq (car x)
                   1160:                                                (append
                   1161:                                                 '((a . this)
                   1162:                                                   (some . this)
                   1163:                                                   (one . that))
                   1164:                                                 (list
                   1165:                                                  (cons
                   1166:                                                   (car x) (car x))))))
                   1167:                                     " ")
                   1168:                       (doctor-getnoun (cdr x))))
                   1169:        (t (setq object (car x))) ))
                   1170: 
                   1171: (defun doctor-modifierp (x)
                   1172:   (or (doctor-adjectivep x)
                   1173:       (doctor-adverbp x)
                   1174:       (doctor-othermodifierp x)))
                   1175: 
                   1176: (defun doctor-adjectivep (x)
                   1177:   (or (numberp x)
                   1178:       (doctor-nmbrp x)
                   1179:       (doctor-articlep x)
                   1180:       (doctor-colorp x)
                   1181:       (doctor-sizep x)
                   1182:       (doctor-possessivepronounp x)))
                   1183: 
                   1184: (defun doctor-adverbp (xx)
                   1185:   (string-equal (substring (doctor-make-string xx) -2) "ly"))
                   1186: 
                   1187: (defun doctor-articlep (x)
                   1188:   (memq x '(the a an)))
                   1189: 
                   1190: (defun doctor-nmbrp (x)
                   1191:   (memq x '(one two three four five six seven eight nine ten
                   1192:                eleven twelve thirteen fourteen fifteen
                   1193:                sixteen seventeen eighteen nineteen
                   1194:                twenty thirty forty fifty sixty seventy eighty ninety
                   1195:                hundred thousand million billion
                   1196:                half quarter
                   1197:                first second third fourth fifth
                   1198:                sixth seventh eighth nineth tenth)))
                   1199:                 
                   1200: (defun doctor-colorp (x)
                   1201:   (memq x '(beige black blue brown crimson
                   1202:                  gray grey green
                   1203:                  orange pink purple red tan tawny
                   1204:                  violet white yellow)))
                   1205: 
                   1206: (defun doctor-sizep (x)
                   1207:   (memq x '(big large tall fat wide thick
                   1208:                small petite short thin skinny)))
                   1209: 
                   1210: (defun doctor-possessivepronounp (x)
                   1211:   (memq x '(my your his her our their)))
                   1212: 
                   1213: (defun doctor-othermodifierp (x)
                   1214:   (memq x '(all also always amusing any anyway associated awesome
                   1215:                bad beautiful best better but certain clear
                   1216:                ever every fantastic fun funny
                   1217:                good great gross growdy however if ignorant
                   1218:                less linked losing lusing many more much
                   1219:                never nice obnoxious often poor pretty real related rich
                   1220:                similar some stupid super superb
                   1221:                terrible terrific too total tubular ugly very)))
                   1222: 
                   1223: (defun doctor-prepp (x)
                   1224:   (memq x '(about above after around as at
                   1225:                  before beneath behind beside between by
                   1226:                  for from in inside into
                   1227:                  like near next of on onto over
                   1228:                  same through thru to toward towards
                   1229:                  under underneath with without)))
                   1230: 
                   1231: (defun doctor-remember (thing)
                   1232:   (cond ((null history)
                   1233:         (setq history (list thing)))
                   1234:        (t (setq history (append history (list thing))))))
                   1235: 
                   1236: (defun doctor-type (x)
                   1237:   (setq x (doctor-fix-2 x))
                   1238:   (doctor-txtype (doctor-assm x)))
                   1239: 
                   1240: (defun doctor-fixup (sent)
                   1241:   (setq sent (append
                   1242:              (cdr
                   1243:               (assq (car sent)
                   1244:                     (append
                   1245:                      '((me  i)
                   1246:                        (him  he)
                   1247:                        (her  she)
                   1248:                        (them  they)
                   1249:                        (okay)
                   1250:                        (well)
                   1251:                        (sigh)
                   1252:                        (hmm)
                   1253:                        (hmmm)
                   1254:                        (hmmmm)
                   1255:                        (hmmmmm)
                   1256:                        (gee)
                   1257:                        (sure)
                   1258:                        (great)
                   1259:                        (oh)
                   1260:                        (fine)
                   1261:                        (ok)
                   1262:                        (no))
                   1263:                      (list (list (car sent)
                   1264:                                  (car sent))))))
                   1265:              (cdr sent)))
                   1266:   (doctor-fix-2 sent))
                   1267: 
                   1268: (defun doctor-fix-2 (sent)
                   1269:   (let ((foo sent))
                   1270:     (while foo
                   1271:       (if (and (eq (car foo) 'me)
                   1272:               (doctor-verbp (cadr foo)))
                   1273:          (rplaca foo 'i)
                   1274:        (cond ((eq (car foo) 'you)
                   1275:               (cond ((memq (cadr foo) '(am be been is))
                   1276:                      (rplaca (cdr foo) 'are))
                   1277:                     ((memq (cadr foo) '(has))
                   1278:                      (rplaca (cdr foo) 'have))
                   1279:                     ((memq (cadr foo) '(was))
                   1280:                      (rplaca (cdr foo) 'were))))
                   1281:              ((equal (car foo) 'i)
                   1282:               (cond ((memq (cadr foo) '(are is be been))
                   1283:                      (rplaca (cdr foo) 'am))
                   1284:                     ((memq (cadr foo) '(were))
                   1285:                      (rplaca (cdr foo) 'was))
                   1286:                     ((memq (cadr foo) '(has))
                   1287:                      (rplaca (cdr foo) 'have))))
                   1288:              ((and (doctor-verbp (car foo))
                   1289:                    (eq (cadr foo) 'i)
                   1290:                    (not (doctor-verbp (car (cddr foo)))))
                   1291:               (rplaca (cdr foo) 'me))
                   1292:              ((and (eq (car foo) 'a)
                   1293:                    (doctor-vowelp (string-to-char
                   1294:                                    (doctor-make-string (cadr foo)))))
                   1295:               (rplaca foo 'an))
                   1296:              ((and (eq (car foo) 'an)
                   1297:                    (not (doctor-vowelp (string-to-char
                   1298:                                         (doctor-make-string (cadr foo))))))
                   1299:               (rplaca foo 'a)))
                   1300:        (setq foo (cdr foo))))
                   1301:     sent))
                   1302: 
                   1303: (defun doctor-vowelp (x)
                   1304:   (memq x '(?a ?e ?i ?o ?u)))
                   1305: 
                   1306: (defun doctor-replace (sent rlist)
                   1307:   "Replaces any element of SENT that is the car of a replacement element
                   1308: pair in RLIST"
                   1309:   (apply 'append
                   1310:         (mapcar
                   1311:          (function
                   1312:           (lambda (x)
                   1313:             (cdr (or (assq x rlist)   ; either find a replacement
                   1314:                      (list x x)))))   ; or fake an identity mapping
                   1315:          sent)))
                   1316: 
                   1317: (defun doctor-wherego (sent)
                   1318:   (cond ((null sent)($ whereoutp))
                   1319:        ((null (doctor-meaning (car sent)))
                   1320:         (doctor-wherego (cond ((zerop (random-range 2))
                   1321:                                (reverse (cdr sent)))
                   1322:                               (t (cdr sent)))))
                   1323:        (t
                   1324:         (setq found (car sent))
                   1325:         (doctor-meaning (car sent)))))
                   1326: 
                   1327: (defun doctor-svo (sent key type mem)
                   1328:   "Find subject, verb and object in sentence SENT with focus on word KEY.
                   1329: TYPE is number of words preceding KEY to start looking for subject. MEM is
                   1330: t if results are to be put on doctor's memory stack. Return is in global
                   1331: variables subj, verb and object"
                   1332:   (let ((foo (doctor-subjsearch sent key type) sent))
                   1333:     (or foo
                   1334:        (setq foo sent
                   1335:              mem nil))
                   1336:     (while (and (null (doctor-verbp (car foo))) (cdr foo))
                   1337:       (setq foo (cdr foo)))
                   1338:     (setq verb (car foo))
                   1339:     (setq obj (doctor-getnoun (cdr foo)))
                   1340:     (cond ((eq object 'i)(setq object 'me))
                   1341:          ((eq subj 'me)(setq subj 'i)))
                   1342:     (cond (mem (doctor-remember (list subj verb obj))))))
                   1343: 
                   1344: (defun doctor-possess (sent key)
                   1345:   "Set possessive in SENT for keyword KEY. Hack on previous word, setting
                   1346: global variable owner to possibly correct result"
                   1347:   (let* ((i (- (length sent) (length (memq key sent)) 1))
                   1348:         (prev (if (< i 0) 'your
                   1349:                 (nth i sent))))
                   1350:     (setq owner (if (or (doctor-possessivepronounp prev)
                   1351:                        (string-equal "s"
                   1352:                                      (substring (doctor-make-string prev)
                   1353:                                                 -1)))
                   1354:                    prev
                   1355:                  'your))))
                   1356: 
                   1357: ;; Output of replies.
                   1358: 
                   1359: (defun doctor-txtype (ans)
                   1360:   "Output to buffer a list of symbols or strings as a sentence"
                   1361:   (setq *print-upcase* t *print-space* nil)
                   1362:   (mapcar 'doctor-type-symbol ans)
                   1363:   (insert "\n"))
                   1364: 
                   1365: (defun doctor-type-symbol (word)
                   1366:   "Output a symbol to the buffer with some fancy case and spacing hacks"
                   1367:   (setq word (doctor-make-string word))
                   1368:   (if (string-equal word "i") (setq word "I"))
                   1369:   (if *print-upcase*
                   1370:       (progn
                   1371:        (setq word (capitalize word))
                   1372:        (if *print-space*
                   1373:            (insert " "))))
                   1374:   (cond ((or (string-match "^[.,;:?! ]" word)
                   1375:             (not *print-space*))
                   1376:         (insert word))
                   1377:        (t (insert ?\  word)))
                   1378:   (if (> (current-column) fill-column)
                   1379:       (apply auto-fill-hook nil))
                   1380:   (setq *print-upcase* (string-match "[.?!]$" word)
                   1381:        *print-space* t))
                   1382: 
                   1383: (defun doctor-build (str1 str2)
                   1384:   "Make a symbol out of the concatenation of the two non-list arguments"
                   1385:   (cond ((null str1) str2)
                   1386:        ((null str2) str1)
                   1387:        ((and (atom str1)
                   1388:              (atom str2))
                   1389:         (intern (concat (doctor-make-string str1)
                   1390:                         (doctor-make-string str2))))
                   1391:        (t nil)))
                   1392: 
                   1393: (defun doctor-make-string (obj)
                   1394:   (cond ((stringp obj) obj)
                   1395:        ((symbolp obj) (symbol-name obj))
                   1396:        ((numberp obj) (int-to-string obj))
                   1397:        (t "")))
                   1398: 
                   1399: (defun doctor-concat (x y)
                   1400:   "like append, but force atomic arguments to be lists"
                   1401:   (append
                   1402:    (if (and x (atom x)) (list x) x)
                   1403:    (if (and y (atom y)) (list y) y)))
                   1404: 
                   1405: (defun doctor-assm (proto)
                   1406:   (cond ((null proto) nil)
                   1407:        ((atom proto) (list proto))
                   1408:        ((atom (car proto))
                   1409:         (cons (car proto) (doctor-assm (cdr proto))))
                   1410:        (t (doctor-concat (doctor-assm (eval (car proto))) (doctor-assm (cdr proto))))))
                   1411: 
                   1412: ;; Functions that handle specific words or meanings when found.
                   1413: 
                   1414: (defun doctor-go (destination)
                   1415:   "Call a doctor- function"
                   1416:   (funcall (intern (concat "doctor-" (doctor-make-string destination)))))
                   1417: 
                   1418: (defun doctor-desire1 ()
                   1419:   (doctor-go ($ whereoutp)))
                   1420: 
                   1421: (defun doctor-huh ()
                   1422:   (cond ((< (length sent) 9) (doctor-type ($ huhlst)))
                   1423:        (t (doctor-type ($ longhuhlst)))))
                   1424: 
                   1425: (defun doctor-rthing () (doctor-type ($ thlst)))
                   1426: 
                   1427: (defun doctor-remem () (cond ((null history)(doctor-huh))
                   1428:                             ((doctor-type ($ remlst)))))
                   1429: 
                   1430: (defun doctor-howdy ()
                   1431:   (cond ((not howdyflag)
                   1432:         (doctor-type '(($ hello) what brings you to see me \?))
                   1433:         (setq howdyflag t))
                   1434:        (t
                   1435:         (doctor-type '(($ ibelieve) we\'ve introduced ourselves already \.))
                   1436:         (doctor-type '(($ please) ($ describe) ($ things) \.)))))
                   1437: 
                   1438: (defun doctor-when ()
                   1439:   (cond ((< (length (memq found sent)) 3)(doctor-short))
                   1440:        (t
                   1441:         (setq sent (cdr (memq found sent)))
                   1442:         (setq sent (doctor-fixup sent))
                   1443:         (doctor-type '(($ whatwhen)(// sent) \?)))))
                   1444: 
                   1445: (defun doctor-conj ()
                   1446:   (cond ((< (length (memq found sent)) 4)(doctor-short))
                   1447:        (t
                   1448:         (setq sent (cdr (memq found sent)))
                   1449:         (setq sent (doctor-fixup sent))
                   1450:         (cond ((eq (car sent) 'of)
                   1451:                (doctor-type '(are you ($ sure) that is the real reason \?))
                   1452:                (setq things (cons (cdr sent) things)))
                   1453:               (t
                   1454:                (doctor-remember sent)
                   1455:                (doctor-type ($ beclst)))))))
                   1456: 
                   1457: (defun doctor-short ()
                   1458:   (cond ((= (car repetitive-shortness) (1- lincount))
                   1459:         (rplacd repetitive-shortness
                   1460:                 (1+ (cdr repetitive-shortness))))
                   1461:        (t
                   1462:         (rplacd repetitive-shortness 1)))
                   1463:   (rplaca repetitive-shortness lincount)
                   1464:   (cond ((> (cdr repetitive-shortness) 6)
                   1465:         (cond ((not **mad**)
                   1466:                (doctor-type '(($ areyou)
                   1467:                               just trying to see what kind of things
                   1468:                               i have in my vocabulary \? please try to
                   1469:                               carry on a reasonable conversation!))
                   1470:                (setq **mad** t))
                   1471:               (t
                   1472:                (doctor-type '(i give up \. you need a lesson in creative
                   1473:                                 writing \.\.\.))
                   1474:                ;;(push monosyllables observation-list)
                   1475:                )))
                   1476:        (t
                   1477:         (cond ((equal sent (doctor-assm '(yes)))
                   1478:                (doctor-type '(($ isee) ($ inter) ($ whysay) this is so \?)))
                   1479:               ((equal sent (doctor-assm '(because)))
                   1480:                (doctor-type ($ shortbeclst)))
                   1481:               ((equal sent (doctor-assm '(no)))
                   1482:                (doctor-type ($ neglst)))
                   1483:               (t (doctor-type ($ shortlst)))))))
                   1484:           
                   1485: (defun doctor-alcohol () (doctor-type ($ drnk)))
                   1486: 
                   1487: (defun doctor-desire ()
                   1488:   (let ((foo (memq found sent)))
                   1489:     (cond ((< (length foo) 2)
                   1490:           (doctor-go (doctor-build (doctor-meaning found) 1)))
                   1491:          ((memq (cadr foo) '(a an))
                   1492:           (rplacd foo (append '(to have) (cdr foo)))
                   1493:           (doctor-svo sent found 1 nil)
                   1494:           (doctor-remember (list subj 'would 'like obj))
                   1495:           (doctor-type ($ whywant)))
                   1496:          ((not (eq (cadr foo) 'to))
                   1497:           (doctor-go (doctor-build (doctor-meaning found) 1)))
                   1498:          (t
                   1499:           (doctor-svo sent found 1 nil)
                   1500:           (doctor-remember (list subj 'would 'like obj))
                   1501:           (doctor-type ($ whywant))))))
                   1502: 
                   1503: (defun doctor-drug ()
                   1504:   (doctor-type ($ drugs))
                   1505:   (doctor-remember (list 'you 'used found)))
                   1506: 
                   1507: (defun doctor-toke ()
                   1508:   (doctor-type ($ toklst)))
                   1509: 
                   1510: (defun doctor-state ()
                   1511:   (doctor-type ($ states))(doctor-remember (list 'you 'were found)))
                   1512: 
                   1513: (defun doctor-mood ()
                   1514:   (doctor-type ($ moods))(doctor-remember (list 'you 'felt found)))
                   1515: 
                   1516: (defun doctor-fear ()
                   1517:   (setq feared (doctor-setprep sent found))
                   1518:   (doctor-type ($ fears))
                   1519:   (doctor-remember (list 'you 'were 'afraid 'of feared)))
                   1520: 
                   1521: (defun doctor-hate ()
                   1522:   (doctor-svo sent found 1 t)
                   1523:   (cond ((memq 'not sent) (doctor-forget) (doctor-huh))
                   1524:        ((equal subj 'you)
                   1525:         (doctor-type '(why do you (// verb)(// obj) \?)))
                   1526:        (t (doctor-type '(($ whysay)(list subj verb obj))))))
                   1527: 
                   1528: (defun doctor-symptoms ()
                   1529:   (doctor-type '(($ maybe) you should consult a doctor of medicine\,
                   1530:                 i am a psychiatrist \.)))
                   1531: 
                   1532: (defun doctor-hates ()
                   1533:   (doctor-svo sent found 1 t)
                   1534:   (doctor-hates1))
                   1535: 
                   1536: (defun doctor-hates1 ()
                   1537:   (doctor-type '(($ whysay)(list subj verb obj))))
                   1538: 
                   1539: (defun doctor-loves ()
                   1540:   (doctor-svo sent found 1 t)
                   1541:   (doctor-qloves))
                   1542: 
                   1543: (defun doctor-qloves ()
                   1544:   (doctor-type '(($ bother)(list subj verb obj) \?)))
                   1545: 
                   1546: (defun doctor-love ()
                   1547:   (doctor-svo sent found 1 t)
                   1548:   (cond ((memq 'not sent) (doctor-forget) (doctor-huh))
                   1549:        ((memq 'to sent) (doctor-hates1))
                   1550:        (t
                   1551:         (cond ((equal object 'something)
                   1552:                (setq object '(this person you love))))
                   1553:         (cond ((equal subj 'you)
                   1554:                (setq lover obj)
                   1555:                (cond ((equal lover '(this person you love))
                   1556:                       (setq lover '(your partner))
                   1557:                       (doctor-forget)
                   1558:                       (doctor-type '(with whom are you in love \?)))
                   1559:                      ((doctor-type '(($ please)
                   1560:                                      ($ describe)
                   1561:                                      ($ relation)
                   1562:                                      (// lover)
                   1563:                                      \.)))))
                   1564:               ((equal subj 'i)
                   1565:                (doctor-txtype '(we were discussing you!)))
                   1566:               (t (doctor-forget)
                   1567:                  (setq obj 'someone)
                   1568:                  (setq verb (doctor-build verb 's))
                   1569:                  (doctor-qloves))))))
                   1570: 
                   1571: (defun doctor-mach ()
                   1572:   (setq found (doctor-plural found))
                   1573:   (doctor-type ($ machlst)))
                   1574: 
                   1575: (defun doctor-sexnoun () (doctor-sexverb))
                   1576: 
                   1577: (defun doctor-sexverb ()
                   1578:   (if (or (memq 'me sent)(memq 'myself sent)(memq 'i sent))
                   1579:       (doctor-foul)
                   1580:     (doctor-type ($ sexlst))))
                   1581: 
                   1582: (defun doctor-death () (doctor-type ($ deathlst)))
                   1583: 
                   1584: (defun doctor-foul ()
                   1585:   (doctor-type ($ foullst)))
                   1586: 
                   1587: (defun doctor-family ()
                   1588:   (doctor-possess sent found)
                   1589:   (doctor-type ($ famlst)))
                   1590: 
                   1591: ;; I did not add this -- rms.
                   1592: (defun doctor-rms ()
                   1593:   (cond (rms-flag (doctor-type ($ stallmanlst)))
                   1594:        (t (setq rms-flag t) (doctor-type '(do you know Stallman \?)))))
                   1595: 
                   1596: (defun doctor-school nil (doctor-type ($ schoollst)))
                   1597: 
                   1598: (defun doctor-eliza ()
                   1599:   (cond (eliza-flag (doctor-type ($ elizalst)))
                   1600:        (t (setq eliza-flag t)
                   1601:           (doctor-type '((// found) \? hah !
                   1602:                          ($ please) ($ continue) \.)))))
                   1603:           
                   1604: (defun doctor-sports ()  (doctor-type ($ sportslst)))
                   1605: 
                   1606: (defun doctor-math () (doctor-type ($ mathlst)))
                   1607: 
                   1608: (defun doctor-zippy ()
                   1609:   (cond (zippy-flag (doctor-type ($ zippylst)))
                   1610:        (t (setq zippy-flag t)
                   1611:           (doctor-type '(yow! are we interactive yet \?)))))
                   1612: 
                   1613: 
                   1614: (defun doctor-chat () (doctor-type ($ chatlst)))

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.