首先,我应该明确指出,这是学术项目所必需的。我正在尝试使用Common Lisp来查找树中任何节点的最大子节点数。查找树中子节点的最大数量
我当前的代码如下所示 - 我不是在它的逻辑100%,但我觉得它应该工作,但它是不是给我需要的结果。
(defun breadth (list y)
(setf l y)
(mapcar #'(lambda (element)
(when (listp element)
(when (> (breadth element (length element)) l)
(setf l (breadth element (length element)))
))) list)
l)
(defun max-breadth(list)
(breadth list (length list))
)
举个例子,运行
(max-breadth '(a ((b (c d)) e) (f g (h i) j)))
应该返回4.
编辑: 跟踪结果与实际的返回值,似乎忘记了:
CG-USER(13): (max-breadth '(a ((b (c d)) e) (f g (h i) j)))
0[6]: (BREADTH (A ((B (C D)) E) (F G (H I) J)) 3)
1[6]: (BREADTH ((B (C D)) E) 2)
2[6]: (BREADTH (B (C D)) 2)
3[6]: (BREADTH (C D) 2)
3[6]: returned 2
2[6]: returned 2
1[6]: returned 2
1[6]: (BREADTH (F G (H I) J) 4)
2[6]: (BREADTH (H I) 2)
2[6]: returned 2
1[6]: returned 2
0[6]: returned 2
2
没有人有任何想法,我会出错?我怀疑它与第二个条件有关,但我不确定。
如果它没有返回4,它会返回什么? 6? – FrustratedWithFormsDesigner 2011-01-14 20:51:35
对不起,错过了,添加了追踪结果。 – Jim 2011-01-14 20:56:40
记住,你不应该设置任何地方没有定义的变量。 (SETF l ...)就是这样的情况。 l没有在你的代码中引入。它不是一个局部变量,没有全局变量,它不是函数参数,... – 2011-01-14 23:01:59