GOTO (was Re: Appeal for python developers)
Anthra Norell
anthra.norell at tiscalinet.ch
Mon Mar 7 16:39:28 EST 2005
> Heiko wrote:
> SETUP = object()
> ELSE = object()
> BREAK = object()
>
> machine = {"WAITING FOR ACTION":
> {customer_drops_coin:"COIN HAS BEEN DROPPED",
> customer_selects_beverage:"ORDER RECEIVED",
> customer_cancels_order:"ACCOUNT CLOSURE IS DUE"
> ELSE:"WAITING FOR ACTION"},
> "COIN HAS BEEN DROPPED":
> {SETUP:identify_coin,
> credit_account:"PAYMENT DUE IS UNKNOWN"},
> "ORDER RECEIVED":
> {...
>
> Reading the state machine in the way presented above isn't any harder in my
> taste than reading your state table, and you should easily be able to run the
> machine from there...
> --- Heiko.
I think I get your idea. I also see a few problems with your proposal. Let me try:
def customer_drops_coin (): ...
def customer_selects_beverage (): ...
def customer_cancels_order: ...
etc.
def ELSE: return True
machine = { "WAITING FOR ACTION": ( ( customer_drops_coin, "COIN HAS BEEN DROPPED" ),
( customer_selects_beverage, "ORDER RECEIVED" ),
( customer_cancels_order, "ACCOUNT CLOSURE IS DUE" ),
# ( ELSE, "WAITING FOR ACTION" ),
),
"COIN HAS BEEN DROPPED": ( ( identify_coin, None ),
( credit_account, "PAYMENT DUE IS UNKNOWN" ),
),
"ORDER RECEIVED":
( ( ...
def run_state_machine (machine, initial_state = "BEGIN"):
state = initial_state # Here would be "WAITING FOR ACTION"
while True:
for function, next_state in machine [state]:
go_next = function ()
if go_next:
if next_state:
state = next_state
if state == "END":
return
This should work.
Frederic
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20050307/07449b0f/attachment.html>
More information about the Python-list
mailing list