请教该函数逻辑用法
[*](apply 'mapcar '(MIN (100 50)(40 90)))
这句函数,返回值是(40 50)
请问是什么逻辑,我有点摸不清头脑
=(mapcar 'MIN '(100 50) '(40 90)) zj20190405 发表于 2023-9-16 12:18
=(mapcar 'MIN '(100 50) '(40 90))
为什么返回的不是40,而是返回一个表,min函数可以支持表的求值?分别对X和y进行判断吗? '(100 50) '(40 90)是两个表 (mapcar '(lambda(x) (apply'min x) ) (list' (100 50)'(40 90))) (defun c:gg()
(setq lst1 '(1 2 -8 -9 -15))
(setq lst2 '(4 -5 6 -8))
(setq lst3 '(7 8 9 55))
(setq lst4 '(-1 -2 -3 -6))
(setq n(mapcar 'min lst1 lst2 lst3 lst4))
(princ n)
(princ)
)
谢谢讲解,大概明白了,关键在于mapcar函数,是支持多个表进行min求值的,且还能再把值作为表进行返回 跟我想的也有点不一样,我的理解是min(x1 x2 x3) min(y1 y2 y3),没想到返回的是min(x1 y1) (x2 y2) (x3 y3) 可以把整个表lst有多少项当成有多少行,每个子项etim有多少项当成各自有多少列
那么(apply 'mapcar(cons 'min lst))就是分别对各列求最小值,当然也可以求最大值
在CAD中可以用来求点集的包容盒(左下角和右上角),当然,坐标一般是三维的,如果仅需要二维线框,可以给点集增加一个二维点,不用管点集本身是二维坐标还是三维坐标
(mapcar'(lambda(fun e)(apply'mapcar(vl-list* fun e lst)))'(min max)'((1e308 1e308)(-1e308 -1e308)))
感谢大佬,学习了
页:
[1]