明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: yeahyeah

[讨论] 有趣的程序语句

    [复制链接]
 楼主| 发表于 2013-8-18 09:14 | 显示全部楼层
本帖最后由 yeahyeah 于 2013-8-18 16:15 编辑

这楼等着分析foreach和mapcar的区别和转换
 楼主| 发表于 2013-8-18 10:38 | 显示全部楼层
本帖最后由 yeahyeah 于 2013-8-18 15:56 编辑

收集相关帖子:
cabinsummer
[风之影][误导他人的经验]max能处理的最大数量255

(setq n 1 a nil)(repeat 255  (setq a (cons n a) n (1+ n)))(eval (cons 'max a))   ;返回255
(setq n 1 a nil)(repeat 256  (setq a (cons n a) n (1+ n)))(eval (cons 'max a))  ;返回错误: 内部限制: 函数调用的参数太多: MAX

Gu_xl回复道:
经验不都是对的!不要误导人!
参数个数的限制是针对eval函数的,而非max函数!
max函数参数个数没有限制!

试试(apply 'max a)。

cabinsummer  顾版正确,eval最多256个参数,超过这个数,不但max、连+-x/也报错,所以还是apply保险
yjr111  G版看帖子真的很仔细,是EVAL的问题,超出了我一般用vl-sort排序


eval  
返回 AutoLISP 表达式的求值结果
发表于 2013-8-18 15:16 | 显示全部楼层
yeahyeah 发表于 2013-8-17 14:43
收集相关帖子:
繁花落叶:apply和mapcar的用法

(mapcar '(lambda (a b) (apply 'mapcar (cons a (eval b))))
               '(min max)
               '(l1 l2)
)

点评

pzweng老师,你的这个,我还真不知道为什么要加这个eval。。。我的路还很长啊  发表于 2013-8-18 22:44
发表于 2013-8-18 21:56 | 显示全部楼层
高效的语句!赞一个@!

点评

如果有空,你也找个,咱们一起研究下,众乐乐,岂不是最乐乐?呵呵  发表于 2013-8-18 22:42
发表于 2013-8-19 08:17 | 显示全部楼层
学习新知识。
发表于 2013-8-19 17:16 | 显示全部楼层
本帖最后由 fl202 于 2013-8-19 17:36 编辑

命令: (setq p0 '(1 1 1))
(1 1 1)
命令: (setq p1 '(2 4 6))
(2 4 6)
命令: (setq p2 '(3 7 11))
(3 7 11)
命令: (foreach p '(p1 p2) (setq p (mapcar '- (eval p) p0)))
(2 6 10) 你这里写错了!

----------------------------------------------------------------------------------
命令: (mapcar '(lambda (a b) (apply 'mapcar (cons a b)))
(_>                '(min max)
(_>                (list l1 l2)
(_> )
((1 2 0) (5 6 0))
命令: (mapcar '(lambda (a b) (apply 'mapcar (cons a (eval b))))
(_>                '(min max)
(_>                '(l1 l2)
(_> )
((1 2 0) (5 6 0))
加不加eval,结果都是相同的。似乎没必要加? 这段程序看不懂!!!
----------------------------------------------------------------------------------

命令: (setq b1 (list 3 5 2 7 8 9))
(3 5 2 7 8 9)
命令: (setq b2 (list (list 3 4 5) (list 5 3 2)))
((3 4 5) (5 3 2))
命令: (mapcar 'min '(1 0 0)  )
(1 0 0)
命令: (mapcar 'min b1)
(3 5 2 7 8 9)
命令: (apply 'mapcar (cons 'min b1))
; 错误: 参数类型错误: listp 3
命令: (apply 'mapcar (cons 'min b2))
(3 3 2)


点评

那个不是我写的,你要看原帖,我只是拿来,准备好好看看,分析分析,现在还没来得及呢,还是你比我快啊  发表于 2013-8-19 18:10
发表于 2014-1-9 08:55 | 显示全部楼层
我试验的情况有所不同

命令: (setq n 1 a nil)(repeat 256  (setq a (cons n a) n (1+ n)))(eval (cons
'max a))
; 错误: 参数值错误: does not fit in byte: 256

命令: (mapcar '(lambda (a b) (apply 'mapcar (cons a (eval b)))) '(min max) '(l1
l2) )
; 错误: 参数太少

什么情况这是。
发表于 2014-1-20 15:24 | 显示全部楼层
学到不少东西,谢谢
发表于 2014-1-20 21:04 来自手机 | 显示全部楼层
确实写得不错,顶了
发表于 2014-2-20 17:16 | 显示全部楼层
好帖,受益良多
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-1 09:19 , Processed in 0.284103 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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