On Mon, Dec 26, 2022 at 12:11 AM Philip Kaludercic wrote: > > Until you step into the real world and you have to. > > Can you elaborate this point? Is this by intrinsic necessity or due to > the "mistakes" of others. Nothing special to elaborate. If a data structure is a plist and you can't change that, and you need to manipulate it, you're in the real world. > Plists are "harder" to iterate, because your > steps are cddrs which is an unusual way to run over a data structure. > Same applies to adding and removing associations from a plist. The > advantage is that they are easier to write. IMO the major advantage is that you can use them for lambda lists. > Maybe somebody knows the history here, why and where which of the two > were used. Again, my hunch is that going by the respective strengths > and weaknesses of the two (in relation to the conventional tools), we > can give some heuristic of when it is /better/ to use which of the two. > Both alists and plists are used intensely in at least two large commercial CL systems I have worked with. I also see them in OSS pretty often. I get your point, but this example is geared towards cl-loop. It is It was your example. I just weaked it trivially to make it slightly more realistic. Of course LOOP isn't for _everything_, else we wouldn't need anything else. It's a very versatile (and very often the most performant) util and that's why it's in the CL standard. The only thing approaching it is the ITERATE macro, modelled directly after LOOP, but that's not nearly as widespread and IMO not improvement enough to be worth investing the effort.