On Thu, 24 Mar 2005 17:48:57 -0600, Joe Corneli <[EMAIL PROTECTED]> wrote: > > I'm not sure how to do the following:
*snip* > > So I guess what I want is an "implicit pointer" to A. > > Looking at the box diagrams in the manual, it seemed to me that > everything would be taken care of if I used "setcdr" to build the list > B. But that didn't quite work: > > (progn > (setq A '(1 2 3)) > (setq B (list 'foo)) > (setcdr B A) > (setq A (append A (list 4))) > B) > ;=> (foo 1 2 3) The `append' doesn't alter the structure of the list A. (defvar *foo* (list 1 2 3)) (append *foo* (list 4 5 6)) *foo* => (1 2 3) Hence, the result of append doesn't alter A's structure. > If I handle A with kid gloves, then B comes out right: > > (progn > (setq A '(1 2 3)) > (setq B (list 'foo)) > (setcdr B A) > (setcdr (nthcdr 2 A) (list 4)) > B) > ;=>(foo 1 2 3 4) (setcdr (nthcdr ...) ...) _does_ alter A's structure. And thus it works. > But is this the only way to go? If it was possible, I would like to > set things up so that I could do anything I wanted to do to A, and > have B simply reflect that value at the end. You can do "anything you want" with A, as long as any function you run on A destructively modifies A. If it doesn't, then there's no way for B to reflect the change. So, just restrict yourself to destructive operations on A - like setcdr, setcar, etc. - and you'll be set. Just note that A will always have to be the "tail" part of B. I.e. something like B: (1 2 3 4 5 6) A: (3 4) ; a sublist of B won't work, just because of the nature of lisp lists. -- Denis Bueno PGP: http://pgp.mit.edu:11371/pks/lookup?search=0xA1B51B4B&op=index _______________________________________________ Help-gnu-emacs mailing list [email protected] http://lists.gnu.org/mailman/listinfo/help-gnu-emacs
