求助递归问题.
本帖最后由 77077 于 2014-8-12 03:00 编辑还是没能好好理解递归,不过直觉告诉我,这个可以用递归来做更快捷!
这是一个odcl对话框tree控件加载节点的代码,求高手们帮个忙,用递归方法解决下~~~(setq lst '(
(("A" "分类")
(("A1" "中类")
("A11" "子类")
("A12" "子类"))
(("A2" "中类")
("A21" "子类")
("A22" "子类")
("A23" "子类"))
(("A3" "中类")
("A31" "子类")
("A32" "子类")
("A33" "子类"))
(("A4" "中类")
("A41" "子类")
("A42" "子类")
("A43" "子类")
("A44" "子类"))
(("A5" "中类"))
)
(("B" "分类")
(("B1" "中类")
("B11" "子类")
("B12" "子类"))
(("B2" "中类")
("B21" "子类")
("B22" "子类")
("B23" "子类"))
(("B3" "中类")
("B31" "子类")
("B32" "子类")
("B33" "子类"))
(("B4" "中类")
("B41" "子类")
("B42" "子类")
("B43" "子类")
("B44" "子类")))
)
);setq
(defun c:ydcood_ydcood_OnInitialize ( / )
(foreach a lst
(setq Pa (dcl_Tree_AddParent ydcood_ydcood_tree
(strcat (car(car a)) ":" (cadr (car a)))))
(foreach b (cdr a)
(setq Pb (dcl_Tree_AddChild ydcood_YDCOOD_Tree
(list(list pa (strcat (car(car b)) ":" (cadr (car b)))))))
(foreach c (cdr b)
(setq Pc(dcl_Tree_AddChild ydcood_YDCOOD_Tree
(list(list pb (strcat (car c) ":" (cadr c))))))
)
)
)
)
本帖最后由 77077 于 2014-8-12 02:03 编辑
唉,好像错了
(defun addchild (x)
(if (= (car x) nil)
nil
(progn
(foreach n x
(setq Px (dcl_Tree_AddChild ydcood_YDCOOD_Tree
(list(list p (strcat (car(car n)) ":" (cadr (car n)))))))
(addchild (cdr x))
)
)
)
)
正常的是
用我自己的递归弄出来的变成
哦,明白了,我的lst出错,格式没定义正确~
页:
[1]