如何编写使用长度函数来递归查找并返回最大长度的子列表的函数

问题描述 投票:1回答:1

我正在尝试回答此编码问题,因此我没有任何运气。我不知道如何递归地找到子列表。

示例:(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的新手,所以将不胜感激!

recursion common-lisp
1个回答
0
投票

为了进一步研究,没有任何保证,您可以从此开始:

(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,所以我使用firstrest而不是carcdr

© www.soinside.com 2019 - 2024. All rights reserved.