找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: newer

[研讨] 【效率测试】返回表奇数位元素组成子表的几个代码的效率比较

[复制链接]

已领礼包: 604个

财富等级: 财运亨通

发表于 2017-12-14 10:44:34 | 显示全部楼层
本帖最后由 /db_自贡黄明儒_ 于 2017-12-14 10:58 编辑

  1. ;;偶数
  2. ;;(_EvenLst '(1 2 3 4 5 6)) => '(2 4 6)
  3. (defun _EvenLst (lst / i)
  4.   (setq i 0)
  5.   (vl-remove-if-not
  6.     '(lambda (x) (= 0 (boole 1 (setq i (1+ i)) 1)))
  7.     lst
  8.   )
  9. )
  10. ;;奇数
  11. ;;(_OddLst '(1 2 3 4 5 6)) => '_OddLst
  12. (defun _OddLst (lst / i)
  13.   (setq i 0)
  14.   (vl-remove-if-not
  15.     '(lambda (x) (/= 0 (boole 1 (setq i (1+ i)) 1)))
  16.     lst
  17.   )
  18. )


  1. ;;偶数
  2. ;;(_EvenLst '(1 2 3 4 5 6)) => '(2 4 6)
  3. (defun _EvenLst        (lst / Flag)
  4.   (setq Flag T)
  5.   (vl-remove-if-not
  6.     '(lambda (x) (setq Flag (not Flag)))
  7.     lst
  8.   )
  9. )
  10. ;;奇数
  11. ;;(_OddLst '(1 2 3 4 5 6)) => (1 3 5)
  12. (defun _OddLst (lst / Flag)
  13.   (vl-remove-if-not
  14.     '(lambda (x) (setq Flag (not Flag)))
  15.     lst
  16.   )
  17. )


评分

参与人数 1D豆 +5 贡献 +2 收起 理由
newer + 5 + 2 有始有终奖!

查看全部评分

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

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-12-14 14:20:28 | 显示全部楼层

这个很快,但是如果元素包括T 或者 NIL的时候回出问题吧。

点评

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

 楼主| 发表于 2017-12-14 15:46:09 | 显示全部楼层

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

使用道具 举报

发表于 2017-12-15 10:15:43 | 显示全部楼层
(defun get1 (lst / out)
  (repeat (+ (/ (length lst) 2) (rem (length lst) 2))
    (setq out (cons (car lst) out)
          lst (cddr lst))
    )
  (reverse out)
  )
(defun get2 (lst / out)
  (setq lst (cdr lst))
  (repeat (+ (/ (length lst) 2) (rem (length lst) 2))
    (setq out (cons (car lst) out)
          lst (cddr lst))
    )
  (reverse out)
  )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 03:31 , Processed in 0.386827 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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