Sweety 发表于 2022-7-6 10:27:35

两种入门方式

你好
 
这两个获得的实体起点之间有什么区别吗?
 
(setq e (car (entsel "\nSelect Line:")))

 
这个。。
 

(setq pt (cdr (assoc 10 (entget e))))

 
还有这个。。
 

(setq pt1 (cons (cdr (assoc 10 (entget e))) pt1))

 
尽管两个返回值相同。
 
非常感谢。

Lee Mac 发表于 2022-7-6 10:46:39

如果没有在某种循环中使用,则第二个循环具有冗余代码。
 
对于单个评估,两种方法都是相同的-第二种方法只有不相关的代码,这使得它效率更低。
 
我建议您研究“cons”函数-请在ACAD开发帮助文件中阅读它。
 
“cons”的使用示例:
 
在两个原子上使用“cons”创建点对:

(cons a b)==>(a . b)

 
请注意,点对只能由两个原子创建:
(cons '(a b) '(c d))==>((a b) c d)
 
将项目添加到列表:

Sweety 发表于 2022-7-6 11:03:28

好啊很不错的。
 
我想最好处理或使用示例中的第一个代码来获取坐标点。
 
但对于与“cons”函数相关的第二个获得点,它必须用于重新组合坐标或点对
作为一种更好更快的施工方式,这在某种程度上与你有关。
 
非常感谢李的好意。

Lee Mac 发表于 2022-7-6 11:14:02

“cons”通常用于在循环中快速建立列表;缺点是列表将被反转,但比使用“append”更快。
 
例如
 

(foreach x '(1 2 3 4 5)
(setq lst (cons x lst))
)

==>lst : (5 4 3 2 1)

 
备选方案:
 

(foreach x '(1 2 3 4 5)
(setq lst (append lst (list x)))
)

==>lst : (1 2 3 4 5)

Sweety 发表于 2022-7-6 11:16:42

关于第一个例子,我在defun“massoc”中看到过,但我记不太清楚,它与“reverse”函数一起使用
再次按顺序重建列表。
 
所以对于你们例子中的第二个例子,它会缩短我们使用“反向”函数的时间。
 
一个非常有力的例子。
 
非常感谢你。

Kerry Brown 发表于 2022-7-6 11:30:28

您可能会发现使用cons-then-reverse比使用append更快。
.. 至少这是我的回忆。
 
但时差不会影响大多数随意的代码应用程序。
 
8
 
页: [1]
查看完整版本: 两种入门方式