利用vl-remove-if 删除二维表中重复元素
(= (car a1) (car a2))网友答:
这里是手误,当时还是没有解决问题
(setq aa '((10 12) (11 13) (15 8) (11 13)))
(setq bb (vl-remove-if (function (lambda (a1 a2) (and (= (car a1) (car a2))(= (cadr a1) (cadr a2))))) aa))
网友答: (setq aa '((10 12) (11 13) (15 8) (11 13)))
(foreach b aa
(if (null (member b ns))
(setq ns (cons b ns))
)
)
(reverse ns)网友答:
这确实是个可行的好方法,但是我想尝试用一个命令行来解决这个问题,也就定位到了vl-remove-if,但是貌似不太好实现呢网友答:
解决了
(setq aa '((10 12) (11 13) (15 8) (11 13)))
(setq RET '())
(vl-remove-if
(function (lambda (x)
(IF (NOT (MEMBER x RET))
(SETQ RET (CONS x RET))
nil
) ;_ 结束IF
) ;_ 结束lambda
) ;_ 结束function
aa
) ;_ 结束vl-remove-if
网友答:
解决了
(setq aa '((10 12) (11 13) (15 8) (11 13)))
(setq RET '())
(vl-remove-if
(function (lambda (x)
(IF (NOT (MEMBER x RET))
(SETQ RET (CONS x RET))
nil
) ;_ 结束IF
) ;_ 结束lambda
) ;_ 结束function
aa
) ;_ 结束vl-remove-if网友答: 本帖最后由 yshf 于 2026-2-6 10:52 编辑
(setq aa '((10 12) (11 13) (15 8) (11 13)))
; ;; 如果不考虑顺序,实现如下
(setq bb (cons '(11 13) (vl-remove-if '(lambda(x)(equal x '(11 13))) aa)))
网友答:
(setq aa '((10 12) (11 13) (15 8) (11 13)))
; ;; 如果不考虑顺序,实现如下
(setq bb (cons '(11 13) (vl-remove-if '(lambda(x)(equal x '(11 13))) aa)))
(setq aa '((10 12) (11 13) (15 8) (11 13)))
(setq bb (vl-remove-if (function (lambda (a1 a2) (and (= (car a1) (car a2)(= (cadr a1) (cadr a2))))) aa))
上述程序没反应,求高手解答?
网友答:
你括号位置不对吧上述程序没反应,求高手解答?
(= (car a1) (car a2))网友答:
自贡黄明儒 发表于 2015-5-21 15:53
你括号位置不对吧
(= (car a1) (car a2))
这里是手误,当时还是没有解决问题
(setq aa '((10 12) (11 13) (15 8) (11 13)))
(setq bb (vl-remove-if (function (lambda (a1 a2) (and (= (car a1) (car a2))(= (cadr a1) (cadr a2))))) aa))
网友答: (setq aa '((10 12) (11 13) (15 8) (11 13)))
(foreach b aa
(if (null (member b ns))
(setq ns (cons b ns))
)
)
(reverse ns)网友答:
琴剑江山_10184 发表于 2015-5-21 18:14
(setq aa '((10 12) (11 13) (15 8) (11 13)))
(foreach b aa
(if (null (member b ns))
这确实是个可行的好方法,但是我想尝试用一个命令行来解决这个问题,也就定位到了vl-remove-if,但是貌似不太好实现呢网友答:
chongkainis 发表于 2015-5-21 20:24
这确实是个可行的好方法,但是我想尝试用一个命令行来解决这个问题,也就定位到了vl-remove-if,但是貌似 ...
解决了
(setq aa '((10 12) (11 13) (15 8) (11 13)))
(setq RET '())
(vl-remove-if
(function (lambda (x)
(IF (NOT (MEMBER x RET))
(SETQ RET (CONS x RET))
nil
) ;_ 结束IF
) ;_ 结束lambda
) ;_ 结束function
aa
) ;_ 结束vl-remove-if
网友答:
琴剑江山_10184 发表于 2015-5-21 18:14
(setq aa '((10 12) (11 13) (15 8) (11 13)))
(foreach b aa
(if (null (member b ns))
解决了
(setq aa '((10 12) (11 13) (15 8) (11 13)))
(setq RET '())
(vl-remove-if
(function (lambda (x)
(IF (NOT (MEMBER x RET))
(SETQ RET (CONS x RET))
nil
) ;_ 结束IF
) ;_ 结束lambda
) ;_ 结束function
aa
) ;_ 结束vl-remove-if网友答: 本帖最后由 yshf 于 2026-2-6 10:52 编辑
(setq aa '((10 12) (11 13) (15 8) (11 13)))
; ;; 如果不考虑顺序,实现如下
(setq bb (cons '(11 13) (vl-remove-if '(lambda(x)(equal x '(11 13))) aa)))
网友答:
yshf 发表于 2015-5-21 20:48
vl-remove-if只能接受只有一个参数的函数, 所以你那个方法是不可实现的。
(setq aa '((10 12) (11 13) (15 8) (11 13)))
; ;; 如果不考虑顺序,实现如下
(setq bb (cons '(11 13) (vl-remove-if '(lambda(x)(equal x '(11 13))) aa)))