TEACH MINI.ELIZA                                  Aaron Sloman, Oct 1997


The file TEACH RESPOND gives a detailed introduction to techniques
required for developing an Eliza program based on Pop-11. This file
provides a skeleton version of the program developed there. You could
copy this file, and edit some of the procedure definitions to produce
your own version of Eliza.

E.g. create a file called 'eliza.p' put the following in it, and
then extend the defintions.

=======================================================================

/*
FILE:            ???Put the file's name here???
AUTHOR:          ???Put your name here???
CREATION DATE:   ???Put the date here???
COURSE:          ???
PURPOSE:         ???
LAST MODIFIED:   ???

*/


;;; ensure that the "!" pattern prefix is compiled

uses readpattern;


;;; declare procedures defined below, so that they can be referred
;;; to in other procedures before they are defined.

vars getname, greet, getproblem, respond, farewell;


define converse();
    ;;; YOU SHOULD PUT A COMMENT HERE, SAYING BRIEFLY
    ;;; WHAT CONVERSE IS INTENDED TO DO
    lvars name, input;

    ;;; Print a message and get user's name
    getname() -> name;

    ;;; Greet the user
    greet(name) =>

    ;;; Now repeatedly get input from the user, and print a
    ;;; response to it.
    repeat
        getproblem() -> input;
    quitif(input = [bye]);
        respond(input) =>
    endrepeat;

    farewell(name) =>
enddefine;


define getname() -> name;
    ;;; This prompts the user to type his/her name, returned as a list

    ;;; Print out a string as a message:
    'Good day. Please type your name, and finish with RETURN' =>

    ;;; read in the user's name as a list of words
    readline() -> name
enddefine;

define greet(name) -> result;
    ;;; ???? add a comment explaining what this does ???
    [Hello ^^name - I am here to help you] -> result;
enddefine;

/*
;;; tests for greet

greet([joe])=>
greet([father christmas])=>

*/

define getproblem() -> sentence;
    ;;; ???? add a comment explaining what this does ???
    oneof(
        [[Please state your problem][Do go on][Tell me more]]) =>

    readline() -> sentence;
enddefine;


define farewell(name) -> result;
    ;;; ???? add a comment explaining what this does ???
    [ I hope you are now feeling better ^^name. Please come again.]
        -> result;
enddefine;


/*
;;; tests for farewell

farewell([joe])=>
farewell([father christmas])=>

*/


define respond(input) -> result;
    ;;; Create a response to the user's input list

    lvars x, y; ;;; local variables

    if  input matches [i hate == ] then
        [perhaps you hate yourself] -> result;
    elseif input matches ! [are you ??x ] then
        [do i seem ^^x] -> result;
    elseif input matches ! [i ??x you] then
        [perhaps in your fantasy we ^^x each other] -> result;
    elseif input matches ! [??x is ??y] then
        [what if ^^x were not ^^y ? ] -> result;

    else
        [please go on] -> result;
    endif;
enddefine;


/*
;;; tests for respond

respond([can you play the tuba]) =>
respond([do you hate your mother?]) =>
respond([i can climb higher than you]) =>
... etc. ...

*/

/*
;;; test command for the whole program

converse();

*/

--- $poplocal/local/teach/mini.eliza
--- Copyright University of Birmingham 1997. All rights reserved. ------