2015-07-19 68 views
0

我有一个关于在计划中找到一组列表中最大的列表的问题。查找列表中列表的最大列表?

例如,我们定义: (定义manylsts(列表(列表9(表8 7))6(表5(表4 3 2)1)))

我将如何去寻找在manylsts最大的名单? 谢谢

+0

你可以添加你期望在你的例子中的答案吗? –

+0

(max manylsts) - > 3 (max(first manylsts)) - > 2 – prot

+0

你关心嵌套列表吗?你想返回最长的列表吗?或者最长列表的索引? – oobivat

回答

0

如果参数不是列表,那么您可以创建一个计算为零的过程。 (例如,9),那么如果它的列表你foldl在元素上使用length的参数作为累加器与lambdamax之间的第一个参数递归与累加器。这将是这个样子:

(define (max-children tree) 
    (if <??> 
     (foldl (λ (x acc) 
       (max <??> (max-children <??>))) 
      (length <??>) 
      <??>) 
     0)) 

当然也有这样做的,包括明确的递归的方法很多,但是这是第一件事情,虽然我。

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如果listAlistB小。如果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作业的一种非常方便的方式。