【发布时间】:2016-03-14 22:07:15
【问题描述】:
我正在尝试从 (A (B) (C (D) (E))) 中的 (A 2 B 0 C 2 D 0 E 0) 修改树的表示。我的代码是这样的:
(defun transform(l)
(cond
( (null l) NIL)
( (and (not (numberp (car l))) (= (cadr l) 0) (null (cddr l)))
(cons (car l) '(NIL NIL) ))
( (and (not (numberp (car l))) (= (cadr l) 0))
(cons (cons (car l) '(NIL NIL) ) (list (transform (cddr l)))))
( (not (numberp (car l)))
(cons (car l) (list (transform (cddr l)))))
( T (transform (cdr l)))
))
(defun subarbst(l nr)
(cond
( (= nr 0) nil)
( (atom l) l)
( ( numberp (car l)) (cons (car l) (subarbst (cdr l) nr)))
( (and (= nr 1) (= (cadr l) 0)) (list (car l) (cadr l)))
( T (cons (car l) (subarbst (cdr l) (+ (car (cdr l)) (- nr 1)))))
)
)
(defun subarbdr(l nr)
(cond
( (= nr 1) (subarbst l nr))
( (atom l) l)
( T (subarbdr (cddr l) (+ (car (cdr l)) (- nr 1))))
)
)
(defun transf(l)
(cond
( (null l) nil)
( (= 0 (cadr l)) (cons (car l) '(nil nil)))
( (= 1 (cadr l)) (list (car l) (transf (subarbst (cddr l) '1))))
( (= 2 (cadr l)) (list (car l)
(transf (subarbst (cddr l) '1))
(transf (subarbdr (cddr l) '2))))
))
但是,我得到的不是第二种形式,而是:(A(B NIL NIL)(C(D NIL NIL)(E NIL NIL))),谁能告诉我为什么我会得到那些“NIL”价值观? .. 提前谢谢!
【问题讨论】:
标签: tree lisp common-lisp