! Copyright (C) 2010 Jon Harper.
! See http://factorcode.org/license.txt for BSD license.
USING: arrays assocs combinators combinators.short-circuit
-kernel macros math math.order quotations random sequences
-summary ;
+kernel math math.order quotations random sequences summary ;
IN: combinators.random
: ifp ( p true false -- ) [ random-unit > ] 2dip if ; inline
cond>quot
] [ bad-probabilities ] if ;
-MACRO: (casep) ( assoc -- ) (casep>quot) ;
+MACRO: (casep) ( assoc -- quot ) (casep>quot) ;
: casep>quot ( assoc -- quot )
(casep>quot) [ random-unit ] prepend ;
[ swap nth ] 2bi * ;
: conditional-probabilities ( seq -- seq' )
- dup length iota [ (conditional-probabilities) ] with map ;
+ dup length <iota> [ (conditional-probabilities) ] with map ;
: (direct>conditional) ( assoc -- assoc' )
[ keys conditional-probabilities ] [ values ] bi zip ;
PRIVATE>
-MACRO: casep ( assoc -- ) casep>quot ;
+MACRO: casep ( assoc -- quot ) casep>quot ;
-MACRO: casep* ( assoc -- ) direct>conditional casep>quot ;
+MACRO: casep* ( assoc -- quot ) direct>conditional casep>quot ;
-MACRO: call-random ( seq -- ) call-random>casep casep>quot ;
+MACRO: call-random ( seq -- quot ) call-random>casep casep>quot ;
-MACRO: execute-random ( seq -- )
+MACRO: execute-random ( seq -- quot )
[ 1quotation ] map call-random>casep casep>quot ;