2009/4/18 Mark Polesky <markpole...@yahoo.com>: > > (define my-alist > '((a . 1) > )) > > (set! my-alist (acons 'b 2 my-alist)) > > my-alist ==> ((b . 2) (a . 1)) > > (define (alist-prepend alist key value) > (set! alist (acons key value alist))) > > (alist-prepend my-alist 'c 3) > > my-alist ==> ((b . 2) (a . 1)) > > ________________________________ > > How can I get (alist-prepend) to operate > on the original alist?
Create a pointer to it: guile> (define p-list (list my-alist)) guile> p-list (((b . 2) (a . 1))) guile> (define (alist-prepend palist key value) ... (set-car! palist (acons key value (car palist)))) guile> (alist-prepend p-list 'c 3) guile> p-list (((c . 3) (b . 2) (a . 1))) However, this seems like an awkward way of doing things; I'm thinking that you are bringing a C/perl/python/java mindset to scheme, and that will hobble you in general. For starters, always think "how can I solve this problem without using set! (or set-car!, or any kind of set!)" --linas