assocs: making keys and values generic.
parent
987ecea441
commit
9926c205a5
|
@ -16,6 +16,8 @@ GENERIC: assoc-size ( assoc -- n )
|
||||||
GENERIC: assoc-like ( assoc exemplar -- newassoc )
|
GENERIC: assoc-like ( assoc exemplar -- newassoc )
|
||||||
GENERIC: assoc-clone-like ( assoc exemplar -- newassoc )
|
GENERIC: assoc-clone-like ( assoc exemplar -- newassoc )
|
||||||
GENERIC: >alist ( assoc -- newassoc )
|
GENERIC: >alist ( assoc -- newassoc )
|
||||||
|
GENERIC: keys ( assoc -- keys )
|
||||||
|
GENERIC: values ( assoc -- values )
|
||||||
|
|
||||||
M: assoc assoc-like drop ; inline
|
M: assoc assoc-like drop ; inline
|
||||||
|
|
||||||
|
@ -107,11 +109,9 @@ M: assoc assoc-clone-like ( assoc exemplar -- newassoc )
|
||||||
[ dup assoc-size ] dip new-assoc
|
[ dup assoc-size ] dip new-assoc
|
||||||
[ [ set-at ] with-assoc assoc-each ] keep ; inline
|
[ [ set-at ] with-assoc assoc-each ] keep ; inline
|
||||||
|
|
||||||
: keys ( assoc -- keys )
|
M: assoc keys [ drop ] { } assoc>map ;
|
||||||
[ drop ] { } assoc>map ;
|
|
||||||
|
|
||||||
: values ( assoc -- values )
|
M: assoc values [ nip ] { } assoc>map ;
|
||||||
[ nip ] { } assoc>map ;
|
|
||||||
|
|
||||||
: delete-at* ( key assoc -- old ? )
|
: delete-at* ( key assoc -- old ? )
|
||||||
[ at* ] 2keep delete-at ;
|
[ at* ] 2keep delete-at ;
|
||||||
|
|
Loading…
Reference in New Issue