코드 "tsFunc"는 두 개의 목록을 입력으로 가져오고 두 목록의 각 요소를 쌍으로 만듭니다. 대부분의 경우 작동합니다. 그런데 2 등 길이의리스트 (예 : '(1 2)'(3 4) .... 또는 '(abc)'(1 2 3) ....)를 주면 조금 이상한 행동을합니다. . 이상하게 작동 첫째, 현재 코드은 길이가 다른 두 입력 목록과 동작 길이가 다릅니다 (Scheme)
[문제 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)'(a b c)) ===> output (wrong) : ((3. . c) (2 b) (1)) ===> 예상 :.... ((1) (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 ok .. 그게 무엇을 해야할지에 대한 논리입니다. tsFunc 결과를 입력으로 사용하는 방법 ... 마지막 줄에 대한 두 개의 목록 .. 불명확 ..
매번 거꾸로되는 것처럼 보입니다. 어큐뮬레이터를 반환 할 준비가되면 그냥 뒤집으십시오. – ggovan