找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: Lispboy

[研讨] 关于LISP表处理的测试练习,看看谁的代码高效的前提下更简洁

[复制链接]
发表于 2013-5-26 21:36:08 | 显示全部楼层
cy956 发表于 2013-5-26 21:29
试试这样:
(setq b2(cdr b1)
        b(mapcar 'list b1 b2))

这个基本和11楼的代码一样!
会快那么一丁点!
二者测试结果:
;;(apply 'mapcar (list 'list  a (cdr a)))写法
用时  2.777  秒
;;(mapcar  'list  a (cdr a))写法
用时  2.683  秒

评分

参与人数 1D豆 +5 收起 理由
牢固 + 5 热心帮忙奖!

查看全部评分

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

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

 楼主| 发表于 2013-5-26 21:37:27 | 显示全部楼层
公布结果:

数据10万 整数 表

  1. (defun c:t1 ()
  2.   (setq i 0)
  3.   (setq ll nil)
  4.   (repeat 100000
  5.     (setq ll (cons (setq i (1+ i))
  6.                    ll
  7.              )
  8.     )
  9.   )
  10. )
  11. (defun get-utime () (* 86400.0 (getvar "tdusrtimer")))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-5-26 21:37:54 | 显示全部楼层
呵呵,通过此贴,加深了对部分函数的理解,也学会了怎样测试函数运行效率。呵呵,非常好
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

 楼主| 发表于 2013-5-26 21:40:25 | 显示全部楼层
4楼,炫翔贴的WOWAN1314的代码

  1. (defun c:t3 (/ lst1)
  2.   (setq lst ll)
  3.   (setq lst1 nil)
  4.   (setq t1 (get-utime))
  5.   (while (and
  6.            (car lst)
  7.            (cadr lst)
  8.          )
  9.     (setq lst1 (cons (list (car lst) (cadr lst)) lst1)
  10.           lst (cdr lst)
  11.     )
  12.   )
  13.   (setq abc (reverse lst1))
  14.   (setq t2 (get-utime))
  15.   (princ "\nUse Time: ")
  16.   (princ (- t2 t1))
  17.   (princ " s")
  18.   (princ)
  19. )



  1. 命令: t3

  2. Use Time: 0.134 s


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

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

 楼主| 发表于 2013-5-26 21:51:20 | 显示全部楼层
7l楼,LISPHK, repeat 循环加 nth

  1. (defun c:t4 ()
  2.   (setq i 0
  3.         l nil
  4.   )
  5.   (setq a ll)
  6.   (setq t1 (get-utime))
  7.   (setq len (- (length a) 1))
  8.   (repeat len
  9.     (setq b (nth i a)
  10.           i (1+ i)
  11.           c (nth i a)
  12.           l (cons (list b c) l)
  13.     )
  14.   )
  15.   (setq abc (reverse l))
  16.   (setq t2 (get-utime))
  17.   (princ "\nUse Time: ")
  18.   (princ (- t2 t1))
  19.   (princ " s")
  20.   (princ)
  21. )

  1. 命令: t4

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

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

 楼主| 发表于 2013-5-26 21:54:07 | 显示全部楼层
9#楼, woan1314

  1. (DEFUN c:t6 ( / LST1 T11)
  2.   (DEFUN T11 (LST)
  3.     (AND
  4.       (cadr lst)
  5.       (setq lst1 (cons (list (car lst) (cadr lst)) lst1)
  6.             lst (cdr lst)
  7.       )
  8.       (T11 LST)
  9.     )
  10.   )
  11.   (setq lst ll)
  12.   (SETQ LST1 NIL)
  13.   (setq t1 (get-utime))
  14.   (T11 LST)
  15.   
  16.   (setq abc (reverse lst1))
  17.   (setq t2 (get-utime))
  18.   (princ "\nUse Time: ")
  19.   (princ (- t2 t1))
  20.   (princ " s")
  21.   (princ)
  22. )

  1. 命令: t6
  2. 出现硬错误 ***
  3. 已达内部堆栈限制 (模拟)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

 楼主| 发表于 2013-5-26 22:00:54 | 显示全部楼层
6# Free-lancer

  1. (defun c:t7 ()
  2.   (setq lst ll)
  3.   (setq t1 (get-utime))
  4.   (setq abc (mapcar
  5.               '(lambda (a b)
  6.                  (list a b)
  7.                )
  8.               lst
  9.               (cdr lst)
  10.             )
  11.   )
  12.   (setq t2 (get-utime))
  13.   (princ "\nUse Time: ")
  14.   (princ (- t2 t1))
  15.   (princ " s")
  16.   (princ)
  17. )

  1. 命令: t7

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

使用道具 举报

发表于 2013-5-26 22:04:48 | 显示全部楼层
本帖最后由 cy956 于 2013-5-26 20:11 编辑
  1. (defun c:t1 ()
  2.   (setq i 0)
  3.   (setq ll nil)
  4.   (repeat 100000
  5.     (setq ll (cons (setq i (1+ i))
  6.                    ll
  7.              )
  8.     )
  9.   )
  10. )
  11. (defun get-utime () (* 86400.0 (getvar "tdusrtimer")))


  12. (defun c:t3 (/ lst1)
  13.   (setq lst ll)
  14.   (setq lst1 nil)
  15.   (setq t1 (get-utime))
  16.   (while (and
  17.            (car lst)
  18.            (cadr lst)
  19.          )
  20.     (setq lst1 (cons (list (car lst) (cadr lst)) lst1)
  21.           lst (cdr lst)
  22.     )
  23.   )
  24.   (setq abc (reverse lst1))
  25.   (setq t2 (get-utime))
  26.   (princ "\nUse Time: ")
  27.   (princ (- t2 t1))
  28.   (princ " s")
  29.   (princ)
  30. )

  31. (defun c:t31 (/ lst1)
  32.   (setq lst ll
  33.   lst1(cdr lst))
  34.   (setq t1 (get-utime)
  35.   b2(mapcar 'list lst lst1))
  36.   (setq t2 (get-utime))
  37.   (princ "\nUse Time: ")
  38.   (princ (- t2 t1))
  39.   (princ " s")
  40.   (princ)
  41. )

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

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

 楼主| 发表于 2013-5-26 22:05:58 | 显示全部楼层
11#  anderway

  1. (defun c:t8 ()
  2.   (setq a ll)
  3.   (setq t1 (get-utime))
  4.   (setq abc (apply
  5.               'mapcar
  6.               (cons 'list (list a (cdr a)))
  7.             )
  8.   )
  9.   (setq t2 (get-utime))
  10.   (princ "\nUse Time: ")
  11.   (princ (- t2 t1))
  12.   (princ " s")
  13.   (princ)
  14. )



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

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

 楼主| 发表于 2013-5-26 22:10:04 | 显示全部楼层
14# wowoan
  1. (DEFUN c:t9( / LST)
  2.   (setq a ll)
  3.   (SETQ LST NIL)
  4.   (setq t1 (get-utime))
  5.   (foreach b a
  6.     (setq lst (cons (list b (cadr a)) lst)
  7.           a (cdr a)
  8.     )
  9.   )
  10.   (setq abc(reverse (CDR LST)))
  11.   (setq t2 (get-utime))
  12.   (princ "\nUse Time: ")
  13.   (princ (- t2 t1))
  14.   (princ " s")
  15.   (princ)
  16. )


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

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

 楼主| 发表于 2013-5-26 22:16:32 | 显示全部楼层
18# newer
  1. (defun c:t10 ()
  2.   (setq lst ll)
  3.   (setq t1 (get-utime))
  4.   
  5.   (while (cdr lst)
  6.     (setq l (cons (list (car lst) (cadr lst)) l))
  7.     (setq lst (cdr lst))
  8.   )
  9.   (setq abc (reverse l))
  10.   (setq t2 (get-utime))
  11.   (princ "\nUse Time: ")
  12.   (princ (- t2 t1))
  13.   (princ " s")
  14.   (princ)
  15. )


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

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

 楼主| 发表于 2013-5-26 22:19:32 | 显示全部楼层
20# 夜来风雨声

  1. (defun c:t11 ()
  2.   (defun split (l)
  3.     (if (cdr l)
  4.       (cons (list (car l) (cadr l)) (split (cdr l)))
  5.     )
  6.   )
  7.   (setq abc (split ll))
  8. )


  1. 命令: t11
  2. 出现硬错误 ***
  3. 已达内部堆栈限制 (模拟)
  4. 命令:
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

 楼主| 发表于 2013-5-26 22:27:51 | 显示全部楼层
cy956 发表于 2013-5-26 22:21
t8我试了只有0.015,目前这个最快吧

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

使用道具 举报

发表于 2013-5-26 22:29:41 来自手机 | 显示全部楼层
测试时打开vlide和关闭也是有很大区别的来自: Android客户端
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 12:56 , Processed in 0.438186 second(s), 57 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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