--- In xpl-dev@y..., "Michael Lauzon" <ce940@f...> wrote:
This is also a good start, but the other way seemed a more promising
way to go, using namespaces and whatnot, we don't want a lot of
clutter around. Please login to the groups site on eGroups, and
check
out the two previous ideas for the XPL programs. You may have to do
a
view source in the message. Also, can people of this list signup for
xpl-wishlist?
--- In xpl@e..., Jonathan Burns <saski@w...> wrote:
> <xpl>
>
> <comment> This line is mandatory. </comment>
>
> <include content="xpl.dtd" version="x.x"/ >
>
> <comment>
> This includes a pre-existing data type,
> an XML document with the structure
> containing a list of integers:
>
> <List>
> [ <int> string </int> ]*
> </List>
>
> Within the program, an element of this form
> will be referred to by the name "intList".
> </comment>
>
> <include intList="list-of-int.dtd">
>
> <comment>
> Here we define a program variable to contain
> a list of integers.
> <comment>
>
> <variable type=intList>
> <name>
> mylist
> </name>
> </variable>
>
> <comment>
>
> We define an integer variable>
>
> </comment>
>
> <variable type=int>
> <name>
> total
> </name>
> </variable>
>
> <comment>
>
> We define a general-purpose element
>
> </comment>
>
> <variable type=element>
> <name>
> index
> </name>
> </variable>
>
> <comment>
>
> We define "abort" as a macro for an
> action to take on error.
>
> </comment>
>
> <set>
> abort
>
> <stdout>
> <data>
> <List>
> zero
> </List>
> </data>
> </stdout>
> </set>
>
> <comment>
>
> At last, the action commences!
>
> We read in the intList data.
>
> </comment>
>
> <stdin>
> mylist
> </stdin>
>
> <if>
> <false>
> <verify>
> mylist
> </verify>
> </false>
>
> abort <comment> Handy things, macros. </comment>
> </if>
>
> <comment>
>
> We set the general element "index" to refer
> to mylist as a whole. But we can think of this
> as referring to the root of the mylist.
> (Compare directory commands: think of this as
> setting up "index" as a symbolic link to mylist.)
>
> N.B. "set" is used here as a full copy assignment,
> with all children. It may be wasteful in some cases.
>
> </comment>
>
> <set>
> index
> mylist
> </set>
>
> <comment>
>
> Check whether mylist is empty.
>
> </comment>
>
> <if>
> <equals>
> <number-of-children>
> mylist
> </number-of-children>
> zero
> <equals>
>
> abort
>
> <else>
>
> <comment>
>
> Shift "index" down, to refer to "mylist"'s first child.
> (Compare change-directory command.)
>
> </comment>
>
> <set>
> index
> <first-child>
> index <comment> This could as well be "mylist".
> </comment>
> </first-child>
> </set>
>
> <comment>
>
> Initialize our "total" variable.
>
> </comment>
>
> <set>
> total
>
> <data>
> <int>
> zero
> </int>
> <data>
> </set>
>
> <comment>
>
> And this is what does the work:
> a Do-While loop which adds the list elements
> to our "total" variable.
>
> N.B.
> It doesn't make sense to add up strings,
> even strings like "9848001" and "0".
> But it does make sense to add up elements
> such as
>
> <int>
> 9848001
> </int>
>
> </comment>
>
> <do>
>
> <add>
> total
> index
> </add>
>
> <comment>
>
> Here's the While condition
>
> </comment>
>
> <not> <equals>
> index
> <last-child>
> mylist
> <last-child>
> </equals>
> </do>
>
> </else>
> </if>
>
> <comment>
>
> And we're out, with the list elements
> added up in "total".
> So, output it.
>
> </comment>
>
> <stdout>
> <data>
> <List>
> total
> </List>
> </data>
> </stdout>
>
> <comment>
>
> And take the rest of the day off.
>
> </comment>
>
> </xpl>
--- End forwarded message ---
|