明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1980|回复: 3

[讨论] 对比mapcar ‘(lambda(x y …) 与 foreach n list () 的用法

[复制链接]
发表于 2015-10-26 10:17:10 | 显示全部楼层 |阅读模式
本帖最后由 czcxxx 于 2015-10-26 10:49 编辑

对比mapcar ‘(lambda(x y …) 与 foreach n list () 的用法
取两组表中相同位置的不同元素
_$ s1
(<图元名: 7ed69420> <图元名: 7ed69548> <图元名: 7ed69430> <图元名: 7ed69418> <图元名: 7ed69520> <图元名: 7ed69438> <图元名: 7ed69410> <图元名: 7ed694f8> <图元名: 7ed69440> <图元名: 7ed69550> <图元名: 7ed69598> <图元名: 7ed69558> <图元名: 7ed69428> <图元名: 7ed694d0> <图元名: 7ed695a0>)
_$ s1_
(<图元名: 7ed69420> <图元名: 7ed69538> <图元名: 7ed69430> <图元名: 7ed69418> <图元名: 7ed69510> <图元名: 7ed69438> <图元名: 7ed69410> <图元名: 7ed694e8> <图元名: 7ed69440> <图元名: 7ed69550> <图元名: 7ed69588> <图元名: 7ed69558> <图元名: 7ed69428> <图元名: 7ed694c0> <图元名: 7ed695a0>)
_$

(setq ss1 '())
      (setq
        ss1 (last (mapcar '(lambda (z) (setq ss1 (append ss1 z)))
                          (VL-REMOVE-IF
                            'not
                            (mapcar '(lambda (x y)
                                       (IF (NOT (EQUAL X Y))
                                         (list X y)
                                       )
                                     )
                                    s1
                                    s1_
                            )
                          )
                  )
            )
      )

(setq ss1 '())
      (setq ss1        (foreach n (VL-REMOVE-IF
                             'not
                             (mapcar '(lambda (x y)
                                        (IF (NOT (EQUAL X Y))
                                          (list X y)
                                        )
                                      )
                                     s1
                                     s1_
                             )
                           )
                  (setq ss1 (append ss1 n))
                )
      )

(<图元名: 7ed69548> <图元名: 7ed69538> <图元名: 7ed69520> <图元名: 7ed69510> <图元名: 7ed694f8> <图元名: 7ed694e8> <图元名: 7ed69598> <图元名: 7ed69588> <图元名: 7ed694d0> <图元名: 7ed694c0>)
发表于 2015-10-26 13:47:57 | 显示全部楼层
(apply 'append (mapcar '(lambda(x y) (if (equal x y) nil (list x y))) s1 s1_))

评分

参与人数 1金钱 +5 收起 理由
czcxxx + 5 赞一个!

查看全部评分

 楼主| 发表于 2015-10-27 08:53:09 | 显示全部楼层
谢谢USER2128 !!
我没有真正理解 append 函数,
$ (apply 'append (list '(12 23)  '(45 32)  '(123) ))
(12 23 45 32 123)
_$ (apply 'append (list '(12 23) nil '(45 32) nil '(123) nil))
(12 23 45 32 123)
_$ (apply 'append (list '(12 23) nil '(45 32) nil '(123) nil 45))
; 错误: 参数类型错误: listp 45
你的指点让我加深理解之。
谢谢!!!
发表于 2017-8-28 21:30:35 | 显示全部楼层
基本功,支持一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-19 22:52 , Processed in 0.167013 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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