2

2つの必ずしも等しい長さのリストを取り、各要素が2つのリストからの同じインデックスの要素の合計であるリストを返すScheme(Racket)で関数を作成する必要があります。リストの長さが等しくない場合は、長い方のリストのサイズに達するまで、短い方のリストを追加する必要があります。例えば:

=> (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)))))

助けていただければ幸いです、ありがとうございます。

4

1 に答える 1

0

これは可能ですが、これは宿題のような印象があるので、ヒントをあげるだけです。letまず、実際の再帰を行うために、named-を導入します。次に、再帰のケース数を2から4に増やします。

(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にアクセスできることに注意してください。(ケースは非常に似ているので、完了後に少しリファクタリングすることをお勧めします。)l2lst1lst2

于 2012-10-30T21:24:39.583 に答える