; Target Sum Subarray
(define (subvec oldvec first past)
(let ((newvec (make-vector (- past first))))
(do ((k 0 (+ k 1))) ((= k (- past first)) newvec)
(vector-set! newvec k
(vector-ref oldvec (+ k first))))))
(define (subarray vec target)
(let loop ((lo 0) (hi 1) (sum (vector-ref vec 0)))
(display lo) (display " ") (display hi)
(display " ") (display sum) (display " ")
(display (subvec vec lo hi)) (newline)
(cond ((= target sum) (list lo hi))
((< target sum) (loop (+ lo 1) hi (- sum (vector-ref vec lo))))
((= hi (vector-length vec)) #f)
(else (loop lo (+ hi 1) (+ sum (vector-ref vec hi)))))))
(display (subarray '#(1 4) 3)) (newline)
(display (subarray '#(1 4 0 0 3 10 5) 7)) (newline)
(display (subarray '#(1 4 20 3 10 5) 33)) (newline)
(display (subarray '#(1 4 20 3 10) 33)) (newline)