明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5729|回复: 13

[基础] mapcar lambda函数求解

[复制链接]
发表于 2013-4-7 22:32:42 | 显示全部楼层 |阅读模式
看lee-mac的函数SelectionSet BoundingBox里面的其中一个不理解,求解答(mapcar '(lambda ( a b ) (apply 'mapcar (cons a b))) '(min max) (list l1 l2))主要是里面的apply函数不是很理解,求解答

地址:http://lee-mac.com/ssboundingbox.html
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2013-4-8 21:25:27 | 显示全部楼层
发表于 2013-4-8 22:27:01 | 显示全部楼层
楼主明白了吗?我糊涂了!求翻译!
 楼主| 发表于 2013-4-10 22:35:58 | 显示全部楼层
看3楼,和我看的代码一样的道理,有解释
发表于 2013-4-10 22:55:32 | 显示全部楼层
有解释所以要求翻译!!!
发表于 2013-4-10 23:23:58 | 显示全部楼层
wowan1314 发表于 2013-4-10 22:55
有解释所以要求翻译!!!

或许你用ACAD的Vlisp追踪一下可以更清楚。
说实在的,想一想都犯糊涂,还是根据自己的理解来做吧,毕竟那是大师的东西,要全面掌握还是有难度的。

点评

是的!本来以为知道咋用呢!一看别人用出来的样子又不懂了!还不会玩追踪!惭愧。慢慢来吧  发表于 2013-4-10 23:34
发表于 2013-4-11 09:46:19 | 显示全部楼层
mapcar 当做 foreach
lambda 当做 defun

这样就很容易理解了
发表于 2013-4-11 10:11:42 | 显示全部楼层
本帖最后由 wowan1314 于 2013-4-11 11:06 编辑

  • ;;假设 (setq l1  '((1 3 2) (2 3 4) (3 4 5)))
  • ;;     (setq l2 '(( 3 4 2) (3 5 1) (4 6 7)))

(mapcar '(lambda ( a b ) (apply 'mapcar (cons a b))) '(min max) (list l1 l2))
/=mapcar min l1 及 mapcar max l2 而是等价于(list (apply 'mapcar (cons 'min l1)) (apply 'mapcar (cons 'max l2)))

而(mapcar '1+ '(1 2 3))=((1+ 1) (1+ 2) (1+ 3))  

我把复杂的问题想简单化了! 导致错误。

(mapcar 'max l2)与(apply 'mapcar (cons 'max l2)))是不同的!!!!
(setq l2 '(( 3 4 2) (3 5 1) (4 6 7)))
(MAPCAR 'MAX '( 3 4 2) '(3 5 1) '(4 6 7))= (apply 'mapcar (cons 'max l2))

发表于 2013-4-11 10:13:24 | 显示全部楼层
  1. ;;假设 (setq l1  '((1 3 2) (2 3 4) (3 4 5)))
  2. ;;     (setq l2 '(( 3 4 2) (3 5 1) (4 6 7)))
  3. (mapcar '(lambda (a b) (apply 'mapcar (cons a b)))
  4.         '(min max)
  5.         (list l1 l2)
  6.         )
  7. 结果:'((1 3 2) (4 6 7))
  8. 上式等价与==>
  9. (list
  10.   ((lambda (a b) (apply 'mapcar (cons a b)))
  11.     'min l1)
  12.   ((lambda (a b) (apply 'mapcar (cons a b)))
  13.     'max l2)
  14.   )
  15. 上式等价与==>
  16. (list
  17.   (apply 'mapcar (cons 'min l1))
  18.   (apply 'mapcar (cons 'max l2))
  19.   )
  20. 上式等价与==>
  21. (list
  22.   (apply 'mapcar (list 'min '(1 3 2) '(2 3 4) '(3 4 5)))
  23.   (apply 'mapcar (list 'max '( 3 4 2) '(3 5 1) '(4 6 7)))
  24.   )
  25. 上式等价与==>
  26. (list
  27.   (list
  28.   (min 1 2 3)
  29.   (min 3 3 4)
  30.   (min 2 4 5)
  31.   )
  32.   (list
  33.     (max 3 3 4)
  34.     (max 4 5 6)
  35.     (max 2 1 7)
  36.     )
  37.   )

点评

我看错了!!! 你是对的  发表于 2013-4-11 10:28
不对吧?! L2改为 (setq l2 '(( 3 4 2) (3 6 1) (4 5 7))) 你看结果还是不变。  发表于 2013-4-11 10:27
发表于 2013-4-11 10:14:48 | 显示全部楼层
本帖最后由 wowan1314 于 2013-4-11 11:08 编辑

(apply 'mapcar (cons '+ plist))/=(mapcar '+ plist)我弄错了应该=(mapcar '+ 去括号的plisT)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-6 09:37 , Processed in 0.187012 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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