> I suppose I have to refer to my own stuff for completeness here too
Yes. Though I knew about your work, and we've discussed it in the past,
I must confess that I didn't remember it when I saw the RosettaCode task
Your library is much more general and complete. Yet, for RosettaCode, a
plain little functional solutions should do. It has the advantage that
it is serves more easily as a PicoLisp coding example (the purpose of
RosettaCode after all).
> It will solve some ambiguous situations with some help from the caller
> and will also encode "real" PL objects (not just paired lists).
Conversion of real objects to/from paired lists could be done with
'putl'/'getl' (as you also do), combined with a 'mapcar' or so.
The main difference of the simple solution is that it uses I/O instead
of strings. This has both disadvantages (needs extra wrenching when
strings are needed) and advantages (faster and easier when using it via
sockets, which is I think the more typical case).
The I/O solution is particularly simple, because the built-in 'read'
function does all the parsing.