For all intents and purposes, there is no older Lisp that didn't have rplacd.
And, grandparent is right about what destructive means. It is not confined to assigning just to the fields of a cons cell, but to other things. Array elements, variables, slots of structures and so on.
How you deal with the possibility of cycles in the list structure in the library is simple: you don't. It's a complete waste of time for a list-processing function like, say, mapcar to be doing cycle detection. You document that it doesn't do that, and you will get infinite looping.
No Turing-complete language can save the programmer from infinite loops. If mapcar refuses to be goaded into infinitely looping, the programmer will find some other way to instigate non-termination.
Mentioned in Lisp 1 manual; here you go:
http://www.softwarepreservation.org/projects/LISP/book/LISP%...
For all intents and purposes, there is no older Lisp that didn't have rplacd.
And, grandparent is right about what destructive means. It is not confined to assigning just to the fields of a cons cell, but to other things. Array elements, variables, slots of structures and so on.
How you deal with the possibility of cycles in the list structure in the library is simple: you don't. It's a complete waste of time for a list-processing function like, say, mapcar to be doing cycle detection. You document that it doesn't do that, and you will get infinite looping.
No Turing-complete language can save the programmer from infinite loops. If mapcar refuses to be goaded into infinitely looping, the programmer will find some other way to instigate non-termination.
ANSI CL "17.1.1 General Restrictions on Parameters that must be Sequences" http://www.lispworks.com/documentation/lw50/CLHS/Body/17_aa....
Pass improper lists such as dotted or circular, and the behavior is undefined.