找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: aeo

[建议]:大家一起来写,得到表中的元素.

[复制链接]

已领礼包: 488个

财富等级: 日进斗金

 楼主| 发表于 2004-2-26 01:38:23 | 显示全部楼层
前一阵我要用的时候,就是写不好,
可能我提的要求和我上次的问题不一样.


不要求from和to一定是数值,因为用的时候自然会注意的.比如(+ "A"1)自然不给你算的

我的:

  1. (defun nth-n(lst from to / is-max is-min j)
  2. (or from(setq from 0))
  3. (or to  (setq to(1-(length lst))))
  4. (setq is-max(max from to)
  5.        is-min(min from to)
  6.        j -1)
  7. (setq lst(apply 'append
  8.    (mapcar '(lambda(##)(if(<= is-min(setq j(1+ j))is-max)(list ##)))lst)
  9.   ))
  10. (if(> from to)(reverse lst)lst)
  11. )


命令: (nth-n a 6 3)
(6 5 4 3)

命令: (nth-n a 60 3)
(9 8 7 6 5 4 3)

命令: (nth-n a 60 -3)
(9 8 7 6 5 4 3 2 1 0)

命令: (nth-n a nil -3)
(0)

命令: (nth-n a nil nil)
(0 1 2 3 4 5 6 7 8 9)

命令: (nth-n a nil 10)
(0 1 2 3 4 5 6 7 8 9)

命令: (nth-n a 1 nil)
(1 2 3 4 5 6 7 8 9)

命令: (nth-n a 1 6)
(1 2 3 4 5 6)

命令: !a
(0 1 2 3 4 5 6 7 8 9)

命令: (nth-n a -3 -2)
nil

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

使用道具 举报

发表于 2004-2-26 14:53:15 | 显示全部楼层
哈哈,算我没看走眼,aeo版主真不错:),下面是我前两天晚上写的,看来与版主狗熊所见略同啊,仅(or (<= fm i to)(<= to i fm)) 这个地方处理略有差异
[php]
;|(xl-sub lst from to) = 从表中取部分元素组表(扩展) v1.0-------------------------陌生人.2004.2
功能: 1.从表中取from 到 to 的元素组成新表.(序号从0起算)
      2.from>to时新表倒置.支持from,to为nil(默认取头尾序号)或超出表序号范围,返回有效序号的元素组成的新表.
测试:
(setq lst '(0 1 2 3 4 5 6 7 8 9 ))
(xl-sub lst 2 4) -> (2 3 4)
(xl-sub lst nil nil) -> (0 1 2 3 4 5 6 7 8 9)
(xl-sub lst -2 5) -> (0 1 2 3 4 5)
(xl-sub lst 5 12) -> (5 6 7 8 9)
(xl-sub lst -22 22) -> (0 1 2 3 4 5 6 7 8 9)
(xl-sub lst 6 2) -> (6 5 4 3 2)
(xl-sub lst 6 -10) -> (6 5 4 3 2 1 0)
(xl-sub lst 5.5 8.1) -> (6 7 8)
(xl-sub lst -2 -6) -> nil
'|;
(defun xl-sub (lst fm to / i nlst)
  (setq fm (if fm fm 0)
           to (if to to (1- (length lst)))
           i  -1
        nlst (apply 'append (mapcar '(lambda (x)(setq i (1+ i)) (if (or (<= fm i to)(<= to i fm)) (list x) nil )) lst)))
  (if (> fm to) (reverse nlst) nlst)
)
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-4 13:40 , Processed in 0.386839 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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