код «tsFunc» получает два списка в качестве входных данных, и он будет соединять каждый элемент из двух списков. Это работает в большинстве случаев. но затем я нахожу немного странное поведение, когда я даю 2 равной длины списков (например, '(1 2)' (3 4).... или '(a b c)' (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) '(a b)) ====> output: ((1 .a) (2 .b))
2) странное поведение с четной длиной списков: (tsFunc '(1 2 3) '(a b c)) ===> вывод (неправильный): ((3 . c) (2 . b) (1 . a)) = ==> ожидается : ((1.a) (2.b) (3.c))
когда два входных списка имеют одинаковую длину, что происходит? имеет ли логика 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, чтобы использовать его в качестве входных данных и.. два списка для последней строки.. непонятно..