コード「tsFunc」は入力として 2 つのリストを取得し、2 つのリストの各要素をペアにします。ほとんどの場合に機能します。しかし、2つの等しい長さのリストを与えると、少し奇妙な動作が見つかります(たとえば、 '(1 2) '(3 4).... または '(abc) '(1 2 3).... 、それは機能しますまず、ここにコードがあります。
【問題1】
(define (tsFunc lst1 lst2)
(define (helper ls1 ls2 rst)
(reverse (if (or (null? ls1) (null? ls2))
rst
(helper (cdr ls1) (cdr ls2)
(cons (cons (car ls1) (car ls2)) rst)))))
(helper lst1 lst2 '()))
このような動作:
1) リストの長さが不均一な場合の正しい動作: (tsFunc '(1 2 3) '(ab)) ====> 出力: ((1 . a) (2 . b))
2) リストの長さが偶数の場合の奇妙な動作: (tsFunc '(1 2 3) '(abc)) ===> 出力 (間違った): ((3 . c) (2 . b) (1 . a)) = ==> 予想: ((1 . a) (2 . b) (3 . c))
2 つの入力リストが同じ長さの場合、何が起こっているのでしょうか? tsFunc ロジックは、同じ長さの入力リストと異なる長さの入力リストの間で異なる動作をしますか? (注。私が知っているように、コードには最終結果のために「逆」が必要です。したがって、コードの「逆」が原因ではありません)
[問題 2] tsFunc => tsFunc result: (1 . 2) (3 . 4) => の結果で (1*2)+(3*4) = 14 のような製品を実装しようとすると、次のようになります。これ..
(define (func l1 l2)
(tsFunc (l1 l2) ;; line 2 - how to call tsFunc's result??
(foldl (lambda (acc pair) ;; line 3
(+ acc (* (car pair) (cdr pair)))) ;; line 4
'()
l1 l2))) ;; like this?? or ??
行 3 、 4 わかりました..これが何をすべきかのロジックです。それから、tsFunc の結果を呼び出してそれを入力として使用する方法と..最後の行の 2 つのリスト..不明..