So I've been mucking with Lisp for a few days, finding my way, getting the feel of it, and now I'm beginning to wonder what the canonical way to do certain tasks is. For example, to append a new element at the end of a list I would say
(setf (cdr (last list)) (cons 'new nil))
However, I suspect there's a function to do that and do it better. The HyperSpec is very useful but only if you know what you're looking for, which I don't. I'd also like to know how these functions perform: does last require O(n) time, does push create a new list or extend the old one, are these details implementation specific or part of the standard, things like that. Any reference will be much appreciated.