help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: sharing list structure


From: rgb
Subject: Re: sharing list structure
Date: 24 Mar 2005 21:49:15 -0800
User-agent: G2/0.2

rgb wrote:
> > The data structure that I think ought to be capable of handling all
> of
> > this would be a list B that contains
> >
> >  ((title1, H1, F1), (title2, H2, F2), ..., (titlen, Hn, Fn))
> >
>
> Well I'm not sure now if you're re-explaining the problem for my
> benefit or showing me you've found the answer.  Because the above
> (with commas removed) seems to be a perfectly useable answer.
>
>
> (setq all-my-lists
>   '((key1 (h1a h1b h1c ...) (f1a f1b f1c ...))
>     (key2 (h2a h2b h2c ...) (f2a f2b f2c ...))
>      ...))
>
> It should't be too hard to write some functions that mannage a
> set of nested lists such as that in whatever way is convenient to
> your application.
>
> For example:
>
> (setq all '((a (h1 h2 h3)(f1 f2 f3))       ;test data
>             (b (ha hb hc)(fa fb fc))))
>
> (defun get^h (key index)
>   "get h[index] value within KEY list"
>   (nth index (cadr (assoc key all))))
>
> (get^h 'b 2)
> hc
>
> (defun delete^h (key index)
>   "remove h[index] value from KEY list."
>   (if (< 0 index)
>       ;; the car of the list is not affected so just change the list
>       ;; I used (nth 1 ...) rather than (cadr ...) so it's more
obvious
>       ;; how this could have a 3rd argument and not just access h.
>       (setcdr (nthcdr (1- index) (nth 1 (assoc key all)))
>               (nthcdr (1+ index) (nth 1 (assoc key all))))
>     ;; when the car changes the outer list holding it must change
>     (setcar (cdr (assoc key all))
>             (nthcdr 1 (cadr (assoc key all))))))

Naturally this needs a bit more code like probably bounds checking
but as an example to get started with...



reply via email to

[Prev in Thread] Current Thread [Next in Thread]