Introduction
This is a set of broadly useful Soar code. It is really intended for use in Michigan style agents. It includes the following:
- Name a state after the operator that triggered it's creation
- Put a link to the top-state on every state (especially useful in concurrent goals)
- Copy operator arguments down to the substate triggered by that operator
##!
# @brief Appends the name of the selected operator that triggered us.
# @type state-elaboration
sp {elaborate*state*name
(state <s> ^superstate.operator.name <name>)
-->
(<s> ^name <name>)
}
##!
# @brief If we are in any substate then put a link to the top state
# @type state-elaboration
sp {elaborate*state*top-state
(state <s> ^superstate.top-state <ts>)
-->
(<s> ^top-state <ts>)
}
##!
# @brief If we are in the top state, then put a top-state link to itself
# @type state-elaboration
sp {elaborate*top-state*top-state
(state <s> ^superstate nil)
-->
(<s> ^top-state <s>)
}
#
# Support for treating Michigan style subgoals like functions
#
##!
# @brief
# @type state-elaboration
#
# automatically copy any arguments from the superoperator to the local state
sp {elaborate*state*operator-args-base
(state <s> ^superstate.operator)
-->
(<s> ^args <args>)
}
##!
# @brief
# @type state-elaboration
#
# automatically copy any arguments from the superoperator to the local state
sp {elaborate*state*operator-args
(state <s> ^superstate.operator.<att> <val>
^args <args>)
-->
(<args> ^<att> <val>)
}