2012-10-30 24 views
2

我需要在Scheme(球拍)中編寫一個函數,該函數需要兩個不一定相等的長度列表 ,並返回一個列表,其中每個元素是相同的 索引的元素之和兩個列表。如果列表的長度不相等,則較短的一個應該追加到自身,直到它達到較長的那個的大小。例如:方案:通過索引添加2個列表

=> (addLists '(1 2 3 4) '(1 2)) 
(2 4 4 6) 

=> (addLists '(1 2 3 4) '(1 2 3 4 5)) 
(2 4 6 8 6) 

直到現在我能夠編寫完成此同等長度列表的功能,但問題在於我怎麼增加短名單的長度在這個函數中(或與助手函數獲取一個列表和一個大小並正確地擴展它)。

(define (sumListPairs lst1 lst2) 
    (if (null? lst1) null 
     (cons (+ (car lst1) (car lst2)) 
     (sumListPairs (cdr lst1) (cdr lst2))))) 

將不勝感激任何幫助,謝謝。

+1

您可能希望粘貼當前的addLists定義,這將幫助人們幫助您。 –

+0

現在做了,謝謝! –

回答

0

這可以做到,但由於我的印象是這是一項家庭作業練習,我只會給出提示。首先,引入一個名爲let來做實際的遞歸。然後,將遞歸中的個案數量從兩個擴展到四個。

(define (sumListPairs lst1 lst2) 
    (let loop ((l1 lst1) (l2 lst2)) 
    (cond ((and (null? l1) (null? l2)) null) 
      ((null? l1) ...) 
      ((null? l2) ...) 
      (else (cons (+ (car lst1) (car lst2)) 
         (loop (cdr l1) (cdr l2))))))) 

現在,填寫...部分。請注意,您可以訪問所有l1,l2,lst1lst2。 (完成後您可能需要重構一些內容,因爲案例會非常相似。)

+0

我發佈的第一個問題,did not知道如何標記它爲作業:) 將嘗試此解決方案! –

+0

@TomerBlu:你不能再把作業當作家庭作業了;你可以把它放在問題中(但從問題描述中已經清楚了:) –