
(define (for-every vals pred)
  (if (null? vals) #t
      (and (pred (car vals))
           (for-every (cdr vals) pred))))

(define (square-root-estimate n x)
  (let ((x2 (/ n x)))
    (if (< (abs (- x x2)) 1/10000) x
        (square-root-estimate n (/ (+ x x2) 2)))))

(define (create-matrix width height default)
  (let ((matrix (make-vector width)))
    (let fill ((column 0))
      (if (>= column width) matrix
          (begin (vector-set! matrix column (make-vector height default))
                 (fill (+ column 1)))))))

(define (matrix-ref m col row)
  (vector-ref (vector-ref m col) row))

(define (matrix-set! m col row value)
  (vector-set! (vector-ref m col) row value))

(define (for min max funct)
  (if (>= min max) #f
      (begin (funct min)
             (for (+ min 1) max funct))))

(define (read-line)
  (let ((c (read-char)))
    (cond ((eof-object? c) '())
	  ((eqv? c #\newline) (list c))
	  (else (cons c (read-line))))))

