空间里是否 发表于 2013-4-7 22:32:42

mapcar lambda函数求解

看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

用google搜到了
http://forums.autodesk.com/t5/Visual-LISP-AutoLISP-and-General/A-expression-include-apply-and-mapcar/td-p/2111142

wowan1314 发表于 2013-4-8 22:27:01

楼主明白了吗?我糊涂了!求翻译!

空间里是否 发表于 2013-4-10 22:35:58

看3楼,和我看的代码一样的道理,有解释

wowan1314 发表于 2013-4-10 22:55:32

有解释所以要求翻译!!!

ll_j 发表于 2013-4-10 23:23:58

wowan1314 发表于 2013-4-10 22:55 static/image/common/back.gif
有解释所以要求翻译!!!

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

不死猫 发表于 2013-4-11 09:46:19

mapcar 当做 foreach
lambda 当做 defun

这样就很容易理解了

wowan1314 发表于 2013-4-11 10:11:42

本帖最后由 wowan1314 于 2013-4-11 11:06 编辑


[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif;;假设 (setq l1'((1 3 2) (2 3 4) (3 4 5)))
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif;;   (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))

Gu_xl 发表于 2013-4-11 10:13:24


;;假设 (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)
      )
结果:'((1 3 2) (4 6 7))
上式等价与==>
(list
((lambda (a b) (apply 'mapcar (cons a b)))
    'min l1)
((lambda (a b) (apply 'mapcar (cons a b)))
    'max l2)
)
上式等价与==>
(list
(apply 'mapcar (cons 'min l1))
(apply 'mapcar (cons 'max l2))
)
上式等价与==>
(list
(apply 'mapcar (list 'min '(1 3 2) '(2 3 4) '(3 4 5)))
(apply 'mapcar (list 'max '( 3 4 2) '(3 5 1) '(4 6 7)))
)
上式等价与==>
(list
(list
(min 1 2 3)
(min 3 3 4)
(min 2 4 5)
)
(list
    (max 3 3 4)
    (max 4 5 6)
    (max 2 1 7)
    )
)

wowan1314 发表于 2013-4-11 10:14:48

本帖最后由 wowan1314 于 2013-4-11 11:08 编辑

(apply 'mapcar (cons '+ plist))/=(mapcar '+ plist)我弄错了应该=(mapcar '+ 去括号的plisT)
页: [1] 2
查看完整版本: mapcar lambda函数求解