; 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)
