我有一个关于在计划中找到一组列表中最大的列表的问题。查找列表中列表的最大列表?
例如,我们定义: (定义manylsts(列表(列表9(表8 7))6(表5(表4 3 2)1)))
我将如何去寻找在manylsts最大的名单? 谢谢
我有一个关于在计划中找到一组列表中最大的列表的问题。查找列表中列表的最大列表?
例如,我们定义: (定义manylsts(列表(列表9(表8 7))6(表5(表4 3 2)1)))
我将如何去寻找在manylsts最大的名单? 谢谢
如果参数不是列表,那么您可以创建一个计算为零的过程。 (例如,9
),那么如果它的列表你foldl
在元素上使用length
的参数作为累加器与lambda
那max
之间的第一个参数递归与累加器。这将是这个样子:
(define (max-children tree)
(if <??>
(foldl (λ (x acc)
(max <??> (max-children <??>)))
(length <??>)
<??>)
0))
当然也有这样做的,包括明确的递归的方法很多,但是这是第一件事情,虽然我。
我会按照你的要求回答这个问题。
你说你要
发现在manylsts
最大列表既然你包括内部manylsts
非上市元素你想有一个定义,告诉你有多大的元素(如果是列表)。
因此,我写了函数elemenlen
返回列表的长度,如果给定的元素是列表和0否则。
(define elemenlen
(λ (a)
(if (list? a) (length a) 0)
))
然后我决定我将按照长度顺序对它们进行排序,然后返回第一个元素。所以我需要一个返回boolean
值的函数来与racket/base
中包含的sort
函数一起使用它。
(define list<
(λ (listA listB)
(< (elemenlen listA) (elemenlen listB))))
(define list>
(λ (listA listB)
(not (list< listA listB))))
第一函数返回#t
如果listA
比listB
小。如果listA
大于listB
,则第二个函数返回#t
。
最后,biggestElement
完成了整个诀窍,按照降序(基于长度)对列表L
中的元素进行排序并返回第一个元素。
(define biggestElement
(λ (L)
(car (sort L list>)
)))
功能用于这样的:
>(biggestElement '((3 2 1) 1 (1 (2 3) 3))
'(1 (2 3) 3)
这仅仅是一个做的方式,也有这样做的其他方式,继续努力,并告诉我们,如果它帮助你。
正如你所看到的,我将这个大问题分解成了几个小问题。这是做DrRacket作业的一种非常方便的方式。
你可以添加你期望在你的例子中的答案吗? –
(max manylsts) - > 3 (max(first manylsts)) - > 2 – prot
你关心嵌套列表吗?你想返回最长的列表吗?或者最长列表的索引? – oobivat