问个小白问题 表内元素交集
如表1为: (1 2 3 4 5 )
表2为: ( 2 3 4 5 6)
表3为: ( 3 4 5 6 7)
表4为: (4 5 6 7 8)
要求返回所有表都有的元素 (4 5)
这程序应该怎么写
LISP放下一年 忘得差不多了
谢谢大师们提点一下
(defun f (l / a l1)
(setq l1 (car l)
l(cdr l)
)
(while l
(setq a (car l)
l (cdr l)
c nil
)
(foreach b l1
(if (member b a)
(setq c (cons b c))
)
)
(setq l1 c)
)
(reverse l1)
)
_$ (f '((1 2 3 4 5)(2 3 4 5 6)(3 4 5 6 7)(4 5 6 7 8)))
(4 5)
_$ Gu_xl 发表于 2016-3-11 16:37 static/image/common/back.gif
(defun f (l / a l1)
(setq l1 (car l)
l(cdr l)
谢谢固版主。。。都帮我写好了。。
谢谢了。。 另方: 串成一列 个数小于4的剔除 (setq lst '((1 2 3 4 5)
(2 3 4 5 6)
(3 4 5 6 7)
(4 5 6 7 8)
)
)
;; (aaa lst)
(defun aaa (lst / l1)
(setq l1 (car lst))
(foreach a lst (setq l1 (vl-remove-if-not '(lambda (x) (member x a)) l1)))
) xyp1964 发表于 2016-3-12 13:04 static/image/common/back.gif
谢谢帮助~~~~~~~~~~~支持大师 Andyhon 发表于 2016-3-11 22:59 static/image/common/back.gif
另方: 串成一列 个数小于4的剔除
好办法。。但表内可能出现4个元素与12个元素 4 化成变量即得
但得关心下效率的问题
本帖最后由 llsheng_73 于 2016-3-17 10:05 编辑
(defun f(l / a)
(setq a(car l))
(foreach x(cdr l)(setq a(vl-remove-if-not'(lambda(y)(member y x))a))))
写完了才发现跟院长的一样 本帖最后由 highflybird 于 2016-3-17 15:40 编辑
(defun Intersect (lst / x l)
(setq l (car lst))
(foreach p (cdr lst)
(setq x nil)
(foreach n p
(if (member n l)
(setq x (cons n x))
)
)
(setq l x)
)
x
)
这样可能效率高些。
页:
[1]
2