; find target in a matrix

(define (matrix-rows x) (vector-length x))
(define (matrix-cols x) (vector-length (vector-ref x 0)))
(define (matrix-ref m i j) (vector-ref (vector-ref m i) j))

(define (target m x)
  (let loop ((r 0) (c (- (matrix-cols m) 1)))
    (cond ((or (negative? c) (= (matrix-rows m) r)) #f)
          ((< x (matrix-ref m r c)) (loop r (- c 1)))
          ((< (matrix-ref m r c) x) (loop (+ r 1) c))
          (else (values r c)))))

(define m '#(
  #( 1 12 43 87)
  #( 9 25 47 88)
  #(17 38 48 92)
  #(45 49 74 95)))

(display (target m 72)) (newline)

(call-with-values
  (lambda () (target m 38))
  (lambda (r c)
    (display r) (newline)
    (display c) (newline)))