找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: newer

[有奖答题] 让VL-POSITION返回多个索引

[复制链接]

已领礼包: 1268个

财富等级: 财源广进

发表于 2017-5-15 19:44:49 | 显示全部楼层
本帖最后由 newer 于 2017-5-15 19:46 编辑

和黄老的意思一样
  1. (defun vl-position8 (n l / i ll)
  2.   (setq i 0)
  3.   (foreach x l
  4.     (if        (eq x n)
  5.       (setq ll (cons i ll))
  6.     )
  7.     (setq i (1+ i))
  8.   )
  9.   (reverse ll)
  10. )

评分

参与人数 1威望 +1 D豆 +5 贡献 +1 收起 理由
newer + 1 + 5 + 1 热心帮忙奖!

查看全部评分

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

 楼主| 发表于 2017-5-15 19:45:15 | 显示全部楼层

重启了CAD, 测试了5次


  1. 命令: test
  2. Elapsed milliseconds / relative speed for 16384 iteration(s):

  3.     (VL-POSITIONS7 1 LST).....1172 / 1.64 <fastest>
  4.     (VL-POSITIONS6 1 LST).....1343 / 1.43
  5.     (VL-POSITIONS4 1 LST).....1344 / 1.43
  6.     (VL-POSITIONS5 1 LST).....1609 / 1.19
  7.     (VL-POSITIONS2 1 LST).....1734 / 1.11
  8.     (VL-POSITIONS1 1 LST).....1922 / 1 <slowest>

  9. 命令:
  10. 命令: test
  11. Elapsed milliseconds / relative speed for 16384 iteration(s):

  12.     (VL-POSITIONS6 1 LST).....1281 / 1.53 <fastest>
  13.     (VL-POSITIONS7 1 LST).....1281 / 1.53
  14.     (VL-POSITIONS4 1 LST).....1422 / 1.37
  15.     (VL-POSITIONS5 1 LST).....1672 / 1.17
  16.     (VL-POSITIONS2 1 LST).....1859 / 1.05
  17.     (VL-POSITIONS1 1 LST).....1954 / 1 <slowest>

  18. 命令:
  19. 命令:
  20. Elapsed milliseconds / relative speed for 16384 iteration(s):

  21.     (VL-POSITIONS6 1 LST).....1219 / 1.51 <fastest>
  22.     (VL-POSITIONS7 1 LST).....1328 / 1.39
  23.     (VL-POSITIONS4 1 LST).....1578 / 1.17
  24.     (VL-POSITIONS5 1 LST).....1641 / 1.12
  25.     (VL-POSITIONS2 1 LST).....1704 / 1.08
  26.     (VL-POSITIONS1 1 LST).....1844 / 1 <slowest>

  27. 命令:
  28. 命令:
  29. Elapsed milliseconds / relative speed for 16384 iteration(s):

  30.     (VL-POSITIONS7 1 LST).....1093 / 1.89 <fastest>
  31.     (VL-POSITIONS6 1 LST).....1219 / 1.69
  32.     (VL-POSITIONS4 1 LST).....1422 / 1.45
  33.     (VL-POSITIONS5 1 LST).....1813 / 1.14
  34.     (VL-POSITIONS2 1 LST).....2015 / 1.02
  35.     (VL-POSITIONS1 1 LST).....2062 / 1 <slowest>

  36. 命令:
  37. 命令:
  38. Elapsed milliseconds / relative speed for 16384 iteration(s):

  39.     (VL-POSITIONS6 1 LST).....1172 / 1.59 <fastest>
  40.     (VL-POSITIONS7 1 LST).....1172 / 1.59
  41.     (VL-POSITIONS4 1 LST).....1281 / 1.45
  42.     (VL-POSITIONS5 1 LST).....1500 / 1.24
  43.     (VL-POSITIONS2 1 LST).....1656 / 1.12
  44.     (VL-POSITIONS1 1 LST).....1860 / 1 <slowest>

  45. 命令:

复制代码


7---两次第一
6---一次第一
7,6 并列两次第一

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

 楼主| 发表于 2017-5-15 19:55:01 | 显示全部楼层
ST的 VL-POSITIONS8加入战团

5次测试结果:


  1. 命令: (repeat 5 (c:test))
  2. Elapsed milliseconds / relative speed for 16384 iteration(s):

  3.     (VL-POSITIONS7 1 LST).....1031 / 1.74 <fastest>
  4.     (VL-POSITIONS6 1 LST).....1047 / 1.72
  5.     (VL-POSITIONS8 1 LST).....1078 / 1.67
  6.     (VL-POSITIONS4 1 LST).....1421 / 1.26
  7.     (VL-POSITIONS5 1 LST).....1453 / 1.24
  8.     (VL-POSITIONS2 1 LST).....1656 / 1.09
  9.     (VL-POSITIONS1 1 LST).....1797 / 1 <slowest>
  10. Elapsed milliseconds / relative speed for 16384 iteration(s):

  11.     (VL-POSITIONS8 1 LST).....1093 / 1.6 <fastest>
  12.     (VL-POSITIONS7 1 LST).....1109 / 1.58
  13.     (VL-POSITIONS6 1 LST).....1188 / 1.47
  14.     (VL-POSITIONS4 1 LST).....1297 / 1.35
  15.     (VL-POSITIONS1 1 LST).....1641 / 1.07
  16.     (VL-POSITIONS2 1 LST).....1672 / 1.05
  17.     (VL-POSITIONS5 1 LST).....1750 / 1 <slowest>
  18. Elapsed milliseconds / relative speed for 16384 iteration(s):

  19.     (VL-POSITIONS6 1 LST).....1265 / 1.48 <fastest>
  20.     (VL-POSITIONS8 1 LST).....1266 / 1.48
  21.     (VL-POSITIONS4 1 LST).....1313 / 1.43
  22.     (VL-POSITIONS7 1 LST).....1422 / 1.32
  23.     (VL-POSITIONS5 1 LST).....1656 / 1.13
  24.     (VL-POSITIONS1 1 LST).....1843 / 1.02
  25.     (VL-POSITIONS2 1 LST).....1875 / 1 <slowest>
  26. Elapsed milliseconds / relative speed for 16384 iteration(s):

  27.     (VL-POSITIONS8 1 LST).....1125 / 1.89 <fastest>
  28.     (VL-POSITIONS7 1 LST).....1281 / 1.66
  29.     (VL-POSITIONS5 1 LST).....1687 / 1.26
  30.     (VL-POSITIONS1 1 LST).....1734 / 1.23
  31.     (VL-POSITIONS6 1 LST).....1969 / 1.08
  32.     (VL-POSITIONS2 1 LST).....2032 / 1.05
  33.     (VL-POSITIONS4 1 LST).....2125 / 1 <slowest>
  34. Elapsed milliseconds / relative speed for 16384 iteration(s):

  35.     (VL-POSITIONS8 1 LST).....1078 / 2.09 <fastest>
  36.     (VL-POSITIONS6 1 LST).....1250 / 1.8
  37.     (VL-POSITIONS7 1 LST).....1359 / 1.66
  38.     (VL-POSITIONS4 1 LST).....1406 / 1.6
  39.     (VL-POSITIONS5 1 LST).....1609 / 1.4
  40.     (VL-POSITIONS1 1 LST).....2016 / 1.12
  41.     (VL-POSITIONS2 1 LST).....2250 / 1 <slowest>

复制代码


8 ---- 三次第一,一次第二,一次第三
7 ----一次第一,二次第二,二次第三
6 ----一次第一,二次第二,一次第三,一次第五

冠军易主, vl-positions8 目前排位第一。




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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2017-5-15 20:01:18 | 显示全部楼层
前面 高飞 有过一个测试和讨论。foreach 分区点,这个函数稳定且快速,简单分析下
vl-position --> 依次遍历 -> 找到计数停止,如果加上 member ,前面也是要比较 然后截断,
多重 position 最小可能是  n, foreach 方法就是  n , 只是中间多了一个 计数和  cons, 规矩写法有规矩的优点
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2017-5-15 20:09:53 | 显示全部楼层

分析得很有道理,我还是比较鼓劲foreach。递归是最伤神了

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

使用道具 举报

发表于 2017-5-15 20:24:05 | 显示全部楼层
本帖最后由 wowan1314 于 2017-5-15 20:30 编辑

意思是能用foreach 就别用mapcar  ??

我也用写了个foreach的(4号代码),怎么老排第四!难道是我用了and 而你用了if  ?

下面是我以前写的!
(defun yy-lst-allpos (at lst / a nlst)
    (setq a 0)
    (mapcar
        '(lambda(x)
            (if(= x at)(setq nlst(cons a nlst)))(setq a(1+ a))
        )
        lst
    )
    (reverse nlst)
)


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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

 楼主| 发表于 2017-5-15 20:32:24 | 显示全部楼层

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2017-5-15 21:21:55 | 显示全部楼层

mapcar 在需要返回表的时候是第一选择,而且 mapcar 的实现应该比 foreach 更复杂,
在 ARX 中 foreach 流程可能是下面这样
int i=0;
vector<int> pos=new vector<int>();
while (!arg)
{
      if (  == )
         pos.push(i);
      i++;
}
return pos;
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

 楼主| 发表于 2017-5-15 21:30:35 | 显示全部楼层

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

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2017-5-15 22:40:11 | 显示全部楼层
提供一个

  1. (defun vl-positions9 (n l / i j r)
  2.   (setq j -1)
  3.   (while
  4.     (setq i (vl-position n l))
  5.      (setq r (cons (setq j (+ 1 i j)) r))
  6.      (setq l (cdr (member n l)))
  7.   )
  8.   (reverse r)
  9. )

评分

参与人数 1威望 +1 D豆 +5 贡献 +1 收起 理由
newer + 1 + 5 + 1 热心帮忙奖!

查看全部评分

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

 楼主| 发表于 2017-5-15 22:46:30 | 显示全部楼层

9个代码的测试结果


  1. 命令: test
  2. Elapsed milliseconds / relative speed for 16384 iteration(s):

  3.     (VL-POSITIONS8 1 LST).....1250 / 1.56 <fastest>
  4.     (VL-POSITIONS9 1 LST).....1281 / 1.52
  5.     (VL-POSITIONS7 1 LST).....1313 / 1.49
  6.     (VL-POSITIONS6 1 LST).....1328 / 1.47
  7.     (VL-POSITIONS4 1 LST).....1438 / 1.36
  8.     (VL-POSITIONS5 1 LST).....1703 / 1.15
  9.     (VL-POSITIONS2 1 LST).....1907 / 1.02
  10.     (VL-POSITIONS1 1 LST).....1953 / 1 <slowest>

复制代码

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

使用道具 举报

已领礼包: 6056个

财富等级: 富甲天下

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

使用道具 举报

已领礼包: 214个

财富等级: 日进斗金

发表于 2017-5-16 09:03:35 | 显示全部楼层
本帖最后由 danxingpen 于 2017-5-16 09:04 编辑
  1. (defun vl-positions10 (l lst / n la ns)
  2.   (setq        n  0
  3.         la (car lst)
  4.   )
  5.   (if (= la l)
  6.     (setq ns (cons n ns))
  7.   )
  8.   (while (setq lst (cdr lst))
  9.     (setq la (car lst)
  10.           n  (1+ n)
  11.     )
  12.     (if        (= la l)
  13.       (setq ns (cons n ns))
  14.     )
  15.   )
  16.   (reverse ns)
  17. )

评分

参与人数 1威望 +1 D豆 +5 贡献 +1 收起 理由
newer + 1 + 5 + 1 热心帮忙奖!

查看全部评分

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

 楼主| 发表于 2017-5-16 09:26:00 | 显示全部楼层

5次测试结果


  1. 命令: (repeat 5 (c:test))
  2. Elapsed milliseconds / relative speed for 16384 iteration(s):

  3.     (VL-POSITIONS6 1 LST)......2063 / 1.51 <fastest>
  4.     (VL-POSITIONS8 1 LST)......2359 / 1.32
  5.     (VL-POSITIONS4 1 LST)......2407 / 1.3
  6.     (VL-POSITIONS7 1 LST)......2516 / 1.24
  7.     (VL-POSITIONS5 1 LST)......2625 / 1.19
  8.     (VL-POSITIONS9 1 LST)......2625 / 1.19
  9.     (VL-POSITIONS10 1 LST).....2938 / 1.06
  10.     (VL-POSITIONS2 1 LST)......3000 / 1.04
  11.     (VL-POSITIONS1 1 LST)......3125 / 1 <slowest>
  12. Elapsed milliseconds / relative speed for 8192 iteration(s):

  13.     (VL-POSITIONS8 1 LST)......1031 / 2.18 <fastest>
  14.     (VL-POSITIONS9 1 LST)......1047 / 2.15
  15.     (VL-POSITIONS10 1 LST).....1109 / 2.03
  16.     (VL-POSITIONS7 1 LST)......1219 / 1.85
  17.     (VL-POSITIONS4 1 LST)......1359 / 1.66
  18.     (VL-POSITIONS6 1 LST)......1375 / 1.64
  19.     (VL-POSITIONS2 1 LST)......1859 / 1.21
  20.     (VL-POSITIONS1 1 LST)......2062 / 1.09
  21.     (VL-POSITIONS5 1 LST)......2250 / 1 <slowest>
  22. Elapsed milliseconds / relative speed for 16384 iteration(s):

  23.     (VL-POSITIONS9 1 LST)......2188 / 2 <fastest>
  24.     (VL-POSITIONS8 1 LST)......2265 / 1.93
  25.     (VL-POSITIONS7 1 LST)......2500 / 1.75
  26.     (VL-POSITIONS10 1 LST).....2531 / 1.73
  27.     (VL-POSITIONS6 1 LST)......2875 / 1.52
  28.     (VL-POSITIONS4 1 LST)......2953 / 1.48
  29.     (VL-POSITIONS5 1 LST)......3297 / 1.33
  30.     (VL-POSITIONS1 1 LST)......3609 / 1.21
  31.     (VL-POSITIONS2 1 LST)......4375 / 1 <slowest>
  32. Elapsed milliseconds / relative speed for 8192 iteration(s):

  33.     (VL-POSITIONS9 1 LST)......1172 / 1.33 <fastest>
  34.     (VL-POSITIONS6 1 LST)......1234 / 1.27
  35.     (VL-POSITIONS4 1 LST)......1250 / 1.25
  36.     (VL-POSITIONS7 1 LST)......1281 / 1.22
  37.     (VL-POSITIONS8 1 LST)......1328 / 1.18
  38.     (VL-POSITIONS1 1 LST)......1391 / 1.12
  39.     (VL-POSITIONS10 1 LST).....1468 / 1.06
  40.     (VL-POSITIONS2 1 LST)......1531 / 1.02
  41.     (VL-POSITIONS5 1 LST)......1563 / 1 <slowest>
  42. Elapsed milliseconds / relative speed for 16384 iteration(s):

  43.     (VL-POSITIONS7 1 LST)......2031 / 1.78 <fastest>
  44.     (VL-POSITIONS8 1 LST)......2047 / 1.77
  45.     (VL-POSITIONS4 1 LST)......2281 / 1.59
  46.     (VL-POSITIONS9 1 LST)......2297 / 1.58
  47.     (VL-POSITIONS6 1 LST)......2422 / 1.5
  48.     (VL-POSITIONS10 1 LST).....2656 / 1.36
  49.     (VL-POSITIONS5 1 LST)......3110 / 1.17
  50.     (VL-POSITIONS2 1 LST)......3296 / 1.1
  51.     (VL-POSITIONS1 1 LST)......3625 / 1 <slowest>

复制代码

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

使用道具 举报

已领礼包: 1903个

财富等级: 堆金积玉

发表于 2017-5-16 14:20:25 | 显示全部楼层
本帖最后由 aimisiyou 于 2017-5-16 16:07 编辑

(defun vl-position11 (a lst)
  (setq i -1)
  (setq flst (vl-remove 0  
                        (mapcar '*
                                 (mapcar '(lambda (x) (if (= a x) 1 0)) lst)     
                                 (mapcar '(lambda (y) (setq i (+ i 1))) lst)
                         )
               )
   )
(if (= a (car lst))  (setq flst (cons 0 flst)))
flst
)



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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 09:00 , Processed in 0.547474 second(s), 59 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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