Skip to content

Instantly share code, notes, and snippets.

@brv00
Last active June 22, 2018 04:42
Show Gist options
  • Save brv00/0175bdf47dc70cf9e10d02e3c067cced to your computer and use it in GitHub Desktop.
Save brv00/0175bdf47dc70cf9e10d02e3c067cced to your computer and use it in GitHub Desktop.
(use-module "elf/util.scm") ; dotimes
(define (vector-swap! vec i1 i2) ; srfi-133
(let ((t (vector-ref vec i1)))
(vector-set! vec i1 (vector-ref vec i2))
(vector-set! vec i2 t)))
;; ベクターをシャッフルする。
(define-method (random-shuffle! vec (r Random))
(dotimes (i (vector-length vec)) (vector-swap! vec i (.nextInt r (+ i 1))))
vec)
(define-method (random-shuffle! vec (seed Number))
(random-shuffle! vec (Random. (.longValue seed))))
(define-method (random-shuffle! vec)
(random-shuffle! vec (Random.)))
;; ベクターをシャッフルする。全ての要素が元の位置から移動する。
(define-method (random-shuffle1! vec (r Random))
(let ((len-1 (- (vector-length vec) 1)))
(dotimes (i len-1)
(vector-swap! vec (- len-1 i) (.nextInt r (- len-1 i)))))
vec)
(define-method (random-shuffle1! vec (seed Number))
(random-shuffle1! vec (Random. (.longValue seed))))
(define-method (random-shuffle1! vec)
(random-shuffle1! vec (Random.)))
;; srfi-133 の vector-copy。範囲チェックはなし。
(define-method (vector-copy vec start end fill)
(let* ((len (- end start)) (new-vector (make-vector len fill)))
(dotimes (i (min len (- (vector-length vec) start)))
(vector-set! new-vector i (vector-ref vec (+ start i))))
new-vector))
(define-method (vector-copy vec start end)
(vector-copy vec start end #null))
(define-method (vector-copy vec start)
(vector-copy vec start (vector-length vec) #null))
(define-method (vector-copy vec)
(vector-copy vec 0 (vector-length vec) #null))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment