I am trying to do some efficient list processing and would like to use a tconc list. I need to build my list in the order that I find objects, so I cannot use the cons command. This list will grow quite large and as it is growing, I have a while loop processing the data on the front of the list. In the middle of the while loop, many items can be added to the end of the list. I can use the tconc command to efficiently add items to the end of the tconc list, but each time through the while loop, I want to remove the first item from the list with cdr. I don't know how to do this efficiently with a tconc list.
There is a nice description of how tconc works on Sourcelink: http://sourcelink.cadence.com/docs/db/kdb/2002/Apr/11001694.html
However, as you can see, the tconc structure is a list that contains your list and a pointer to the last item in your list. If you want to create a tconc list by other means, you would need to do it this way (note: lconc is the same as tconc, except lconc appends a list to the end of your list and tconc appends one item to the end of your list):
a=list(1 2 3 4)
a=cons(a last(a)) => ((1 2 3 4) 4)
OR this way:
a=list(1 2 3 4)
a=lconc(nil a) => ((1 2 3 4) 4)
First, I could take the cdr of the car of my tconc list, then I could use one of the above approaches to rebuild my tconc list. However, I think it would be expensive since last must traverse to the end of the list. Likewise, I assume that lconc has the same overhead.
Anyone have any ideas?
Derek