2013-03-04 72 views
-1

假设我有两个函数返回关联列表,其中一个给出了每个人拥有的瓶子的总数量,另一个给出了他们获得它所花费的天数。我如何将两个列表的平均值结合起来? 鉴于两个关联列表计划

(define (lookup k alst) 
    (cond [(empty? alst) 
     empty] 
     [(equal? k (first (first alst))) 
     (second (first alst))] 
     [else 
     (lookup k (rest alst))])) 

(define (put k v alst) 
    (cond [(empty? alst) 
     (list (list k v))] 
     [(equal? k (first (first alst))) 
     (cons (list k v) (rest alst))] 
     [else 
     (cons (first alst) 
       (put k v (rest alst)))])) 

所以说功能(total-bottles lst)回报 '((bob 10) (tim 30) (sally 25))

(days-taken lst)将返回 '((bob 2) (tim 3) (sally 5))

我会怎么做一个功能列表合并为一个平均-瓶每日功能,可以返回平均每天收集的瓶子数量以返回此结果? (average lst) '((bob 5) (tim 10) (sally 5))

+1

这两个列表是否包含完全相同的人?这两个人的名单是否完全一样? – 2013-03-05 00:10:04

+0

是的,他们是在确切的顺序和相同的人 – user1869703 2013-03-05 00:27:17

回答

1

如果两个列表都包含相同的人,并且顺序相同,请按@JhonClements建议,并查看HtDP中的配方。为了给你一个想法,这里的解决方案的总体结构,填充了空白:

(define (average l1 l2) 
    (if <???>     ; if one of the lists is null 
     <???>     ; return null 
     (cons (list    ; else cons a new 2-element list, its first element 
      <???>   ; is the name in the current position in either list 
      (/ <???> <???>)) ; and calculate the average between current elements 
      (average <???> <???>)))) ; finally, advance recursion over both lists 

注意,用于确定其中一个列表为空采摘的人的名字,它无论您使用的是哪个清单 - 因为我们假设这些清单在相同的职位上具有相同的长度和相同的人员。为了计算平均值,您需要考虑列表中的当前元素,每个列表都包含列表。一旦你完成了,不要忘了测试你的解决方案:

(average (total-bottles lst) 
     (days-taken lst)) 

=> '((bob 5) (tim 10) (sally 5)) 
+0

如何从清单列表中获取名称或编号?我真的不明白我能从名单中得到什么。像在部分(缺点(列表<...>(/ ))我将如何能够从其他列表中获得名称和编号?它会是(cons(list(first(first l1)) (/(second(first l1)(second(first l2)))? – user1869703 2013-03-05 01:21:29

+0

@ user1869703你差不多了,你会得到这一切的权利! – 2013-03-05 01:30:22

+0

(定义(平均L1 L2) (如果(或(空?L1)(空?L2)) 空 (缺点(名单 (第一(第一L1)) (/ (second(first l1))(second(first l2)))) (average(rest l1)(rest l2))))) 是我结束了,它是w与我的测试结果。它是否正确? – user1869703 2013-03-05 01:40:18

1

如果您按照您的建议,列表按照相同的顺序并且包含完全相同的人员,那么我建议您看看section 17.2 of HtDP,案例2“同时处理两个列表”。它有一堆这样的问题。

如果这不是一个类相关的问题,那么让我知道。

+0

我已阅读它,但我不知道如何将其应用到列表的列表。这是为了上课,但我在这里停留了很长时间,大约两个小时左右,所以我决定提出这个问题。 – user1869703 2013-03-05 00:35:21