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
用google搜到了
http://forums.autodesk.com/t5/Visual-LISP-AutoLISP-and-General/A-expression-include-apply-and-mapcar/td-p/2111142 楼主明白了吗?我糊涂了!求翻译! 看3楼,和我看的代码一样的道理,有解释 有解释所以要求翻译!!! wowan1314 发表于 2013-4-10 22:55 static/image/common/back.gif
有解释所以要求翻译!!!
或许你用ACAD的Vlisp追踪一下可以更清楚。
说实在的,想一想都犯糊涂,还是根据自己的理解来做吧,毕竟那是大师的东西,要全面掌握还是有难度的。 mapcar 当做 foreach
lambda 当做 defun
这样就很容易理解了 本帖最后由 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))
;;假设 (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 11:08 编辑
(apply 'mapcar (cons '+ plist))/=(mapcar '+ plist)我弄错了应该=(mapcar '+ 去括号的plisT)
页:
[1]
2