【发布时间】:2013-11-22 11:36:51
【问题描述】:
我正在努力扁平化树结构。我通过将每个原子符号与树中的其余部分进行比较来递归地执行此操作,但是,我的一个朋友建议使用以下代码,我认为它看起来更干净。我只是不明白这行:
((atom tree)(list tree))
我了解他们每个人分别做什么,我也知道下面的循环需要一个列表或者它会导致错误,我怀疑这有很多原因是我们将符号转换为列表 if atom返回真。但我仍然觉得我没有完全理解代码。
(defun flatten (tree)
(cond ((null tree)
nil
)
((atom tree)(list tree))
(t
(loop for a in tree appending (flatten a)))))
如果有人能抽出时间来解释一下会很棒吗?谢谢!
【问题讨论】:
-
您可能还对flatten list in lisp、Flatten Nests Function in Lisp - need help understanding 感兴趣(实际上与您提供的代码几乎相同 代码(模格式),也许这就是您的朋友找到了)和Common Lisp - flatting a list that may contain symbols(也有与你类似的代码)。