linshiyin2 发表于 2011-11-17 08:55:14

xiaxiang 发表于 2011-11-13 17:46 static/image/common/back.gif
纯粹凑个热闹,不懂如何提速。如果能知道是正向提取还是逆向提取,会不会好些。
递归法,从1开始,不能为0 ...

测试表长度,通过判断删除元素在的位置,然后决定倒置表否就可以正向还是逆向了。

linshiyin2 发表于 2011-11-17 09:03:43

我提个建议,大家都写了不少好程序,但是好多达人没有回收函数,这个小技巧大家不会不清楚吧,内存不回收的坏习惯可不好。
举个例子先:
(defun test1(lst n /)
(setq m 0 lst_1 '() i 0)
(repeat (length lst)
    (if (/= m n)
      (setq lst_1(cons (nth i lst)lst_1 ))
      )
      (setq m (1+ m)
             i (1+ i))   
      )
    (setq lst_1 (reverse lst_1))
    )

其中m,i,lst_1都没有回收。
还有写程序没有解释

狂刀lxx 发表于 2011-11-19 15:37:37

本帖最后由 狂刀lxx 于 2011-11-19 17:44 编辑

;;如果....,提个改进思路,没有具体验证结果是否正确,如果不对大家自己可以调整一下。
谁帮测试一下?
加了一个代码 (setq i (1+ i)) 这回该对了
;; by 狂刀lxx2011.11


;; by 狂刀lxx2011.11
(defun xl-nr(i lst / n)
(setq i (1+ i))
(defun xxx (i lst / lst2)
    (repeat (/ i 4)
      (setq lst2(cons(cadddr lst)(cons(caddr lst)(cons(cadr lst)(cons (car lst) lst2))))
   lst (cddddr lst))
      )
    (repeat (rem i 4)
      (setq lst2(cons (car lst) lst2)
   lst (cdr lst))
      )
    (append (reverse lst2)(cdr lst))
)
;;;(if (equal (vl-position (nth i lst) lst) i);;未完待续
;;;   nil;;未完待续
;;;    (progn;;未完待续
      (setq n (length lst))
      (if (< i (* n 0.5))
          (xxx i lst)
          (reverse (xxx (- n i) (reverse lst)))
      )
;;;      );;未完待续
;;;    );;未完待续
)

czb203 发表于 2011-11-20 00:04:44

测试一下,真的还不错啊 谢谢啊

nzl1116 发表于 2011-11-24 16:08:09

发一个将表转换成字符串
(defun removeItem1 (m mLst / aStr charNum mItem posit rvStr aLst bLst bStr)
(setq        aStr(vl-prin1-to-string mLst)
        charNum (strlen aStr)
        aStr(substr (substr aStr 1 (1- charNum)) 2)
        m   (1- m)
        mItem (nth m mLst)
        posit (vl-position mItem mLst)
        rvStr ""
        aLstmLst
)
(while (> m posit)
    (setq bLst        (cdr (member mItem aLst))
          bStr        (vl-prin1-to-string bLst)
          charNum (strlen bStr)
          bStr(substr (substr bStr 1 (1- charNum)) 2)
          rvStr        (strcat rvStr (vl-string-subst "" bStr aStr))
          m        (- m posit 1)
          aStr        bStr
          aLst        bLst
          posit        (vl-position mItem aLst)
    )
)
(read (strcat "(" rvStr (vl-string-subst "" (vl-prin1-to-string mItem) aStr) ")"))
)

dxj958 发表于 2012-2-12 21:07:17

超精采,超精采

露草 发表于 2012-4-12 18:54:55

高手真多还没有考虑速度这个因素

328302216 发表于 2012-11-27 22:46:30

这么多高手都喜欢玩这个吖呵呵

gtj116600 发表于 2013-5-28 15:21:42

这个是好东东

q3_2006 发表于 2013-6-17 10:18:37

脑子用不过来了!
页: 1 2 3 4 5 [6] 7
查看完整版本: [讨论]->征求最佳答案:删除表中第 n 个元素的最快算法