DrRacket生成递归问题需要帮助

时间:2015-12-09 05:43:19

标签: recursion racket generative

我的计算机科学课需要两个问题的帮助。问题如下。

  1. 写一个函数contains-all?如果第一个列表包含第二个列表的所有元素,则消耗两个数字列表并返回true,否则返回false。为简单起见,假设两个列表都不会多次包含相同的元素。

  2. 编写一个函数common-elements,它接受两个数字列表,并返回两个列表中出现的所有元素的列表。

  3. 对于数字1,到目前为止,我有以下代码:

    (define (contains-all? lon lon2)     
     (cond        
     [(and (empty? lon) (empty? lon2)) true]       
     [(or (empty? lon) (empty? lon2)) false       
     [(equal? (first lon) (first lon2)) (contains-all? (rest lon) (rest lon2))]    
     [else false]))
    

    我的检查预期如下:

    (check-expect (contains-all? empty empty) true)
    (check-expect (contains-all? empty (list 1 2 3)) false)    
    (check-expect (contains-all? (list 1 2 3) empty) false)    
    (check-expect (contains-all? (list 1 2 3) (list 3 2 1)) true)    
    (check-expect (contains-all? (list 1 2 4 6 8) (list 6 8 4)) true)    
    (check-expect (contains-all? (list 1 2 8 6) (list 1 2 6 4)) false)
    

    我知道一些检查预期会失败,这就是我需要帮助的地方。

    问题2到目前为止我有这个

    (define (common-elements lon lon2)      
    (cond        
    [(and (empty? lon) (empty? lon2)) empty]        
    [(or (empty? lon) (empty? lon2)) empty]        
    [(equal? (first lon) (first lon2))         
    (cons (first lon) (common-elements (rest lon) (rest lon2)))]        
    [(not (equal? (first lon) (first lon2))) (common-elements (first lon) (first lon2))]        
    ;[else (common-elements (first lon) (rest lon2))]))    
    

    检查预期如下:

    (check-expect (common-elements empty empty) empty)    
    (check-expect (common-elements empty (list 1 2)) empty)    
    (check-expect (common-elements (list 1 2) empty) empty)    
    (check-expect (common-elements (list 1 2 3) (list 1 2 4)) (list 1 2))    
    (check-expect (common-elements (list 3 2 1) (list 2 1)) (list 2 1))
    

    我遇到了与2号相同的问题并需要帮助。

1 个答案:

答案 0 :(得分:0)

正如@uselpa指出的那样,很大程度上取决于列表中的数字是否保证排序。您的问题陈述建议不,但您的代码建议是。你有这个保证吗?我猜答案是否定的。

接下来:您建议这是一个需要生成递归的问题,但事实并非如此。具体来说,这两个函数看起来都像是HtDP Processing Two Lists Simultaneously: Case 1的直接实例。

如果您的导师声称这些需要生成递归,我声称您的导师错了:)。

但是,我可以说,如果您在构建主要功能时使用“愿望清单”方法来描述所需的功能,这两个问题将会更加容易。

另外,正如@Renzo指出的那样,您的至少一个测试用例中似乎存在错误;包含1,2和3的列表肯定包含空列表中的所有元素。