[ create a new paste ] login | about

Link: http://codepad.org/8radVofz    [ raw code | output | fork ]

programmingpraxis - Scheme, pasted on Nov 21:
; an array of zeroes

(define (zeroes vec)
  (let loop ((lo 0) (hi (- (vector-length vec) 1)) (counter 0))
    (cond ((< hi lo) (values counter vec))
          ((zero? (vector-ref vec lo))
            (vector-set! vec lo (vector-ref vec hi))
            (vector-set! vec hi 0)
            (loop lo (- hi 1) counter))
          (else (loop (+ lo 1) hi (+ counter 1))))))

(call-with-values
  (lambda () (zeroes '#(1 0 2 3 0 0 4)))
  (lambda (count vec)
    (display count) (display " ")
    (display vec) (newline)))

(call-with-values
  (lambda () (zeroes '#(0 0 0 0 0)))
  (lambda (count vec)
    (display count) (display " ")
    (display vec) (newline)))

(call-with-values
  (lambda () (zeroes '#(1 1 1 1 1)))
  (lambda (count vec)
    (display count) (display " ")
    (display vec) (newline)))

(call-with-values
  (lambda () (zeroes '#(0 0 1 2 3 4 0 0)))
  (lambda (count vec)
    (display count) (display " ")
    (display vec) (newline)))

(call-with-values
  (lambda () (zeroes '#()))
  (lambda (count vec)
    (display count) (display " ")
    (display vec) (newline)))


Output:
1
2
3
4
5
4 #(1 4 2 3 0 0 0)
0 #(0 0 0 0 0)
5 #(1 1 1 1 1)
4 #(4 3 1 2 0 0 0 0)
0 #()


Create a new paste based on this one


Comments: