【发布时间】:2019-02-27 18:35:12
【问题描述】:
Lisp 的超级新手,但至少我正在尝试,如果这种方法看起来有点奇怪,请原谅我。
我乐于学习新想法,但我肯定需要了解我的方法有什么问题。
我有一个使用迭代递归方法构建列表的函数。
(defun create-tree-iteratively(sub-list)
(if (equal (length sub-list) 1)
sub-list
(loop for i in sub-list
do(setq subtree (list i))
do(setq sub-sub-list (remove i sub-list))
do(append subtree (create-tree-iteratively sub-sub-list))
)
)
)
我的程序的输入是
'(1 2 3)
预期输出是
'((1 (2 3) (3 2)) (2 (1 3) (3 1)) (3 (1 2) (2 1)))
我的循环(递归)运行文件。我在适当组合递归输出时遇到问题。
【问题讨论】:
-
调用长度不是一个好主意,因为它会遍历整个列表。 APPEND 返回一个列表。你没有使用它。这也不是一个好主意。
sub-tree和sub-sub-list是未定义的变量。也不好。 -
你能描述一下你试图实现的算法的目的是什么(不仅仅是一个案例)。
标签: list lisp common-lisp