Its great to know you have written games before then I found the right person to get tips from or the right direction to go from here.
I did some game dev very long ago - as part of my CS course (third year thesis). So I'd not call myself a game developer, but I do have some insight as to what they need to think about.
Anyhow, I'd go about such in a more OOP like design. Even though AutoLisp doesn't provide object-orientation, I'd still try to keep the ghosts and the man as items with their properties.
So to design, think of what properties a ghost has at any one instant. E.g. a name to identify it, a drawing object which displays it, the current position, the current direction of movement, the current speed, the time of its last move. Then you have a list of all those and you run through each in an loop while asking the user for input (e.g. using grread, though I'd imagine you'd rather just use an infinite loop and reactors to fire when the user provides input).
So depending on what the user does, you may want to alter one (or more) of those "actors" in the list. E.g. change the direction of pacman if the user presses an arrow key.
No matter what the user did, you would still run an "update" routine on each of the "actors" in that list. This routine does the following:
- get the current-millisecs
- move the object by (* actors-speed (- current-millisecs actos-last-move)) in the actos-angle
- subst the actors-last-move with current-millisecs
I'd do this through a mapcar which re-sets the actors list each time.
Of course this is very simplified. E.g. You might need to check if the actor can move in its current direction, say testing if the "map" has a wall in front of it. Depending on that it might need to change direction - for the ghosts using some "AI" or random principle, for the PacMan you might need to stop it until the user presses something else.