本帖最后由 wowan1314 于 2013-7-27 21:48 编辑
递归又忘了怎么用了!表反了的用我写的REVERSE#函数处理下。 但是大写就没办法了。。。 - ;(subst# 'm 'b '(a b (a b c) d D))
- ;最多套三层....
- (defun subst# (a b c / a b c d e)
- (defun subst3# (a b c / d )
- (cond
- ((setq d (car c))
- (cond
- ((atom d)
- (cond
- ((eq d b)
- (setq g (cons a g))
- (subst3# a b (cdr c))
- )
- (t (setq g(cons d g))(subst3# a b (cdr c))
- )
- )
- )
- )
- )
- )
- g
- )
- (defun subst2# (a b c / d g)
- (cond
- ((setq d (car c))
- (cond
- ((atom d)
- (cond
- ((eq d b)
- (setq f(cons a f))
- (subst2# a b (cdr c))
- )
- (t (setq f(cons d f))(subst2# a b (cdr c))
- )
- )
- )
- (t (setq f (cons (subst3# a b d) f))(subst2# a b (cdr c))
- )
- )
- )
- )
- f
- )
- (defun subst1# (a b c / d f)
- (cond
- ((setq d (car c))
- (cond
- ((atom d)
- (cond
- ((eq d b)
- (setq e(cons a e))
- (subst1# a b (cdr c))
- )
- (t (setq e(cons d e))(subst1# a b (cdr c))
- )
- )
- )
- (t (setq e (cons (subst2# a b d) e))(subst1# a b (cdr c))
- )
- )
- )
- )
- e
- )
- (subst1# a b c)
- )
 - ;;(reverse# '(1 2 3 4 5))
- ;;==>(5 4 3 2 1)
- (defun reverse# (a / c)
- (defun reverse1# (a / b)
- (cond
- ((setq b (car a)) (setq c (cons b c))(reverse1# (cdr a))
- )
- )
- c
- )
- (reverse1# A)
- )
 - (defun and# (a b)
- (cond
- ((eq a nil) nil)
- ((eq b nil) nil)
- (t t)
- )
- )
- (defun or# (a b)
- (cond
- ((and#(eq a nil)(eq b nil)) nil)
- (t t)
- )
- )
- (defun not# (a)
- (cond
- ((eq a nil) T)
- (t nil)
- )
- )
- (defun assoc# (a b / c d)
- (cond
- ((setq c (car b))
- (cond
- ((eq a (car c))
- (setq d (cadr c))
- )
- (t (assoc# a (cdr b))
- )
- )
- )
- )
- d
- )
- ;(append# '(1 2 3) (4 5))
- ;===> (3 2 1 4 5) 这个反的可以么??
- (defun append# (a b / c)
- (cond
- ((setq c (car a))
- (setq b (cons c b) a (cdr a))
- (setq B (append# a b))
- )
- )
- b
- )
- ;(pair '(x y z) '(a b c))
- ;==>((Z . C) (Y . B) (X . A)) 不但是反的还是大写了?
- (defun pair (a b / e pair1)
- (defun pair1 (a b / c d)
- (cond
- ((and# (setq c (car a)) (setq d (car b))
- )
- (setq e (cons (cons c d) e))
- (pair1 (cdr a) (cdr b))
- )
- )
- e
- )
- (pair1 a b)
- )
- ;(subst# 'm 'b '(a b a b c d))
- ;==>(D C M A M A) 不但是反的还是大写了?
- ;多层表没弄出来。。可能是递归还没掌握好。
- (defun subst# (a b c / a b c d e)
- (defun subst1# (a b c / d )
- (cond
- ((setq d (car c))
- (cond
- ((atom d)
- (cond
- ((eq d b)
- (setq e(cons a e))
- (subst1# a b (cdr c))
- )
- (t (setq e(cons d e))(subst1# a b (cdr c))
- )
- )
- )
- (t (setq e (cons (subst1# a b d) e))
- )
- )
- )
- )
- e
- )
- (subst1# a b c)
- )
|