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... _______________________________________________ Help-gnu-emacs mailing list [email protected] http://lists.gnu.org/mailman/listinfo/help-gnu-emacs
