明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 946|回复: 9

[提问] 请教该函数逻辑用法

[复制链接]
发表于 2023-9-16 12:05:16 | 显示全部楼层 |阅读模式
  • (apply 'mapcar '(MIN (100 50)(40 90)))


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

点评

100 和 40 取最小值,50和90取最小值,然后组成表,不就是 (40 50) 么?  发表于 2023-9-19 08:44
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2023-9-16 12:18:08 | 显示全部楼层
=(mapcar 'MIN '(100 50) '(40 90))
 楼主| 发表于 2023-9-16 13:04:44 | 显示全部楼层
zj20190405 发表于 2023-9-16 12:18
=(mapcar 'MIN '(100 50) '(40 90))

为什么返回的不是40,而是返回一个表,min函数可以支持表的求值?分别对X和y进行判断吗?
发表于 2023-9-16 13:40:54 | 显示全部楼层
'(100 50) '(40 90)是两个表
发表于 2023-9-16 17:43:23 | 显示全部楼层
  1. (mapcar '(lambda(x) (apply'min x) ) (list' (100 50)'(40 90)))
复制代码
 楼主| 发表于 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求值的,且还能再把值作为表进行返回
发表于 2023-9-16 22:49:17 | 显示全部楼层
跟我想的也有点不一样,我的理解是min(x1 x2 x3) min(y1 y2 y3),没想到返回的是min(x1 y1) (x2 y2) (x3 y3)
发表于 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)))
发表于 2023-9-18 14:17:02 | 显示全部楼层
感谢大佬,学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-17 04:52 , Processed in 0.170714 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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