[ create a new paste ] login | about

Project: programmingpraxis
Link: http://programmingpraxis.codepad.org/tOTusNoj    [ raw code | output | fork ]

programmingpraxis - Scheme, pasted on Feb 6:
; search in an ascending 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 m (vector #(1 5 7 9) #(4 6 10 15) #(8 11 12 19) #(14 16 18 21)))

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

(call-with-values
  (lambda () (search m 11))
  (lambda (r c)
    (display r) (newline)
    (display c) (newline)))

(display (search m 13)) (newline)


Output:
1
2
3
2
1
#f


Create a new paste based on this one


Comments: