yeahyeah 发表于 2013-8-18 09:14:42

本帖最后由 yeahyeah 于 2013-8-18 16:15 编辑

这楼等着分析foreach和mapcar的区别和转换

yeahyeah 发表于 2013-8-18 10:38:10

本帖最后由 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保险
yjr111G版看帖子真的很仔细,是EVAL的问题,超出了我一般用vl-sort排序


eval
返回 AutoLISP 表达式的求值结果

pzweng 发表于 2013-8-18 15:16:56

yeahyeah 发表于 2013-8-17 14:43 static/image/common/back.gif
收集相关帖子:
繁花落叶:apply和mapcar的用法



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

c961806787 发表于 2013-8-18 21:56:13

高效的语句!赞一个@!

sicky111 发表于 2013-8-19 08:17:54

学习新知识。

fl202 发表于 2013-8-19 17:16:12

本帖最后由 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)


机械工程师 发表于 2014-1-9 08:55:21

我试验的情况有所不同

命令: (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:59

学到不少东西,谢谢

自贡黄明儒 发表于 2014-1-20 21:04:02

确实写得不错,顶了

ou_y_x 发表于 2014-2-20 17:16:34

好帖,受益良多
页: 1 [2] 3
查看完整版本: 有趣的程序语句