找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1841|回复: 48

[有奖答题] 【挑战】获取子表

[复制链接]

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-6-8 22:19:29 | 显示全部楼层 |阅读模式

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

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

×


  1. (SubList <list> <start> [<length>])


例子:

(SubList '(0 1 2 3 4 5) 2 3)
>> (2 3 4)

(SubList '(0 1 2 3 4 5) 2 nil)
>> (2 3 4 5)

(SubList '(0 1 2 3 4 5) 6 3)
>> nil

提供一个:

  1. (defun sublist1 (lst start leng / n r)
  2.   (if (or (not leng) (< (- (length lst) start) leng))
  3.     (setq leng (- (length lst) start))
  4.   )
  5.   (setq n (+ start leng))
  6.   (while (< start n)
  7.     (setq r (cons (nth (setq n (1- n)) lst) r))
  8.   )
  9. )


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

已领礼包: 264个

财富等级: 日进斗金

发表于 2017-6-9 02:10:58 | 显示全部楼层
本帖最后由 iLisp 于 2017-6-9 02:21 编辑

  1. (defun sublist2        (lst pos len / _f l j k r)
  2.   (defun _f (lst j pos k / r)
  3.     (vl-catch-all-apply
  4.       (function        (lambda        nil
  5.                   (mapcar (function (lambda (x)
  6.                                       (cond ((< j pos) (setq j (1+ j)))
  7.                                             ((<= pos j k)
  8.                                              (setq r (cons x r)
  9.                                                    j (1+ j)
  10.                                              )
  11.                                             )
  12.                                             (t (exit))
  13.                                       )
  14.                                     )
  15.                           )
  16.                           lst
  17.                   )
  18.                 )
  19.       )

  20.     )
  21.     r
  22.   )
  23.   (setq        l (length lst)
  24.         j 0
  25.   )
  26.   (if (null len)
  27.     (cond
  28.       ((> pos l) nil)
  29.       ((< pos (/ l 2))
  30.        (while (< j pos)
  31.          (setq lst (cdr lst) j (1+ j))
  32.        )
  33.        lst
  34.       )
  35.       (t
  36.        (setq pos (- l pos)
  37.              lst (reverse lst)
  38.        )
  39.        (while (< j pos)
  40.          (setq r (cons (car lst) r) lst (cdr lst) j (1+ j))
  41.        )
  42.        r
  43.       )
  44.     )
  45.     (cond
  46.       ((> pos l) nil)
  47.       ((< pos (/ l 2))
  48.        (reverse (_f lst j pos (1- (+ pos len))))
  49.       )
  50.       (t
  51.        (setq pos (- l pos len)
  52.              k         (1- (+ pos len))
  53.        )
  54.        (if (minusp pos)
  55.          (setq k   (1- (+ pos len))
  56.                pos 0
  57.          )
  58.        )
  59.        (_f (reverse lst) j pos k)
  60.       )
  61.     )
  62.   )
  63. )

评分

参与人数 1D豆 +5 贡献 +1 收起 理由
newer + 5 + 1

查看全部评分

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

使用道具 举报

已领礼包: 5060个

财富等级: 富甲天下

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

 楼主| 发表于 2017-6-9 07:49:09 | 显示全部楼层

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

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2017-6-9 08:08:36 | 显示全部楼层

这段代码您早些时候已经写过了哇,我也只在看见他们破解vlx代码中用了这个程序。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 5060个

财富等级: 富甲天下

发表于 2017-6-9 08:33:33 | 显示全部楼层

那段代码效率奇低,几百k的fas要1个小时,最大的瓶颈就是subList了。改用arx快多了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2017-6-9 08:35:47 | 显示全部楼层
本帖最后由 st788796 于 2017-6-9 09:09 编辑

  1. (defun sublist3        (lst start leng / fs f len end j r)
  2.   (defun fs (lst start /)
  3.     (repeat (1+ start)
  4.       (setq lst (cdr lst))
  5.     )
  6.     lst
  7.   )
  8.   (defun f (lst n / r)
  9.     (repeat n
  10.       (setq r        (cons (car lst) r)
  11.             lst        (cdr lst)
  12.       )
  13.     )
  14.     r
  15.   )
  16.   (setq len (length lst))
  17.   (if (or (null leng) (> (setq end (+ start leng)) len))
  18.     (cond
  19.       ((zerop start) lst)
  20.       ((< start (/ len 2)) (setq lst (fs lst start)))
  21.       (t (setq lst (f (reverse lst) (- len start))))
  22.     )
  23.     (if        (< start (/ len 2))
  24.       (if (> end (/ len 2))
  25.         (setq lst (fs lst start)
  26.               lst (f lst (- len end))
  27.               lst (reverse lst)
  28.         )
  29.         (setq lst (fs lst start)
  30.               lst (f lst leng)
  31.         )
  32.       )
  33.       (setq lst        (fs (reverse lst) (- len end))
  34.             lst        (f lst leng)
  35.       )
  36.     )
  37.   )
  38.   lst
  39. )

评分

参与人数 1D豆 +5 贡献 +1 收起 理由
newer + 5 + 1 技术引导讨论和指点奖!

查看全部评分

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

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2017-6-9 11:04:56 | 显示全部楼层
本帖最后由 且听风吟09 于 2017-6-9 11:07 编辑

[Actionscript3] 纯文本查看 复制代码
(defun kaka-list-Sub (lst start len / sublst)
  (and (null len) (setq len (length lst)))
  (while (> start 0)
    (setq lst        (cdr lst)
          start        (1- start)
    )
  )
  (while (and lst (> len 0))
    (setq sublst (cons (car lst) sublst)
          lst         (cdr lst)
          len         (1- len)
    )
  )
  (reverse sublst)
)

评分

参与人数 1D豆 +5 贡献 +1 收起 理由
newer + 5 + 1 技术引导讨论和指点奖!

查看全部评分

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

使用道具 举报

发表于 2017-6-9 11:18:49 | 显示全部楼层
(defun t11 (lst n m / l a lst1)
    (setq a -1 l (length lst) m (1- (+ (if m m l) n)))
    (vl-member-if
        '(lambda(x)
                (if (<= n (setq a (1+ a)) m)
                (setq lst1 (cons x lst1) )
            )
            (if (> a m) t)
        )
        lst
    )
    (reverse lst1)
)

评分

参与人数 1D豆 +5 贡献 +1 收起 理由
newer + 5 + 1 技术引导讨论和指点奖!

查看全部评分

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

 楼主| 发表于 2017-6-9 11:37:47 | 显示全部楼层

长度20000的表,测试结果

  1. (defun c:tt (/ lst)
  2.   (setq i 0)
  3.   (repeat 20000
  4.     (setq lst (cons i lst)
  5.           i   (1+ i)
  6.     )
  7.   )
  8.   (setq lst (reverse lst))
  9.   (xd::quickbench
  10.     '(
  11.       (sublist1 lst 3000 9000)
  12.       (sublist2 lst 3000 9000)
  13.       (sublist3 lst 3000 9000)
  14.       (kaka-list-Sub lst 3000 9000)
  15.       (t11 lst 3000 9000)
  16.      )
  17.   )
  18.   (princ)
  19. )



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

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-6-9 11:46:53 | 显示全部楼层
  1. (defun sublist4 (lst start len / lst1)
  2.   (setq leng (length lst))
  3.   (cond
  4.     ((and (= start 0)
  5.           (>= len leng)
  6.      )
  7.      lst
  8.     )
  9.     ((< start (1- leng))
  10.      (repeat start
  11.        (setq lst (cdr lst))
  12.      )
  13.      (if (numberp len)
  14.        (progn
  15.          (setq len (abs len)
  16.                i   0
  17.          )
  18.          (while (and (car lst) (< i len))
  19.            (setq lst1 (cons (car lst) lst1)
  20.                  lst  (cdr lst)
  21.                  i    (1+ i)
  22.            )
  23.          )
  24.          (setq lst (reverse lst1))
  25.        )
  26.      )
  27.     )
  28.   )
  29.   lst
  30. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

 楼主| 发表于 2017-6-9 11:54:03 | 显示全部楼层

  1. (defun c:tt (/ lst)
  2.   (setq i 0)
  3.   (repeat 20000
  4.     (setq lst (cons i lst)
  5.           i   (1+ i)
  6.     )
  7.   )
  8.   (setq lst (reverse lst))
  9.   (setq aa lst)
  10.   (xd::quickbench
  11.     '(
  12.       (sublist1 lst 3000 9000)
  13.       (sublist2 lst 3000 9000)
  14.       (sublist3 lst 3000 9000)
  15.       (sublist4 lst 3000 9000)
  16.       (kaka-list-Sub lst 3000 9000)
  17.       (t11 lst 3000 9000)
  18.      )
  19.   )
  20.   (princ)
  21. )


搜狗截图20170609114543.png

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

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2017-6-9 12:04:14 | 显示全部楼层
  1. (defun HK:SubList ( lst st len / tempList )

  2.     (repeat st
  3.         (setq lst (cdr lst))
  4.     )
  5.     (if
  6.         (or
  7.             (not lst)
  8.             (not len)
  9.             (zerop len)
  10.         )
  11.         lst
  12.         (progn
  13.             (repeat len
  14.                 (setq tempList (cons (car lst) tempList))
  15.                 (setq lst (cdr lst))
  16.             )
  17.             (reverse tempList)
  18.         )
  19.     )
  20. )


评分

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

查看全部评分

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

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2017-6-9 12:05:30 | 显示全部楼层
  1. ;;(SubList5 '(0 1 2 3 4 5) 2 3) => (2 3 4)
  2. (defun sublist5        (lst start leng / L)
  3.   (repeat start
  4.     (setq lst (cdr lst))
  5.   )
  6.   (repeat leng
  7.     (setq L (cons (car lst) L))
  8.     (setq lst (cdr lst))
  9.   )
  10.   (reverse L)
  11. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

 楼主| 发表于 2017-6-9 12:10:03 | 显示全部楼层

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 17:22 , Processed in 0.450629 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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