找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2267|回复: 8

[求助] 关于lambda和vl-remove-if-not

[复制链接]
发表于 2018-4-24 22:03:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 124803430 于 2018-4-24 22:05 编辑

(((541877.0 2795.04 0.0) "高程点" "图层") ((498546.0 4838.52 0.0) "高程点" "图层") ((447400.0 38042.7 0.0) "高程点" "图层") ((405636.0 38930.7 0.0) "高程点" "图层") ((442243.0 8798.93 0.0) "高程点" "图层") ((398913.0 10842.4 0.0) "高程点" "图层") ((97641.1 -108326.0 0.0) "高程点" "图层") ((54310.4 -106282.0 0.0) "高程点" "图层") ((97641.1 -49035.1 0.0) "高程点" "图层") ((54310.4 -46991.6 0.0) "高程点" "图层") ((197274.0 2795.04 0.0) "高程点" "图层") ((153944.0 4838.52 0.0) "高程点" "图层") ((102797.0 38042.7 0.0) "高程点" "图层") ((61033.2 38930.7 0.0) "高程点" "图层") ((97641.1 8798.93 0.0) "高程点" "图层") ((54310.4 10842.4 0.0) "高程点" "图层") ((541877.0 2795.04 0.0) "高程点" "图层") ((498546.0 4838.52 0.0) "高程点" "图层") ((447400.0 38042.7 0.0) "高程点" "图层") ((405636.0 38930.7 0.0) "高程点" "图层") ((442243.0 8798.93 0.0) "高程点" "图层") ((398913.0 10842.4 0.0) "高程点" "图层") ((97641.1 -108326.0 0.0) "高程点" "图层") ((54310.4 -106282.0 0.0) "高程点" "图层") ((97641.1 -49035.1 0.0) "高程点" "图层") ((54310.4 -46991.6 0.0) "高程点" "图层") ((197274.0 2795.04 0.0) "高程点" "图层") ((153944.0 4838.52 0.0) "高程点" "图层") ((102797.0 38042.7 0.0) "高程点" "图层") ((61033.2 38930.7 0.0) "高程点" "图层") ((97641.1 8798.93 0.0) "高程点" "图层") ((54310.4 10842.4 0.0) "高程点" "图层") ((405636.0 38930.7 0.0) "高程点" "图层") ((61033.2 38930.7 0.0) "高程点" "图层") ((447400.0 38042.7 0.0) "高程点" "图层") ((102797.0 38042.7 0.0) "高程点" "图层") ((398913.0 10842.4 0.0) "高程点" "图层") ((54310.4 10842.4 0.0) "高程点" "图层") ((442243.0 8798.93 0.0) "高程点" "图层") ((97641.1 8798.93 0.0) "高程点" "图层") ((498546.0 4838.52 0.0) "高程点" "图层") ((153944.0 4838.52 0.0) "高程点" "图层") ((541877.0 2795.04 0.0) "高程点" "图层") ((197274.0 2795.04 0.0) "高程点" "图层") ((54310.4 -46991.6 0.0) "高程点" "图层") ((97641.1 -49035.1 0.0) "高程点" "图层") ((54310.4 -106282.0 0.0) "高程点" "图层") ((97641.1 -108326.0 0.0) "高程点" "图层"))


(vl-remove-if-not '(lambda (x)  (equal (caar x) (cadar x) 0)) lst)


上面函数我想的是用remove直接求出x轴相同的点表
想了很久,lambda是遍历。上面函数是不是根本就不成立????


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-4-24 22:11:20 | 显示全部楼层
你上面的表是几层?
你把你的结果,也贴出对比下。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-4-24 22:21:02 | 显示全部楼层
就三行代码

(setq lst (mapcar '(lambda(x)(cons (caar x) x)) a))
(setq lst (xd::list:groupbyindex lst 0.01))
(setq lst (mapcar 'cdr lst))


每行你看懂了,思路很重要。

你要的结果:

'(
(((102797.0 38042.7 0.0) "高程点" "图层")
    ((102797.0 38042.7 0.0) "高程点" "图层")
    ((102797.0 38042.7 0.0) "高程点" "图层")
  )
   (((153944.0 4838.52 0.0) "高程点" "图层")
     ((153944.0 4838.52 0.0) "高程点" "图层")
     ((153944.0 4838.52 0.0) "高程点" "图层")
   )
   (((197274.0 2795.04 0.0) "高程点" "图层")
     ((197274.0 2795.04 0.0) "高程点" "图层")
     ((197274.0 2795.04 0.0) "高程点" "图层")
   )
   (((398913.0 10842.4 0.0) "高程点" "图层")
     ((398913.0 10842.4 0.0) "高程点" "图层")
     ((398913.0 10842.4 0.0) "高程点" "图层")
   )
   (((405636.0 38930.7 0.0) "高程点" "图层")
     ((405636.0 38930.7 0.0) "高程点" "图层")
     ((405636.0 38930.7 0.0) "高程点" "图层")
   )
   (((442243.0 8798.93 0.0) "高程点" "图层")
     ((442243.0 8798.93 0.0) "高程点" "图层")
     ((442243.0 8798.93 0.0) "高程点" "图层")
   )
   (((447400.0 38042.7 0.0) "高程点" "图层")
     ((447400.0 38042.7 0.0) "高程点" "图层")
     ((447400.0 38042.7 0.0) "高程点" "图层")
   )
   (((498546.0 4838.52 0.0) "高程点" "图层")
     ((498546.0 4838.52 0.0) "高程点" "图层")
     ((498546.0 4838.52 0.0) "高程点" "图层")
   )
   (((541877.0 2795.04 0.0) "高程点" "图层")
     ((541877.0 2795.04 0.0) "高程点" "图层")
     ((541877.0 2795.04 0.0) "高程点" "图层")
   )
   (((54310.4 -46991.6 0.0) "高程点" "图层")
     ((54310.4 10842.4 0.0) "高程点" "图层")
     ((54310.4 -106282.0 0.0) "高程点" "图层")
     ((54310.4 -46991.6 0.0) "高程点" "图层")
     ((54310.4 -106282.0 0.0) "高程点" "图层")
     ((54310.4 10842.4 0.0) "高程点" "图层")
     ((54310.4 -46991.6 0.0) "高程点" "图层")
     ((54310.4 10842.4 0.0) "高程点" "图层")
     ((54310.4 -106282.0 0.0) "高程点" "图层")
   )
   (((61033.2 38930.7 0.0) "高程点" "图层")
     ((61033.2 38930.7 0.0) "高程点" "图层")
     ((61033.2 38930.7 0.0) "高程点" "图层")
   )
   (((97641.1 -49035.1 0.0) "高程点" "图层")
     ((97641.1 8798.93 0.0) "高程点" "图层")
     ((97641.1 -108326.0 0.0) "高程点" "图层")
     ((97641.1 -49035.1 0.0) "高程点" "图层")
     ((97641.1 -108326.0 0.0) "高程点" "图层")
     ((97641.1 8798.93 0.0) "高程点" "图层")
     ((97641.1 -49035.1 0.0) "高程点" "图层")
     ((97641.1 8798.93 0.0) "高程点" "图层")
     ((97641.1 -108326.0 0.0) "高程点" "图层")
   )
)

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-4-24 22:28:44 | 显示全部楼层
下面是 Y坐标相同的分到一组

  1. (setq lst (mapcar '(lambda(x)(cons (cadar x) x)) a))
  2. (setq lst (xd::list:groupbyindex lst 0.01))
  3. (setq lst (mapcar 'cdr lst))



((((54310.4 -106282.0 0.0) "高程点" "图层")
   ((54310.4 -106282.0 0.0) "高程点" "图层")
   ((54310.4 -106282.0 0.0) "高程点" "图层")
)
  (((97641.1 -108326.0 0.0) "高程点" "图层")
    ((97641.1 -108326.0 0.0) "高程点" "图层")
    ((97641.1 -108326.0 0.0) "高程点" "图层")
  )
  (((54310.4 -46991.6 0.0) "高程点" "图层")
    ((54310.4 -46991.6 0.0) "高程点" "图层")
    ((54310.4 -46991.6 0.0) "高程点" "图层")
  )
  (((97641.1 -49035.1 0.0) "高程点" "图层")
    ((97641.1 -49035.1 0.0) "高程点" "图层")
    ((97641.1 -49035.1 0.0) "高程点" "图层")
  )
  (((398913.0 10842.4 0.0) "高程点" "图层")
    ((398913.0 10842.4 0.0) "高程点" "图层")
    ((398913.0 10842.4 0.0) "高程点" "图层")
    ((54310.4 10842.4 0.0) "高程点" "图层")
    ((54310.4 10842.4 0.0) "高程点" "图层")
    ((54310.4 10842.4 0.0) "高程点" "图层")
  )
  (((541877.0 2795.04 0.0) "高程点" "图层")
    ((541877.0 2795.04 0.0) "高程点" "图层")
    ((541877.0 2795.04 0.0) "高程点" "图层")
    ((197274.0 2795.04 0.0) "高程点" "图层")
    ((197274.0 2795.04 0.0) "高程点" "图层")
    ((197274.0 2795.04 0.0) "高程点" "图层")
  )
  (((447400.0 38042.7 0.0) "高程点" "图层")
    ((447400.0 38042.7 0.0) "高程点" "图层")
    ((447400.0 38042.7 0.0) "高程点" "图层")
    ((102797.0 38042.7 0.0) "高程点" "图层")
    ((102797.0 38042.7 0.0) "高程点" "图层")
    ((102797.0 38042.7 0.0) "高程点" "图层")
  )
  (((405636.0 38930.7 0.0) "高程点" "图层")
    ((405636.0 38930.7 0.0) "高程点" "图层")
    ((405636.0 38930.7 0.0) "高程点" "图层")
    ((61033.2 38930.7 0.0) "高程点" "图层")
    ((61033.2 38930.7 0.0) "高程点" "图层")
    ((61033.2 38930.7 0.0) "高程点" "图层")
  )
  (((498546.0 4838.52 0.0) "高程点" "图层")
    ((498546.0 4838.52 0.0) "高程点" "图层")
    ((498546.0 4838.52 0.0) "高程点" "图层")
    ((153944.0 4838.52 0.0) "高程点" "图层")
    ((153944.0 4838.52 0.0) "高程点" "图层")
    ((153944.0 4838.52 0.0) "高程点" "图层")
  )
  (((442243.0 8798.93 0.0) "高程点" "图层")
    ((442243.0 8798.93 0.0) "高程点" "图层")
    ((442243.0 8798.93 0.0) "高程点" "图层")
    ((97641.1 8798.93 0.0) "高程点" "图层")
    ((97641.1 8798.93 0.0) "高程点" "图层")
    ((97641.1 8798.93 0.0) "高程点" "图层")
  )
)

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-25 09:31:22 | 显示全部楼层
我的那个没结果,就是nil
感谢,我确实没理解透。
你的代码我好好研究

点评

XD::LIST:GROUPBYINDEX是个通用的表的分组函数 你如果从论坛拷贝的这个函数,用上面三行得不到结果,那你就去加载下 “晓东通用LISP函数库”。 问题要归纳整理,才提高效率。不要这次要排X轴,写个代码,下次排Y  详情 回复 发表于 2018-4-25 10:08
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3729个

财富等级: 富可敌国

发表于 2018-4-25 09:46:16 | 显示全部楼层
    (setq lst (vl-sort lst '(lambda(a b)
                                (if (equal (caar a) (caar b) 1e-3)
                                    (> (cadar a) (cadar b))
                                    (> (caar a)(caar b))
                                )
                            )
              )
    )
    (setq jgb nil)
    (while (setq pt (car lst))
        (setq zbb (vl-remove-if-not '(lambda(a)(= (caar pt) (caar a))) lst))
        (setq jgb (cons zbb jgb))
        (setq lst (vl-remove-if '(lambda(a)(= (caar pt) (caar a))) lst))
    )

((((54310.4 10842.4 0.0) "高程点" "图层") ((54310.4 10842.4 0.0) "高程点" "图层")
  ((54310.4 10842.4 0.0) "高程点" "图层") ((54310.4 -46991.6 0.0) "高程点" "图层")
  ((54310.4 -46991.6 0.0) "高程点" "图层") ((54310.4 -46991.6 0.0) "高程点" "图层")
  ((54310.4 -106282.0 0.0) "高程点" "图层") ((54310.4 -106282.0 0.0) "高程点" "图层")
  ((54310.4 -106282.0 0.0) "高程点" "图层"))
(((61033.2 38930.7 0.0) "高程点" "图层")
  ((61033.2 38930.7 0.0) "高程点" "图层") ((61033.2 38930.7 0.0) "高程点" "图层"))
(((97641.1 8798.93 0.0) "高程点" "图层") ((97641.1 8798.93 0.0) "高程点" "图层")
  ((97641.1 8798.93 0.0) "高程点" "图层") ((97641.1 -49035.1 0.0) "高程点" "图层")
  ((97641.1 -49035.1 0.0) "高程点" "图层") ((97641.1 -49035.1 0.0) "高程点" "图层")
  ((97641.1 -108326.0 0.0) "高程点" "图层") ((97641.1 -108326.0 0.0) "高程点" "图层")
  ((97641.1 -108326.0 0.0) "高程点" "图层"))
(((102797.0 38042.7 0.0) "高程点" "图层")
  ((102797.0 38042.7 0.0) "高程点" "图层") ((102797.0 38042.7 0.0) "高程点" "图层"))
(((153944.0 4838.52 0.0) "高程点" "图层") ((153944.0 4838.52 0.0) "高程点" "图层")
  ((153944.0 4838.52 0.0) "高程点" "图层"))
(((197274.0 2795.04 0.0) "高程点" "图层")
  ((197274.0 2795.04 0.0) "高程点" "图层") ((197274.0 2795.04 0.0) "高程点" "图层"))
(((398913.0 10842.4 0.0) "高程点" "图层") ((398913.0 10842.4 0.0) "高程点" "图层")
  ((398913.0 10842.4 0.0) "高程点" "图层"))
(((405636.0 38930.7 0.0) "高程点" "图层")
  ((405636.0 38930.7 0.0) "高程点" "图层") ((405636.0 38930.7 0.0) "高程点" "图层"))
(((442243.0 8798.93 0.0) "高程点" "图层") ((442243.0 8798.93 0.0) "高程点" "图层")
  ((442243.0 8798.93 0.0) "高程点" "图层"))
(((447400.0 38042.7 0.0) "高程点" "图层")
  ((447400.0 38042.7 0.0) "高程点" "图层") ((447400.0 38042.7 0.0) "高程点" "图层"))
(((498546.0 4838.52 0.0) "高程点" "图层") ((498546.0 4838.52 0.0) "高程点" "图层")
  ((498546.0 4838.52 0.0) "高程点" "图层"))
(((541877.0 2795.04 0.0) "高程点" "图层")
  ((541877.0 2795.04 0.0) "高程点" "图层") ((541877.0 2795.04 0.0) "高程点" "图层"))
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3729个

财富等级: 富可敌国

发表于 2018-4-25 10:05:01 | 显示全部楼层
本帖最后由 dnbcgrass 于 2018-4-25 10:21 编辑

;或者如下也行
   (setq jgb nil)
    (while (setq pt (car lst))
        (setq zbb (vl-remove-if-not '(lambda(a)(= (caar pt) (caar a))) lst))
        (setq jgb (cons zbb  jgb))
        (setq lst (vl-remove-if '(lambda(a)(= (caar pt) (caar a))) lst))
    )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-4-25 10:08:56 | 显示全部楼层
本帖最后由 newer 于 2018-4-25 10:12 编辑
124803430 发表于 2018-4-25 09:31
我的那个没结果,就是nil
感谢,我确实没理解透。
你的代码我好好研究

XD::LIST:GROUPBYINDEX是个通用的表的分组函数
你如果从论坛拷贝的这个函数,用上面三行得不到结果,那你就去加载下 “晓东通用LISP函数库”。

问题要归纳整理,才提高效率。不要这次要排X轴,写个代码,下次排Y轴,又重写,以后排Z轴或者其他条件呢?

表要分组,首先要有条件,根据什么分组。根据什么条件,就把条件提出来,放到子表的第一个元素。

然后你的代码,根据子表的 第一个元素(条件),进行分组。

分组后,把第一个条件元素去掉,就是原来的分组后的表(就是上面三行代码的最后一行)

上面三行代码
第一行,把条件提出放到子表的第一个元素
第二行,分组
第三行,把第一个元素去掉,得到分组后的表。

要善于用MAPCAR和LAMBBDA组合,尽量少用WHILE,REPEAT,FOREACH其他循环。
MAPCAR是LISP的精髓。用它,才能让表层层递进,求值结果做上层函数的参数,才体现了LISP作为人工智能首选语言的作用。

点评

谢谢大佬指点  详情 回复 发表于 2018-4-25 10:38
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-25 10:38:29 | 显示全部楼层
newer 发表于 2018-4-25 10:08
XD::LIST:GROUPBYINDEX是个通用的表的分组函数
你如果从论坛拷贝的这个函数,用上面三行得不到结果,那 ...

谢谢大佬指点
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-24 20:47 , Processed in 0.190748 second(s), 45 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表