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  

Reply via email to