1 ! Copyright (C) 2005, 2006 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
4 USING: hashtables kernel math namespaces sequences words ;
6 SYMBOL: recursive-state
8 : <computed> \ <computed> counter ;
10 TUPLE: value uid literal recursion ;
12 C: value ( obj -- value )
13 <computed> over set-value-uid
14 recursive-state get over set-value-recursion
15 [ set-value-literal ] keep ;
17 M: value hashcode value-uid ;
21 M: integer value-uid ;
23 M: integer value-recursion drop f ;
25 : split-shuffle ( stack shuffle -- stack1 stack2 )
26 effect-in length swap cut* ;
28 : load-shuffle ( stack shuffle -- )
29 effect-in [ set ] 2each ;
31 : shuffled-values ( shuffle -- values )
32 effect-out [ get ] map ;
34 : shuffle* ( stack shuffle -- stack )
35 [ [ load-shuffle ] keep shuffled-values ] with-scope ;
37 : shuffle ( stack shuffle -- stack )
38 [ split-shuffle ] keep shuffle* append ;