HN user

jmkeyes

2 karma
Posts0
Comments2
View on HN
No posts found.

Chicken Scheme:

  (use vector-lib)

  (define (add1 vec val n)
    (define *clone* (vector-copy vec)))
    (define fold-using (if (>= n 0) vector-fold vector-fold-right))
    (define (substitution-of total-replacements value)
      (define replacements-left (if (= total-replacements 0) (vector-length vec) (abs total-replacements)))
      (lambda (index mutable-vector current-element)
        (if (and (= current-element value) (> replacements-left 0)
          (begin
            (vector-set! mutable-vector index (+ 1 current-element))
            (set! replacements-left (- replacements-left 1))))
        mutable-vector))
  (fold-using (substitution-of n val) *clone* vec))
I don't like that I have to make a copy of the vector though. Maybe unfold ...