明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 露水2

[源码] [活动结束]LISP知识问答第2期--基础篇2-(难度指数:★)

  [复制链接]
发表于 2010-12-29 20:07 | 显示全部楼层
  1. ;|6.按指定长度,分割一个表,成多个小表
  2.  格式:(ListSplit1 lst len)
  3.   lst:要分割的表
  4.  len:int 子表长度
  5.   比如:(ListSplit1 '(0 1 2 3 4 5 6 7 8 9) 3)
  6.        返回 '((0 1 2) (3 4 5) (6 7 8) (9))
  7. |;
  8. (defun ListSplit1(lst len /  nl)
  9. (while (and lst  (> (length lst) len))
  10.     (setq nl1 nil)
  11.     (repeat len
  12.            (setq nl1 (cons (car lst)  nl1)
  13.             lst (cdr lst))
  14.     )
  15.     (setq nl (cons (reverse nl1) nl))
  16.   )
  17.     (reverse (cons lst  nl))
  18.   )

我新手 咱也试试

评分

参与人数 2明经币 +1 金钱 +17 收起 理由
caoyin + 1 + 12 谢谢参与
露水2 + 5

查看全部评分

发表于 2010-12-29 21:27 | 显示全部楼层
  1. (defun c:test()
  2.   (setq date (getvar "cdate"))
  3.   (setq date2 (read (strcat (substr (rtos date 2 16) 14 2) "." (substr (rtos date 2 16) 16 3))))
  4.   
  5.   (repeat 1000000
  6.    (ListSplit2 '(0 1 2 3 4 5 6 7 8 9) 3)
  7.   )
  8.     (setq date3 (getvar "cdate"))
  9.     (setq date4 (read (strcat (substr (rtos date3 2 16) 14 2) "." (substr (rtos date3 2 16) 16 3))))
  10.     (strcat "运行时间" (rtos (- date4 date2)2 2) "秒"))

测试时间的程序
发表于 2010-12-31 07:44 | 显示全部楼层
来学习了
支持这样的活动,可以让初学者更快成长
谢谢
发表于 2011-1-1 22:55 | 显示全部楼层
  1. ;|6.按指定长度,分割一个表,成多个小表
  2.  格式:(ListSplit1 lst len)
  3.   lst:要分割的表
  4.  len:int 子表长度
  5.   比如:(ListSplit1 '(0 1 2 3 4 5 6 7 8 9) 3)
  6.        返回 '((0 1 2) (3 4 5) (6 7 8) (9))
  7. |;
  8. (defun ListSplit1 (ls len / a r i)
  9.   (setq i 0)
  10.   (foreach item ls
  11.     (setq a (append tmp(list item)))
  12.     (setq i(1+ i))
  13.     (if(zerop(rem i len))
  14.       (setq r(cons tmp r) a nil)
  15.     )
  16.   )
  17.   (if a (setq r(cons tmp r) a nil))
  18.   (reverse r)
  19. )
  20. ;|测试:用淮上的测试程序测试,
  21. 命令: TEST
  22. "运行时间16.49秒"|;

评分

参与人数 2明经币 +2 金钱 +35 收起 理由
caoyin + 2 + 30 谢谢参与
露水2 + 5

查看全部评分

发表于 2011-1-1 23:40 | 显示全部楼层
  1. ;|5.返回指定图元后的所有图元组成的表
  2.   格式:(EntNextAll ent)
  3.  ent:指定的标志图元
  4.   返回:图元之后生成的所有图元组成的表.
  5.  特别:当ent为nil时返回图中所有的图元组成的表|;

  6. (defun EntNextAll (ent / ls ent1 rl flag)
  7.   (if (not ent) (setq ent (entnext) flag t))
  8.   (while (setq ent1(entnext ent))
  9.     (setq rl (cons ent1 rl))
  10.     (setq ent ent1)
  11.     )
  12.   (if flag (cons (entnext) (reverse rl)) (reverse rl))
  13.   )

评分

参与人数 1明经币 +2 收起 理由
caoyin + 2 谢谢参与

查看全部评分

 楼主| 发表于 2011-1-2 13:21 | 显示全部楼层
本帖最后由 露水2 于 2011-1-2 13:40 编辑

淮上的 测试函数有点问题
发表于 2011-1-2 18:41 | 显示全部楼层
原装
  1. (defun ListSplit1 (lst int / len n nlst tmplst)
  2.   (repeat (/ (length lst) int)
  3.     (repeat int
  4.       (setq tmplst (cons (car lst) tmplst))
  5.       (setq lst (cdr lst))
  6.     )
  7.     (setq nlst (cons (reverse tmplst) nlst))
  8.     (setq tmplst nil)
  9.   )
  10.   (reverse (if lst (cons lst nlst) nlst))
  11. )

评分

参与人数 2明经币 +3 金钱 +35 收起 理由
caoyin + 3 + 30 谢谢参与
露水2 + 5

查看全部评分

 楼主| 发表于 2011-1-2 19:17 | 显示全部楼层
本帖最后由 露水2 于 2011-1-2 19:24 编辑

经测试 100万次 表为
(ListSplit1 '(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28) 3)
淮上的 "运行时间113.93秒"
lisper 的 "运行时间142.78秒"
飞诗的  "运行时间113.49秒"
当表短时淮上的最快 当表长时飞诗的最快   因为淮上每次都要length

测试运算1次
表为 10万长
淮上的"运行时间16.16秒"
lipser的"运行时间0.67秒"
飞诗的"运行时间0.52秒"
发表于 2011-1-2 20:13 | 显示全部楼层
本帖最后由 飞诗(fsxm) 于 2011-1-2 20:16 编辑

俺再来一个!速度更快点的
  1. (defun ListSplit1 (lst len / i nlts tmp)
  2.   (setq i 1)
  3.   (foreach ite lst
  4.     (if
  5. (= i len)
  6.       (setq i
  7. 1

  8.     nlts (cons (reverse (cons ite tmp)) nlts)

  9.     tmp
  10. nil
  11.       )
  12.       (setq tmp
  13. (cons ite tmp)

  14.     i
  15. (1+ i)
  16.       )
  17.     )
  18.   )
  19.   (if tmp
  20.     (reverse (cons (reverse tmp) nlts))
  21.     (reverse nlts)
  22.   )
  23. )


评分

参与人数 1金钱 +15 收起 理由
露水2 + 15

查看全部评分

 楼主| 发表于 2011-1-4 12:14 | 显示全部楼层
飞诗(fsxm) 发表于 2011-1-2 20:13
俺再来一个!速度更快点的

飞诗这个最快
其他的大家也做做题目
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-17 17:28 , Processed in 0.217714 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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