Re: Your thoughts on two item id methods?
- Posted by Jason Gade <jaygade at yahoo.com> Oct 19, 2005
- 494 views
Al Getz wrote: > > Hello there, > > > Im looking at something that needs to tell the difference between two > different classes of elements in a loop. The two methods presented > here both work, but they work somewhat different. I'd like to hear > any thoughts anyone has on these two methods, as to which one if any > seems better and why... > > METHOD #1 > > Atoms are of one class, while sequences are of the other class. > Here, we know items of class 1 are atoms, while class 2 items are sequences. > This way we can tell the difference between class 1 items and class 2 items... > > itemlist={ 1,2,3,{8,9},4,{6,7} } --atoms and sequences > for k=1 to length(itemlist) do > item=itemlist[k]--atom or seq > if atom(item) then > DoClass1Stuff(item) > else > DoClass2Stuff(item) > end if > end for > > > METHOD #2 > > Atoms will be in a sequence where the first element is zero, while > the other class will always have a '1' as first element with the real > data in elements 2 and above. Thus, class 1 elements start with a zero > and class 2 elements start with a 1... > > itemlist={ {0,1},{0,2},{0,3},{1,8,9},{0,4},{1,6,7} } --all sequences > > for k=1 to length(itemlist) do > item=itemlist[k]--always a sequence > if item[1] then > DoClass2Stuff(item) > else > DoClass1Stuff(item) > end if > end for > > I'm not that worried about the increase in memory space taken by > the second method. > In each itemlist there will be approx the same number of class 1 items > as there are class 2 items. > > Thanks for your time and thoughts... > > > Take care, > Al > > And, good luck with your Euphoria programming! > > My bumper sticker: "I brake for LED's" > I would use the second method, because it is more extensible as has been pointed out. One thing that I noticed while thinking about strings and structures, is that for any sequence except the empty sequence, you can actually acess two known members: sequence[1] and sequence[$]. I was thinking to add type-data to sequence[$] in sequences representing strings or structures. That way normal elements can be accessed with sequence[1..$] in a more natural way. Or embed a routine id as your marker value and for each loop iteration do
dc1 = routine_id("DoClass1Stuff") dc2 = routine_id("DoClass2Stuff") itemlist={ {dc1,1},{dc1,2},{dc1,3},{dc2,8,9},{dc1,4},{dc2,6,7} } --all sequences for k=1 to length(itemlist) do item=itemlist[k]--always a sequence call_proc(item[1], {item}) end for
j.