我正在尝试回答此编码问题,因此我没有任何运气。我不知道如何递归地找到子列表。
示例:(max_sub_list'(1(1 2 3 4)(1 2 3)))=>(1 2 3 4)
这里是我的代码现在的样子,我需要一些帮助。
`(defun max_sub_list (L)
(if (>= (my-len(car L)) (my-len(cdr L)))
(max_sub_list (cdr L))
(return (my-len(L))))
)`
my-len函数:(if L
(1+ (my-len (cdr L)))
0)
使用我的原始代码,出现问题“ CDR:1不是列表”
我是Lisp的新手,所以将不胜感激!
为了进一步研究,没有任何保证,您可以从此开始:
(defun max-sub-list (list &optional (max-len 0))
"Returns the length of the longest sublist of LIST."
(let ((first-element (first list)))
(cond ((null list) max-len)
((atom first-element) (max-sub-list (rest list) max-len))
(t (when (> (length first-element) max-len)
(setf max-len (length first-element))
(max-sub-list (rest list) max-len))))))
这将返回最大长度,而不是最长的子列表。在比较子列表的长度以及是否需要其他测试用例时,应检查是否要使用>
或>=
。
由于我的个人风格YMMV,所以我使用first
和rest
而不是car
和cdr
。