aws 发表于 2023-9-16 12:05:16

请教该函数逻辑用法


[*](apply 'mapcar '(MIN (100 50)(40 90)))


这句函数,返回值是(40 50)
请问是什么逻辑,我有点摸不清头脑

zj20190405 发表于 2023-9-16 12:18:08

=(mapcar 'MIN '(100 50) '(40 90))

aws 发表于 2023-9-16 13:04:44

zj20190405 发表于 2023-9-16 12:18
=(mapcar 'MIN '(100 50) '(40 90))

为什么返回的不是40,而是返回一个表,min函数可以支持表的求值?分别对X和y进行判断吗?

zj20190405 发表于 2023-9-16 13:40:54

'(100 50) '(40 90)是两个表

jun353835273 发表于 2023-9-16 17:43:23

(mapcar '(lambda(x) (apply'min x) ) (list' (100 50)'(40 90)))

aws 发表于 2023-9-16 18:42:38

(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求值的,且还能再把值作为表进行返回

Bao_lai 发表于 2023-9-16 22:49:17

跟我想的也有点不一样,我的理解是min(x1 x2 x3) min(y1 y2 y3),没想到返回的是min(x1 y1) (x2 y2) (x3 y3)

llsheng_73 发表于 2023-9-17 00:47:35

可以把整个表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)))

magicheno 发表于 2023-9-18 14:17:02

感谢大佬,学习了
页: [1]
查看完整版本: 请教该函数逻辑用法