私は木を手に入れました:
(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)))
再帰内で何らかの追加/マージが欠落している必要がありますが、表示されていません。