2010-11-05 5 views
0

J'ai une liste de listes d'entiers:Index à travers une liste de listes dans AutoLISP

(setq a '(21 14 35 29 16 28)) 
(setq b '(15 36 21 17 45 41)) 
(setq c '(24 21 35 28 17 21)) 

Il pourrait y avoir 50 +/- listes au total.

J'ai une autre liste:

(setq me '(17 14 31 21 17 28)) 

Je veux faire défiler la liste initiale des listes et soustrayez chaque membre de la liste a (1ère fois à travers) de la liste me.

Comment serais-je capable d'indexer à travers la liste initiale des listes afin que je puisse effectuer la comparaison?

Répondre

1

Si je fais semblant de comprendre ce que vous demandez ...

(setq 
    a '(21 14 35 29 16 28) 
    b '(15 36 21 17 45 41) 
    c '(24 21 35 28 17 21) 
    me '(17 14 31 21 17 28) 
    lst (append a b c) 
) 

(setq result 
    (vl-remove-if 
     '(lambda (x) (member x lst)) 
     me 
    ) 
)  

valeur du résultat est (31)

si ce^était ce que vous cherchez alors une solution plus générique:

(defun foo (lst listOfLists) 
    ( (lambda (grandList) 
      (vl-remove-if 
       '(lambda (x) (member x grandList)) 
       lst 
      ) 
     ) 
     (apply 'append listOfLists) 
    )   
) 

(foo me (list a b c)) 

retourne (31)

Questions connexes