代码“tsFunc”获取两个列表作为输入,它将对两个列表中的每个元素进行配对。它适用于大多数情况。但是当我给出 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))
当两个输入列表长度相同时,会发生什么?tsFunc 逻辑在具有相同长度的输入列表与具有不同长度的输入列表之间有不同的行为吗?(注意。据我所知,代码需要为最终结果“反转”。所以不是因为代码中的“反转”)
[问题2] tsFunc => tsFunc 结果:(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 结果以将其用作输入和.. 最后一行的两个列表.. 不清楚..