From cfe3cba3287255a3a6c366579f395e78f30e21e4 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Fri, 5 Oct 2012 15:35:22 -0700 Subject: [PATCH] random: support random on sets. --- basis/random/random.factor | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/basis/random/random.factor b/basis/random/random.factor index 2bf65648b93..5c3992dd5be 100644 --- a/basis/random/random.factor +++ b/basis/random/random.factor @@ -2,11 +2,12 @@ ! See http://factorcode.org/license.txt for BSD license. USING: accessors alien.data arrays assocs byte-arrays byte-vectors combinators combinators.short-circuit 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 ; +hashtables hashtables.private hash-sets 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 ; QUALIFIED-WITH: alien.c-types c +QUALIFIED-WITH: sets sets IN: random SYMBOL: system-random-generator @@ -83,6 +84,10 @@ M: hashtable random [ array-nth ] [ [ 1 + ] dip array-nth ] 2bi 2array ] if-zero ; +M: sets:set random members random ; + +M: hash-set random table>> random first ; + : randomize-n-last ( seq n -- seq ) [ dup length dup ] dip - 1 max '[ dup _ > ] [ [ random ] [ 1 - ] bi [ pick exchange-unsafe ] keep ]