明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5939|回复: 13

[经验] 写给新手的while循环,欢迎高手继续完善~~~

  [复制链接]
发表于 2014-7-21 09:30:19 | 显示全部楼层 |阅读模式
本帖最后由 77077 于 2014-7-21 09:32 编辑

本人也是新手,来这里做点学习笔记~
前段时间有人问循环问题,这里我发一个while循环,欢迎大家一起来讨论,也不知道我这样说,算说清楚了没!!

  1. (defun c:tt( / 循环标记 en)
  2. (setq 循环标记 T);程序开始时,咱暂时假定需要循环
  3. (while 循环标记  ;循环标记为T,执行以下代码
  4.    (if (setq en (entsel "\n点选物件"))
  5.        (progn   ;选到物件时,执行
  6.           (princ (entget(car en)));举例:输出DXF
  7.           ;还有其它要说的,在这里添加即可
  8.         )
  9.      (setq 循环标记 nil);没选到物体时,设定循环标记为nil,退出循环
  10.    )
  11. )
  12. )

评分

参与人数 1明经币 +1 收起 理由
liuhaixin88 + 1 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2014-7-21 10:43:52 | 显示全部楼层
可以精简一下实现同样功能
(defun c:tt ( / en)
  (while (not (setq en (entsel "\n点选物件"))))
  (entget (car en))
)
 楼主| 发表于 2014-7-21 10:56:37 | 显示全部楼层
本帖最后由 77077 于 2014-7-21 11:03 编辑

是啊,梁大师这个减少了很多不必要的运算,速度应该提升不少~~~多谢
不过大师,没循环起来啊~~
发表于 2014-7-21 11:49:50 | 显示全部楼层
(while(setq en(car(entsel "\n点选物件")))
    (princ(entget en))
  )

其实楼主对while的解释相当准确,只是while它本身会先对循环条件进行检查,所以有时可以利用这点去掉多余的if条件判断
发表于 2014-7-21 12:40:08 来自手机 | 显示全部楼层
本帖最后由 langjs 于 2014-7-21 12:46 编辑

while并不特殊,后边可跟and,or甚至progn,自定义函数都行,只要最后结果能判断真假就成。据说while没有repeat执行速度快。
 楼主| 发表于 2014-7-21 13:13:23 | 显示全部楼层
llsheng_73 发表于 2014-7-21 11:49
(while(setq en(car(entsel "\n点选物件")))
    (princ(entget en))
  )

没办法啊,新手只能按照字面意思来做程序~~
发表于 2014-7-21 13:20:41 | 显示全部楼层
本帖最后由 llsheng_73 于 2014-7-21 13:22 编辑
langjs 发表于 2014-7-21 12:40
while并不特殊,后边可跟and,or甚至progn,自定义函数都行,只要最后结果能判断真假就成。据说while没有repe ...


按道理来说应该没有repeat快,因为while它会每次对循环条件进行检查,而repeat只需要一个计数器进行次数计算,不过一般情况下用不着考虑这点差别
但是repeat对于循环次数不能超过所以表示的最大整数(比如32位下不能超过2的31次方减去1  : 2147483647)

(repeat 2147483648 t)
; 错误: 参数类型错误: fixnump: 2.14748e+009
发表于 2014-7-21 13:23:45 | 显示全部楼层
太复杂了
  1. (defun c:tt ()
  2.   (while (setq en (entsel "\n点选物件: "))
  3.     (princ (entget (car en)))
  4.   )
  5.   (princ)
  6. )
发表于 2014-7-21 13:34:12 | 显示全部楼层
llsheng_73 发表于 2014-7-21 13:20
按道理来说应该没有repeat快,因为while它会每次对循环条件进行检查,而repeat只需要一个计数器进行次数 ...

repeat照样对条件进行检查,只不过一个是我们写的lsp表达式,一个是CAD自动添加的表达式。
发表于 2014-7-25 09:24:02 | 显示全部楼层
学习一下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-23 10:12 , Processed in 0.183215 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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