chongkainis 发表于 2015-5-21 15:40:58

利用vl-remove-if 删除二维表中重复元素

利用vl-remove-if 删除二维表中重复元素
    (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))
上述程序没反应,求高手解答?

自贡黄明儒 发表于 2015-5-21 15:53:58

你括号位置不对吧
(= (car a1) (car a2))

chongkainis 发表于 2015-5-21 18:07:23

自贡黄明儒 发表于 2015-5-21 15:53 static/image/common/back.gif
你括号位置不对吧
(= (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))                                       

琴剑江山_10184 发表于 2015-5-21 18:14:15

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

chongkainis 发表于 2015-5-21 20:24:04

琴剑江山_10184 发表于 2015-5-21 18:14 static/image/common/back.gif
(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:37:36

chongkainis 发表于 2015-5-21 20:24 static/image/common/back.gif
这确实是个可行的好方法,但是我想尝试用一个命令行来解决这个问题,也就定位到了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

chongkainis 发表于 2015-5-21 20:38:21

琴剑江山_10184 发表于 2015-5-21 18:14 static/image/common/back.gif
(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 发表于 2015-5-21 20:48:02

vl-remove-if只能接受只有一个参数的函数, 所以你那个方法是不可实现的。
页: [1]
查看完整版本: 利用vl-remove-if 删除二维表中重复元素