[xsl] Re: Using XSLT for multi-agent simulation [was Creating a changeable globally scoped variable?]

Subject: [xsl] Re: Using XSLT for multi-agent simulation [was Creating a changeable globally scoped variable?]
From: Dimitre Novatchev <dnovatchev@xxxxxxxxx>
Date: Sun, 21 Mar 2004 12:13:13 -0800 (PST)
You need a datatype/object, which I call an "environment". Its
implementation in XSLT is at least two years old. It is also heavily used 
in
my XSLT implementation of a Monad class.

See:
   http://aspn.activestate.com/ASPN/Mail/Message/xsl-list/920880

or

http://fxsl.sourceforge.net/articles/PartialApps/Partial%20Applications.html#5._Creating_a_new_function_dynamically_-_the_calculator_store_problem.



Cheers,

Dimitre Novatchev
FXSL developer,

http://fxsl.sourceforge.net/ -- the home of FXSL
Resume: http://fxsl.sf.net/DNovatchev/Resume/Res.html


"Roger L. Costello" <costello@xxxxxxxxx> wrote in message
news:405DCB2C.652F7411@xxxxxxxxxxxx
> Michael Kay wrote:
> >
> > #
> > # I need to write a stylesheet which dynamically alters the
> > # value of a globally scoped variable.
> > #
> >
> > I'm surprised, you've been on this list for some time, so you should
> > know that this isn't possible.
>
> I was hoping that I was overlooking something in 2.0 and it would
> provide this capability.
>
> > Tell
> > us what you actually need to do (i.e. what transformation you want to
> > perform), and someone will be able to help.
>
> Fair enough.  I am trying to use XSLT 2.0 to perform multi-agent
> simulation.
>
> Consider a multi-agent simulation: I would like to have code to express
> the movement rules for a *single* agent, and then *separately* have
> code which *applies* the movement rules to each agent (a classic case of
> separation of concerns, and a classic paradigm for parallel processing).
>
> I will show a simple example in pseudocode:
>
> Agent Movement Rule
>    if left-cell is empty then move there
>    else if right-cell is empty then move there
>    else stay put
>
> Agent Processing
>    For each agent do:
>       Apply Agent Movement Rule
>
> In this example we see that I have cleanly separated the statement of
> the how each agent should move (Agent Movement Rule), from the
> application of the movement rule to each agent (Agent Processing).
>
> In order for the Agent Processing code to apply the Movement Rule
> to each agent it will need to modify the value of a global
> variable. Let's see why this is the case.
>
> Here are some more details:
>
> <xsl:template name="Agent-Movement-Rule">
>     <xsl:choose>
>         <xsl:when test="not(exists(left-cell()/agent))">
>             <xsl:call-template name="move-left"/>
>         </xsl:when>
>         <xsl:when test="not(exists(right-cell()/agent))">
>             <xsl:call-template name="move-right"/>
>         </xsl:when>
>         <xsl:otherwise/>
>     </xsl:choose>
> </xsl:template>
>
> Notice that the Agent Movement Rule has been written:
> - independent of the processing of all the other agents
> - independent of location, i.e., "for *whatever cell* I am currently on,
> execute these movement rules"
>
> In other words, this is a bottom-up approach to template creation.
>
> Now let me provide more details on the processing of each agent (I show
> a mix of pseudocode and XSLT):
>
> <xsl:template name="Agent-Processing">
>    <xsl:for-each select="1 to $num-agents">
>       Set $current-cell <-- modify a global variable!!!
>       <xsl:call-template name="Agent-Movement-Rule"/>
>    </xsl:for-each>
> </xsl:template>
>
> This template *applies* the Agent Movement Rule to each agent.  To do so
> requires that the "current-cell" be set.  The current-cell is a global
> variable.  This template needs to dynamically alter the global variable.
>
> I realize that I *could* nest the Agent Movement Rule within the Agent
> Processing code (and I have implemented this).  However, it results in
> (very) brittle, complex code.  In addition, it is contrary to the
> Principle of Separation of Concerns (one person should be able to create
> the Agent Movement Rules, while another person creates the code to apply
> the Movement Rules to each agent).
>
> If you have suggestions on how to do this without using dynamically
> changeable global variables I would be most interested.  /Roger


__________________________________
Do you Yahoo!?
Yahoo! Finance Tax Center - File online. File on time.
http://taxes.yahoo.com/filing.html

Current Thread