fork download
  1. ; find target in a matrix
  2.  
  3. (define (matrix-rows x) (vector-length x))
  4. (define (matrix-cols x) (vector-length (vector-ref x 0)))
  5. (define (matrix-ref m i j) (vector-ref (vector-ref m i) j))
  6.  
  7. (define (target m x)
  8. (let loop ((r 0) (c (- (matrix-cols m) 1)))
  9. (cond ((or (negative? c) (= (matrix-rows m) r)) #f)
  10. ((< x (matrix-ref m r c)) (loop r (- c 1)))
  11. ((< (matrix-ref m r c) x) (loop (+ r 1) c))
  12. (else (values r c)))))
  13.  
  14. (define m '#(
  15. #( 1 12 43 87)
  16. #( 9 25 47 88)
  17. #(17 38 48 92)
  18. #(45 49 74 95)))
  19.  
  20. (display (target m 72)) (newline)
  21.  
  22. (call-with-values
  23. (lambda () (target m 38))
  24. (lambda (r c)
  25. (display r) (newline)
  26. (display c) (newline)))
Success #stdin #stdout 0.01s 42848KB
stdin
Standard input is empty
stdout
#f
2
1