Thanks all! I went with the solution suggested by Christian. It is simple, efficient, and solves my problem (starting at 1 is fine). The GFLWOR approach is nice, except that I have two nested for loops so it produces two counts instead of one (and there is no straightforward way to combine them into a single monotonically increasing number).
Best, Ron On October 22, 2015 at 5:47:53 AM, Marc van Grootel ([email protected]) wrote: Hi, Wouldn't clj-ds [1] be of any help in this? It has support for transients.I believe that Exist uses this somewhere in their code not sure where. I think it makes use of these Atomic* objects under the hood but providing a "functional" facade. btw I'm not speaking from experience with this library but I do have it on my longlist. [1]: https://github.com/krukow/clj-ds On Thu, Oct 22, 2015 at 9:38 AM, Christian Grün <[email protected]> wrote: > Hi Rob, > > A short variant of your approach could look like this: > > import module namespace counter = > 'java.util.concurrent.atomic.AtomicInteger'; > for $i in 1 to 10 > return counter:incrementAndGet() > > As you already indicated, it violates the functional programming > design, so I would surely recommend everyone to use the GFLWOR "at" or > "count" clause (or possibly fold-left, etc.) > > And hi Ron, > > Do you need to start with an existing counter when running your query, > or is it sufficient to start with 1? > > Christian > > > On Thu, Oct 22, 2015 at 9:07 AM, Rob Stapper <[email protected]> wrote: >> Hi Ron, >> >> Maybe the attached codes-nippet is useful to you. >> It is an example of stateful programming, which isn't compliant with the >> functional programming concept but, in some cases, can be very useful. >> >> Hopes it helps, >> Rob Stapper >> >> PS. put the module-file in a subdirectory: "counter", in your >> basex-repo-directory. -- --Marc

