首先,我應該明確指出,這是學術項目所必需的。我正在嘗試使用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