利用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))
上述程序没反应,求高手解答?


网友答: 你括号位置不对吧
(= (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)))
  • 上一篇:my图库v2.0-langjs
  • 下一篇:没有了