assocs: Add sift-keys and sift-values. Remove three other implementations
of sift-values and use the new one.db4
parent
2fef140e79
commit
27f445d505
|
@ -48,7 +48,7 @@ IN: compiler.tree.combinators
|
||||||
[ [ drop f ] unless ] 2map ;
|
[ [ drop f ] unless ] 2map ;
|
||||||
|
|
||||||
: sift-children ( seq flags -- seq' )
|
: sift-children ( seq flags -- seq' )
|
||||||
zip [ nip ] assoc-filter keys ;
|
zip sift-values keys ;
|
||||||
|
|
||||||
: until-fixed-point ( ... #recursive quot: ( ... node -- ... ) -- ... )
|
: until-fixed-point ( ... #recursive quot: ( ... node -- ... ) -- ... )
|
||||||
over label>> t >>fixed-point drop
|
over label>> t >>fixed-point drop
|
||||||
|
|
|
@ -33,7 +33,7 @@ TUPLE: jis assoc ;
|
||||||
: jis>ch ( jis tuple -- string ) assoc>> at replacement-char or ;
|
: jis>ch ( jis tuple -- string ) assoc>> at replacement-char or ;
|
||||||
|
|
||||||
: make-jis ( filename -- jis )
|
: make-jis ( filename -- jis )
|
||||||
flat-file>biassoc [ nip ] assoc-filter jis boa ;
|
flat-file>biassoc sift-values jis boa ;
|
||||||
|
|
||||||
"vocab:io/encodings/shift-jis/CP932.txt"
|
"vocab:io/encodings/shift-jis/CP932.txt"
|
||||||
make-jis windows-31j-table set-global
|
make-jis windows-31j-table set-global
|
||||||
|
|
|
@ -129,7 +129,7 @@ M: word integer-op-input-classes
|
||||||
: define-math-ops ( op -- )
|
: define-math-ops ( op -- )
|
||||||
{ fixnum bignum float }
|
{ fixnum bignum float }
|
||||||
[ [ dup 3array ] [ swap ?lookup-method ] 2bi ] with { } map>assoc
|
[ [ dup 3array ] [ swap ?lookup-method ] 2bi ] with { } map>assoc
|
||||||
[ nip ] assoc-filter
|
sift-values
|
||||||
[ def>> ] assoc-map
|
[ def>> ] assoc-map
|
||||||
[ nip length 1 = ] assoc-filter
|
[ nip length 1 = ] assoc-filter
|
||||||
[ first ] assoc-map % ;
|
[ first ] assoc-map % ;
|
||||||
|
|
|
@ -300,8 +300,7 @@ M: object substitute answer ;
|
||||||
M: not-class substitute [ <not-class> ] bi@ answer ;
|
M: not-class substitute [ <not-class> ] bi@ answer ;
|
||||||
|
|
||||||
: assoc-answer ( table question answer -- new-table )
|
: assoc-answer ( table question answer -- new-table )
|
||||||
'[ _ _ substitute ] assoc-map
|
'[ _ _ substitute ] assoc-map sift-values ;
|
||||||
[ nip ] assoc-filter ;
|
|
||||||
|
|
||||||
: assoc-answers ( table questions answer -- new-table )
|
: assoc-answers ( table questions answer -- new-table )
|
||||||
'[ _ assoc-answer ] each ;
|
'[ _ assoc-answer ] each ;
|
||||||
|
|
|
@ -125,13 +125,11 @@ IN: tools.deploy.shaker
|
||||||
[ "no-def-strip" word-prop not ] filter
|
[ "no-def-strip" word-prop not ] filter
|
||||||
[ [ ] >>def drop ] each ;
|
[ [ ] >>def drop ] each ;
|
||||||
|
|
||||||
: sift-assoc ( assoc -- assoc' ) [ nip ] assoc-filter ;
|
|
||||||
|
|
||||||
: strip-word-props ( stripped-props words -- )
|
: strip-word-props ( stripped-props words -- )
|
||||||
"Stripping word properties" show
|
"Stripping word properties" show
|
||||||
swap '[
|
swap '[
|
||||||
[
|
[
|
||||||
[ drop _ member? not ] assoc-filter sift-assoc
|
[ drop _ member? not ] assoc-filter sift-values
|
||||||
>alist f like
|
>alist f like
|
||||||
] change-props drop
|
] change-props drop
|
||||||
] each ;
|
] each ;
|
||||||
|
|
|
@ -36,7 +36,7 @@ GENERIC: command-word ( command -- word )
|
||||||
commands values [
|
commands values [
|
||||||
[
|
[
|
||||||
commands>>
|
commands>>
|
||||||
[ drop ] assoc-filter
|
sift-keys
|
||||||
[ '[ _ invoke-command ] swap ,, ] assoc-each
|
[ '[ _ invoke-command ] swap ,, ] assoc-each
|
||||||
] each
|
] each
|
||||||
] H{ } make ;
|
] H{ } make ;
|
||||||
|
|
|
@ -82,14 +82,11 @@ DEFER: interpolate-sequence
|
||||||
[ get-interpolated '[ _ swap @ [ ?present 2array ] dip ] ]
|
[ get-interpolated '[ _ swap @ [ ?present 2array ] dip ] ]
|
||||||
[ 2array '[ _ swap ] ] if ;
|
[ 2array '[ _ swap ] ] if ;
|
||||||
|
|
||||||
: filter-nulls ( assoc -- newassoc )
|
|
||||||
[ nip ] assoc-filter ;
|
|
||||||
|
|
||||||
: interpolate-attrs ( attrs -- quot )
|
: interpolate-attrs ( attrs -- quot )
|
||||||
[
|
[
|
||||||
[ [ interpolate-attr ] { } assoc>map [ ] join ]
|
[ [ interpolate-attr ] { } assoc>map [ ] join ]
|
||||||
[ assoc-size ] bi
|
[ assoc-size ] bi
|
||||||
'[ @ _ swap [ narray filter-nulls <attrs> ] dip ]
|
'[ @ _ swap [ narray sift-values <attrs> ] dip ]
|
||||||
] when-interpolated ;
|
] when-interpolated ;
|
||||||
|
|
||||||
: interpolate-tag ( tag -- quot )
|
: interpolate-tag ( tag -- quot )
|
||||||
|
|
|
@ -151,6 +151,11 @@ $nl
|
||||||
assoc-any?
|
assoc-any?
|
||||||
assoc-all?
|
assoc-all?
|
||||||
}
|
}
|
||||||
|
"Removing empty keys or values:"
|
||||||
|
{ $subsections
|
||||||
|
sift-keys
|
||||||
|
sift-values
|
||||||
|
}
|
||||||
"Mapping between assocs and sequences:"
|
"Mapping between assocs and sequences:"
|
||||||
{ $subsections
|
{ $subsections
|
||||||
map>assoc
|
map>assoc
|
||||||
|
@ -306,6 +311,14 @@ HELP: assoc-subset?
|
||||||
{ $values { "assoc1" assoc } { "assoc2" assoc } { "?" boolean } }
|
{ $values { "assoc1" assoc } { "assoc2" assoc } { "?" boolean } }
|
||||||
{ $description "Tests if " { $snippet "assoc2" } " contains all key/value pairs of " { $snippet "assoc1" } "." } ;
|
{ $description "Tests if " { $snippet "assoc2" } " contains all key/value pairs of " { $snippet "assoc1" } "." } ;
|
||||||
|
|
||||||
|
HELP: sift-keys
|
||||||
|
{ $values { "assoc" assoc } { "assoc'" "a new assoc" } }
|
||||||
|
{ $description "Outputs an assoc removing keys that are " { $link f } "." } ;
|
||||||
|
|
||||||
|
HELP: sift-values
|
||||||
|
{ $values { "assoc" assoc } { "assoc'" "a new assoc" } }
|
||||||
|
{ $description "Outputs an assoc removing values that are " { $link f } "." } ;
|
||||||
|
|
||||||
HELP: assoc=
|
HELP: assoc=
|
||||||
{ $values { "assoc1" assoc } { "assoc2" assoc } { "?" boolean } }
|
{ $values { "assoc1" assoc } { "assoc2" assoc } { "?" boolean } }
|
||||||
{ $description "Tests if two assocs contain the same entries. Unlike " { $link = } ", the two assocs may be of different types." }
|
{ $description "Tests if two assocs contain the same entries. Unlike " { $link = } ", the two assocs may be of different types." }
|
||||||
|
|
|
@ -199,3 +199,16 @@ unit-test
|
||||||
[ 1 ] [ "a" { H{ { "a" 1 } } H{ { "b" 2 } } } assoc-stack ] unit-test
|
[ 1 ] [ "a" { H{ { "a" 1 } } H{ { "b" 2 } } } assoc-stack ] unit-test
|
||||||
[ 2 ] [ "b" { H{ { "a" 1 } } H{ { "b" 2 } } } assoc-stack ] unit-test
|
[ 2 ] [ "b" { H{ { "a" 1 } } H{ { "b" 2 } } } assoc-stack ] unit-test
|
||||||
[ f ] [ "c" { H{ { "a" 1 } } H{ { "b" 2 } } } assoc-stack ] unit-test
|
[ f ] [ "c" { H{ { "a" 1 } } H{ { "b" 2 } } } assoc-stack ] unit-test
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
{ { 1 f } }
|
||||||
|
} [
|
||||||
|
{ { 1 f } { f 2 } } sift-keys
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
{
|
||||||
|
{ { f 2 } }
|
||||||
|
} [
|
||||||
|
{ { 1 f } { f 2 } } sift-values
|
||||||
|
] unit-test
|
|
@ -78,6 +78,12 @@ PRIVATE>
|
||||||
assoc-each
|
assoc-each
|
||||||
] [ drop ] 2bi ; inline
|
] [ drop ] 2bi ; inline
|
||||||
|
|
||||||
|
: sift-keys ( assoc -- assoc' )
|
||||||
|
[ drop ] assoc-filter ; inline
|
||||||
|
|
||||||
|
: sift-values ( assoc -- assoc' )
|
||||||
|
[ nip ] assoc-filter ; inline
|
||||||
|
|
||||||
: assoc-partition ( ... assoc quot: ( ... key value -- ... ? ) -- ... true-assoc false-assoc )
|
: assoc-partition ( ... assoc quot: ( ... key value -- ... ? ) -- ... true-assoc false-assoc )
|
||||||
[ (assoc-each) partition ] [ drop ] 2bi
|
[ (assoc-each) partition ] [ drop ] 2bi
|
||||||
[ assoc-like ] curry bi@ ; inline
|
[ assoc-like ] curry bi@ ; inline
|
||||||
|
|
|
@ -8,9 +8,6 @@ IN: assocs.extras
|
||||||
: assoc-harvest ( assoc -- assoc' )
|
: assoc-harvest ( assoc -- assoc' )
|
||||||
[ nip empty? not ] assoc-filter ; inline
|
[ nip empty? not ] assoc-filter ; inline
|
||||||
|
|
||||||
: assoc-sift ( assoc -- assoc' )
|
|
||||||
[ nip ] assoc-filter ; inline
|
|
||||||
|
|
||||||
: deep-at ( assoc seq -- value/f )
|
: deep-at ( assoc seq -- value/f )
|
||||||
[ swap at ] each ; inline
|
[ swap at ] each ; inline
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue