通过AutoLISP中的列表列表进行索引

时间:2010-11-05 05:54:54

标签: 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))

总共可能有50个+/-列表。

我有另一个清单:

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

我想循环遍历列表的初始列表,并从列表a中减去列表me(第1次直通)的每个成员。

我如何能够通过初始列表列表进行索引,以便我可以执行比较?

1 个答案:

答案 0 :(得分:1)

如果我假装明白你要问的是什么......

(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
    )
)    

结果的值是(31)

如果你正在寻找那个^那么一个更通用的解决方案:

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

(foo me (list a b c)) 

返回(31)