找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: yjtdkj

[讨论]:有没有更好的方法简化这个函数?

[复制链接]

已领礼包: 9842个

财富等级: 富甲天下

发表于 2005-10-10 13:48:07 | 显示全部楼层
[php]
;;表删除第N项元素
;;(DNR '(0 1 2 3 4 5) 3) -> (0 1 3 4 5)
(DEFUN DNR (L N)
(IF (< 0 N (1+ (LENGTH L))) ;判断N是否出界(0<N<=表长)
  (IF (= N 1)                           ;N是第一个吗?
   (CDR L)                         ;返回尾表
   (APPEND (LIST (CAR L)) (DNR (CDR L) (1- N)));首项+删去N-1项的尾表
  )
)
)
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-10 20:18:47 | 显示全部楼层
最初由 zxq0220 发布
[B][php]
;;表删除第N项元素
;;(DNR '(0 1 2 3 4 5) 3) -> (0 1 3 4 5)
(DEFUN DNR (L N)
(IF (< 0 N (1+ (LENGTH L))) ;判断N是否出界(0<N<=表长)
  (IF (= N 1)                           ;N是第一个吗?
   ... [/B]

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

使用道具 举报

发表于 2005-10-10 20:32:40 | 显示全部楼层
(DNR '(0 1 2 nil 4 5) 3)->(0 1 nil 4 5)
(DNR '(0 1 (2 3) 4 5) 3)->(0 1 4 5)
(DNR '(0 1 (2 3 4) 5) 3)->(0 1 5)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-10 21:01:34 | 显示全部楼层
命令: (DNR '(0 1 2 nil 4 5) 3)
(0 1 nil 4 5)

命令: (DNR '(0 1 2 nil 4 5) 4)
(0 1 2 4 5)

命令: (DNR '(0 1 2 nil 4 5) 5)
(0 1 2 nil 5)

命令: (DNR '(0 1 2 nil 4 5) 6)
(0 1 2 nil 4)

命令: (DNR '(0 1 2 nil 4 5) 7)
nil
出错。超过原表范围应该返回原表!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-10-10 21:18:46 | 显示全部楼层
还可以这样写

  1. (defun xdl-lst-deln (lst n)
  2.   (if (not (listp n))
  3.     (setq n (list n))
  4.   )
  5.   (setq          i -1)
  6.   (vl-remove nil
  7.              (mapcar '(lambda (x)
  8.                         (setq i (1+ i))
  9.                         (if (member i n)
  10.                           nil;_如果你认为 nil 也有意义,可以换一个自己认为不会冲突的字串
  11.                           x
  12.                         )
  13.                       )
  14.                      lst
  15.              )
  16.   )
  17. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-10 22:45:09 | 显示全部楼层
[php]
(defun dnr (n xlist /  i  uu)
(setq i 0 uu nil)
(foreach it xlist (progn (if (/= i n)
(setq uu (cons it uu)))
(setq i (1+ i))
))
(reverse uu))
[/php]
这样如何
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2005-10-10 22:54:38 | 显示全部楼层

  1. (defun remove-nth(lst n / i )
  2. (setq j -1)
  3. (vl-remove-if '(lambda(x)(= n(setq j(1+ j)))) lst)
  4. )

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

使用道具 举报

发表于 2005-10-11 11:48:10 | 显示全部楼层
LISP就这个函数了,
reverse member与结合
如:(setq AB (reverse (member (assoc 39 A) (reverse A))))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-11 12:47:36 | 显示全部楼层
aeo的代码不错
楼上的,你试试 '( 1 2 3 2 1) 能行么?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-7 14:27 , Processed in 0.348340 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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