factor/extra/assocs/lib/lib.factor

48 lines
1.2 KiB
Factor
Raw Normal View History

2008-03-15 07:22:47 -04:00
USING: arrays assocs kernel vectors sequences namespaces
2008-05-28 18:51:02 -04:00
random math.parser math fry ;
2008-01-10 21:49:42 -05:00
IN: assocs.lib
2008-01-18 00:51:03 -05:00
: ref-at ( table key -- value ) swap at ;
2008-01-10 21:49:42 -05:00
2008-01-18 00:51:03 -05:00
: put-at* ( table key value -- ) swap rot set-at ;
2008-01-10 21:49:42 -05:00
2008-01-18 00:51:03 -05:00
: put-at ( table key value -- table ) swap pick set-at ;
2008-01-10 21:49:42 -05:00
2008-01-18 00:51:03 -05:00
: set-assoc-stack ( value key seq -- )
2008-01-28 00:30:24 -05:00
dupd [ key? ] with find-last nip set-at ;
2008-01-10 21:49:42 -05:00
: at-default ( key assoc -- value/key )
dupd at [ nip ] when* ;
2008-01-16 16:25:29 -05:00
2008-02-25 15:53:18 -05:00
: replace-at ( assoc value key -- assoc )
>r >r dup r> 1vector r> rot set-at ;
2008-02-02 00:47:37 -05:00
: insert-at ( value key assoc -- )
[ ?push ] change-at ;
2008-02-25 15:53:18 -05:00
: peek-at* ( assoc key -- obj ? )
swap at* dup [ >r peek r> ] when ;
2008-02-02 00:47:37 -05:00
2008-02-25 15:53:18 -05:00
: peek-at ( assoc key -- obj )
2008-02-02 00:47:37 -05:00
peek-at* drop ;
: >multi-assoc ( assoc -- new-assoc )
[ 1vector ] assoc-map ;
: multi-assoc-each ( assoc quot -- )
[ with each ] curry assoc-each ; inline
: insert ( value variable -- ) namespace insert-at ;
2008-03-14 13:56:36 -04:00
2008-03-15 07:22:47 -04:00
: generate-key ( assoc -- str )
2008-04-26 06:49:53 -04:00
>r 32 random-bits >hex r>
2008-03-15 07:22:47 -04:00
2dup key? [ nip generate-key ] [ drop ] if ;
: set-at-unique ( value assoc -- key )
dup generate-key [ swap set-at ] keep ;
2008-05-28 18:51:02 -04:00
: histogram ( assoc quot -- assoc' )
H{ } clone [
swap [ change-at ] 2curry assoc-each
] keep ;