2013-03-04 71 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