comp.lang.ada
 help / color / mirror / Atom feed
* GoTo in FSM (was Help with Exceptions)
@ 1996-05-15  0:00 W. Wesley Groleau (Wes)
  1996-05-15  0:00 ` Robert I. Eachus
  0 siblings, 1 reply; 2+ messages in thread
From: W. Wesley Groleau (Wes) @ 1996-05-15  0:00 UTC (permalink / raw)



I keep hearing about the value of GoTo for a finite state machine.
Perhaps my understanding of an FSM is incorrect, but every time I've
coded what I THOUGHT was a state machine, I used neither GoTo nor recursion
and didn't think the code was exceptionally ugly.  With Ada 83 the awkward
part was defining (and _maintaining_) an enumerated type with one literal
for each action (plus error).  Another type enumerated the states.  A record
 type
contains one of each.

If the conditions that trigger the transition/actions are not discrete,
another awkward part is mapping each condition to an enumeration.

Now you have an array indexed by trigger and current state of those records.
Very readable if line length and size of table don't prevent it.  (Which they
often do--sigh)

loop
   Trigger := Check_Condition_Or_Input;
   case State_Transition ( Current_State, Trigger ).Action is
     when {action_name} =>
       Do_{action_name} (...);
     when ...
     when Error =>
       Do_Error_Stuff (...);
   end case;
   Current_State := State_Transition ( Current_State, Trigger ).Next_State;
end loop;

Now I wouldn't call that beautiful, but I wouldn't call it ugly either.

And now we have access-to-subprogram, so we can eliminate the case statement
and the first enumerated type!

(But I'm still opposed to making rules a substitute for thinking--even
 a rule against GoTo.)

--
---------------------------------------------------------------------------
W. Wesley Groleau (Wes)                                Office: 219-429-4923
Magnavox - Mail Stop 10-40                               Home: 219-471-7206
Fort Wayne,  IN   46808              elm (Unix): wwgrol@pseserv3.fw.hac.com
---------------------------------------------------------------------------




^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~1996-05-15  0:00 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1996-05-15  0:00 GoTo in FSM (was Help with Exceptions) W. Wesley Groleau (Wes)
1996-05-15  0:00 ` Robert I. Eachus

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox