Skip to content

Commit

Permalink
random: implement random for assocs.
Browse files Browse the repository at this point in the history
  • Loading branch information
mrjbq7 committed Oct 3, 2012
1 parent 8ff5d1c commit 9c41cef
Showing 1 changed file with 14 additions and 4 deletions.
18 changes: 14 additions & 4 deletions basis/random/random.factor
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
! See http://factorcode.org/license.txt for BSD license.
USING: accessors alien.c-types alien.data arrays assocs
byte-arrays byte-vectors combinators combinators.short-circuit
fry io.backend io.binary kernel locals math math.bitwise
math.constants math.functions math.order math.ranges namespaces
sequences sequences.private sets summary system vocabs hints
typed ;
fry hashtables hashtables.private hints io.backend io.binary
kernel locals math math.bitwise math.constants math.functions
math.order math.ranges namespaces sequences sequences.private
sets summary system typed vocabs ;
IN: random

SYMBOL: system-random-generator
Expand Down Expand Up @@ -72,6 +72,16 @@ M: sequence random
[ length random-integer ] keep nth
] if-empty ;

M: assoc random >alist random ;

M: hashtable random
dup assoc-size [ drop f ] [
[ 0 ] [ array>> ] [ random ] tri* 1 + [
[ 2dup array-nth tombstone? [ 2 + ] 2dip ] loop
] times [ 2 - ] dip
[ array-nth ] [ [ 1 + ] dip array-nth ] 2bi 2array
] if-zero ;

: randomize-n-last ( seq n -- seq )
[ dup length dup ] dip - 1 max '[ dup _ > ]
[ [ random ] [ 1 - ] bi [ pick exchange-unsafe ] keep ]
Expand Down

0 comments on commit 9c41cef

Please sign in to comment.