找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2076|回复: 14

[研讨] 关于 Repeat 次数变量

[复制链接]
发表于 2014-10-22 17:31:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 Free-Lancer 于 2014-10-22 17:32 编辑

看一个例子
  1. (setq i 5)
  2. (repeat   i
  3.   (setq l (cons (setq i (1- i)) l))
  4. )

运行结果
_$ (setq i 5)
5
_$ (repeat i (setq l (cons (setq i (1- i)) l)))
(0 1 2 3 4)
_$ i
0

大概只有 repeat 用到的这个变量是固定的,循环体内变量的变化不影响 repeat






论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 604个

财富等级: 财运亨通

发表于 2014-10-22 18:08:36 来自手机 | 显示全部楼层
这就是与whi|e的不同,while每循环一次都要检查一下后面是T. or. nil,总是要花时间的吧
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-10-22 19:33:09 | 显示全部楼层
是的,repeat 时候,次数就固定了,否则里面修改循环控制变量,那程序就乱了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-10-22 20:20:14 | 显示全部楼层
正因为如此,选择集转表才可以这样写:
  1. (defun ss->lst (ss / l)
  2.   (if ss
  3.     (repeat (setq n (sslength ss))
  4.       (setq l (cons (ssname ss (setq n (1- n))) l))
  5.     )
  6.   )
  7. )

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1742个

财富等级: 堆金积玉

发表于 2014-10-23 09:50:38 | 显示全部楼层
{:soso_e100:}
个人测试,就算WHILE循环也比repeat快
  1. (defun c:xx ( / t1 t2 SS)
  2.   (get-utime)
  3.   (SETQ SS(ssget))
  4.   (setq t1 (get-utime))
  5.   (ss->lst SS)
  6.   (setq t2 (get-utime))
  7.   (PRINC (strcat "用时:" (rtos (- t2 t1) 2 5) "秒"))
  8. )

  9. (defun ss->lst (ss / l)
  10.   (repeat (setq n (sslength ss))
  11.      (setq l (cons (ssname ss (setq n (1- n))) l))
  12.   )
  13. )

  14. (defun ss->lst (ss / e el i)
  15.   (setq i (sslength ss))
  16.   (while (setq e (ssname ss (setq i (1- i))))
  17.     (setq el (cons e el))
  18.   )
  19.   el
  20. )

  21. (defun get-utime ()
  22.   (* 86400.0 (getvar "tdusrtimer"))
  23. )

点评

把结果也贴出来啊,炫版  详情 回复 发表于 2014-10-23 10:34
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-10-23 10:34:29 | 显示全部楼层
炫翔 发表于 2014-10-23 09:50
个人测试,就算WHILE循环也比repeat快

把结果也贴出来啊,炫版

点评

每个人的电脑配置不同,用时不同 我这里测试: 10万多个图元,测试结果while比repeat快0.3秒  详情 回复 发表于 2014-10-23 11:33
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1742个

财富等级: 堆金积玉

发表于 2014-10-23 11:33:27 | 显示全部楼层
newer 发表于 2014-10-23 10:34
把结果也贴出来啊,炫版

每个人的电脑配置不同,用时不同
我这里测试:
10万多个图元,测试结果while比repeat快0.3秒

点评

测试几十次,取个平均值,在比较下看看,把结果告诉大家。  详情 回复 发表于 2014-10-23 12:35
这个结果与我想象的不一样,看来今后多用while,少用repeat 用repeat还有一个问题是:如果循环内的SS少了的话,会出问题  详情 回复 发表于 2014-10-23 12:04
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2014-10-23 12:04:58 | 显示全部楼层
炫翔 发表于 2014-10-23 11:33
每个人的电脑配置不同,用时不同
我这里测试:
10万多个图元,测试结果while比repeat快0.3秒

这个结果与我想象的不一样,看来今后多用while,少用repeat
用repeat还有一个问题是:如果循环内的SS少了的话,会出问题
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2014-10-23 12:35:49 | 显示全部楼层
炫翔 发表于 2014-10-23 11:33
每个人的电脑配置不同,用时不同
我这里测试:
10万多个图元,测试结果while比repeat快0.3秒

测试几十次,取个平均值,在比较下看看,把结果告诉大家。

点评

老大太较真了, 我这里只是测试选择集转图元,差异不大,详细结果没必要太较真 主要看用途 while 只是判断T 一般这样用 (setq n t)[/backcolor] (while [/backcolor]n[/backcolor]  详情 回复 发表于 2014-10-23 13:41
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1742个

财富等级: 堆金积玉

发表于 2014-10-23 13:41:47 | 显示全部楼层
XDSoft 发表于 2014-10-23 12:35
测试几十次,取个平均值,在比较下看看,把结果告诉大家。

{:soso_e113:}老大太较真了,
我这里只是测试选择集转图元,差异不大,详细结果没必要太较真

主要看用途
  while 只是判断T
一般这样用
   (setq n t)
   (while
n
      .......
       (IF
(> I 100000)           (setq n nil))
    )


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1742个

财富等级: 堆金积玉

发表于 2014-10-23 13:43:03 | 显示全部楼层
数据不大的情况,哪个顺手方便用哪个:)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-10-23 20:41:32 | 显示全部楼层
对比过编译后的吗?
在WIN7 64位 CAD2011 编译后比较 效率优劣:Foreach -> repeat -> while

点评

不知道autodesk这个repeat是哪种方式,只知道c++中遍历无怪乎for … 、foreach、while  详情 回复 发表于 2014-10-23 22:29
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 92个

财富等级: 招财进宝

发表于 2014-10-23 22:07:24 | 显示全部楼层
都是神人那
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-23 22:29:03 来自手机 | 显示全部楼层
高山流水 发表于 2014-10-23 20:41
对比过编译后的吗?
在WIN7 64位 CAD2011 编译后比较 效率优劣:Foreach -> repeat -> while

不知道autodesk这个repeat是哪种方式,只知道c++中遍历无怪乎for … 、foreach、while
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 432个

财富等级: 日进斗金

发表于 2017-7-20 16:52:10 | 显示全部楼层
我喜欢用repeat while搞不好就进入死循环
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-24 02:27 , Processed in 0.195463 second(s), 57 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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