worked example: eat-from-can
description:
use consume-reaction to open and then eat from a can
code:
current |state> => words-to-list |closed can and hungry>
learn-state (*) #=> learn(|op: current>, |state>, |_self>)
use |can opener> #=> learn-state consume-reaction(current |state>, |can opener> + |closed can>, |can opener> + |open can>)
eat-from |can> #=> learn-state consume-reaction(current |state>, |open can> + |hungry>, |empty can> + |not hungry>)
examples:
-- start without a can-opener:
current |state>
|closed can> + |hungry>
-- trying to use a can opener doesn't change our state, since we don't have one:
use |can opener>
|closed can> + |hungry>
-- let's add a can opener:
current |state> +=> |can opener>
-- now we can open our can:
use |can opener>
|can opener> + |hungry> + |open can>
-- now we can eat from the open can:
eat-from |can>
|can opener> + |empty can> + |not hungry>
source code:
load eat-from-can.sw
Home