我得到了一棵樹:如何形成樹成單獨的路徑通向每個葉
(A . ((C . ((D . nil)(E . nil)))
(B . ((F . nil)(G . nil)))))
我想這棵樹變成:
((A C D) (A C E) (A B F) (A B G))
我已經實現了這個功能,這樣做的:
(defun tree->paths (tree &optional buff)
(labels ((recurse (follow-ups extended-list)
(if follow-ups
(append (list (tree->paths (car follow-ups) extended-list))
(recurse (cdr follow-ups) extended-list))
nil)))
(rstyu:aif (cdr tree)
(recurse it (append buff (list (car tree))))
(append buff (list (car tree))))))
但應用它導致:
(tree->paths '(A . ((C . ((D . nil) (E . nil)))
(B . ((F . nil) (G . nil))))))
=>
(((A C D) (A C E)) ((A B F) (A B G)))
我必須在遞歸中缺少某種附加/合併,但我沒有看到它。