]> gitweb.factorcode.org Git - factor.git/commitdiff
assocs.extras: Move some often-used words to core
authorGiftpflanze <gifti@tools.wmflabs.org>
Mon, 11 Sep 2023 09:25:24 +0000 (11:25 +0200)
committerJohn Benediktsson <mrjbq7@gmail.com>
Mon, 11 Sep 2023 18:19:01 +0000 (11:19 -0700)
* Move assoc-reduce, {filter,reject,map,reduce,sum}-{keys,values},
assoc-any-{key,value}?, assoc-all-{keys,values}? to assocs
* Rename assoc-all-{key,value}? to all-{keys,values}?
* Rename assoc-any-{key,value}? to any-{key,value}?
* Use moved words

* Substitute `rot drop` => `nipd`, `drop rot drop` => `roll 2drop`
* Add lint for `rot drop` = `nipd`

60 files changed:
basis/cache/cache.factor
basis/cocoa/messages/messages.factor
basis/combinators/smart/smart-tests.factor
basis/compiler/cfg/predecessors/predecessors.factor
basis/compiler/cfg/representations/selection/selection.factor
basis/compiler/cfg/stacks/local/local-tests.factor
basis/compiler/crossref/crossref.factor
basis/compiler/tree/dead-code/simple/simple.factor
basis/compiler/tree/escape-analysis/allocations/allocations.factor
basis/compiler/tree/tuple-unboxing/tuple-unboxing.factor
basis/cpu/arm/64/64.factor
basis/etc-hosts/etc-hosts.factor
basis/fixups/fixups.factor
basis/furnace/auth/providers/couchdb/couchdb.factor
basis/hints/hints.factor
basis/html/templates/chloe/compiler/compiler.factor
basis/html/templates/chloe/components/components.factor
basis/logging/analysis/analysis.factor
basis/math/floats/env/env.factor
basis/math/partial-dispatch/partial-dispatch.factor
basis/math/vectors/simd/simd-tests.factor
basis/oauth1/oauth1.factor
basis/regexp/dfa/dfa.factor
basis/regexp/disambiguate/disambiguate.factor
basis/regexp/minimize/minimize.factor
basis/smtp/smtp-tests.factor
basis/tools/coverage/coverage.factor
basis/tools/deploy/shaker/shaker.factor
basis/tools/deprecation/deprecation.factor
basis/tools/profiler/sampling/sampling.factor
basis/ui/gadgets/panes/panes.factor
basis/unicode/data/data.factor
basis/windows/user32/user32.factor
core/alien/alien.factor
core/assocs/assocs.factor
core/generic/single/single.factor
core/hash-sets/hash-sets.factor
core/hashtables/hashtables.factor
core/vocabs/parser/parser.factor
extra/anagrams/anagrams.factor
extra/assocs/extras/extras.factor
extra/calendar/holidays/holidays.factor
extra/cgi/cgi.factor
extra/crypto/rsa/rsa.factor
extra/git/git.factor
extra/koszul/koszul.factor
extra/lint/lint.factor
extra/lint/vocabs/vocabs.factor
extra/managed-server/managed-server.factor
extra/modern/modern.factor
extra/multi-methods/multi-methods.factor
extra/npm/npm.factor
extra/project-euler/061/061.factor
extra/project-euler/164/164.factor
extra/rosetta-code/anagrams-deranged/anagrams-deranged.factor
extra/sequences/abbrev/abbrev.factor
extra/sequences/extras/extras.factor
extra/smalltalk/compiler/compiler.factor
extra/tools/image-analyzer/gc-info/gc-info-tests.factor
extra/zealot/help-lint/help-lint.factor

index ed502b47681024142be755b85b99ce943eba1c2a..8d351b5a4f9a4f6bbc3bd394755408cbb00e4359 100644 (file)
@@ -40,7 +40,7 @@ PRIVATE>
 : purge-cache ( cache -- )
     dup [ assoc>> ] [ max-age>> ] bi V{ } clone [
         '[
-            nip dup age>> 1 + [ >>age ] keep
+            dup age>> 1 + [ >>age ] keep
             _ < [ drop t ] [ _ dispose-to f ] if
-        ] assoc-filter >>assoc drop 
+        ] filter-values >>assoc drop 
     ] keep [ last rethrow ] unless-empty ;
index 5bb5277a0d451a3020a3db49d5b5769331904509..7107530d593992eb008a0ac02b0f5ad754a8b199 100644 (file)
@@ -254,7 +254,7 @@ ERROR: no-objc-type name ;
     objc-methods get >alist
     [ first CHAR: . swap member? ] filter
     [ first "." split1 nip ] collect-by
-    [ nip values members length 1 > ] assoc-filter ;
+    [ values members length 1 > ] filter-values ;
 
 : method-count ( class -- c-direct-array )
     0 uint <ref> [ class_copyMethodList (free) ] keep uint deref ;
index 5e269747d97a92edff68c177329330cc01857597..40e8c562e97617a5ebdfb1aee108492233b62b88 100644 (file)
@@ -89,7 +89,7 @@ IN: combinators.smart.tests
 
 { 1 1 1 } [ 1 3 [ ] smart-with times ] unit-test
 { "BCD" } [ 1 "ABC" [ + ] smart-with map ] unit-test
-{ H{ { 1 2 } } } [ 1 H{ { 1 2 } { 3 4 } } [ drop = ] smart-with assoc-filter ] unit-test
+{ H{ { 1 2 } } } [ 1 H{ { 1 2 } { 3 4 } } [ = ] smart-with filter-keys ] unit-test
 
 : test-cleave>sequence ( obj -- seq )  { [ 1 + ] [ sq ] [ 1 - ] } V{ } cleave>sequence ;
 \ test-cleave>sequence def>> must-infer
index fa2246053c3bf25ac708d6812b5407e64493a50a..5c9706749bb185a7cb64a17172427239fd5a1bca 100644 (file)
@@ -12,7 +12,7 @@ IN: compiler.cfg.predecessors
 : update-phi ( bb ##phi -- )
     [
         swap predecessors>>
-        '[ drop _ member-eq? ] assoc-filter
+        '[ _ member-eq? ] filter-keys
     ] change-inputs drop ;
 
 : update-phis ( bb -- )
index e562f3264e7a655eadc8b3b31729443faebb2940..203fe62ed1d8acb9b445878f9887f7f948da6943 100644 (file)
@@ -127,7 +127,7 @@ M: vreg-insn compute-insn-costs
     ] each-basic-block ;
 
 : minimize-costs ( costs -- representations )
-    [ nip assoc-empty? ] assoc-reject
+    [ assoc-empty? ] reject-values
     [ >alist alist-min first ] assoc-map ;
 
 : compute-representations ( cfg -- )
index d12de4370649b280ef3fceaad7d2329f364c4f2c..a18131cd1ac4dc56e5eec03fdf68fa1f529289e5 100644 (file)
@@ -154,7 +154,7 @@ IN: compiler.cfg.stacks.local.tests
         ! a i j el
         77 eq?
         [
-            rot drop and
+            nipd and
         ]
         [
             ! a i j
index 9c0ac8ec79b30bf3d8825c7f460717b9dd19ec59..a94b922e4d7c9a45c96db6639f6370bbe96b0147 100644 (file)
@@ -16,7 +16,7 @@ generic-call-site-crossref [ H{ } clone ] initialize
     compiled-crossref get at ;
 
 : dependencies-of ( word dep-type -- assoc )
-    [ all-dependencies-of ] dip '[ nip _ dependency>= ] assoc-filter ;
+    [ all-dependencies-of ] dip '[ _ dependency>= ] filter-values ;
 
 : outdated-definition-usages ( set -- assocs )
     filter-word-defs [ +definition+ dependencies-of ] map ;
@@ -31,7 +31,7 @@ generic-call-site-crossref [ H{ } clone ] initialize
 : outdated-conditional-usages ( set -- assocs )
     members H{ } clone '[
         +conditional+ dependencies-of
-        [ drop _ dependencies-satisfied? ] assoc-reject
+        [ _ dependencies-satisfied? ] reject-keys
     ] map ;
 
 : generic-call-sites-of ( word -- assoc )
@@ -44,7 +44,7 @@ generic-call-site-crossref [ H{ } clone ] initialize
     concat f like "generic-call-sites" set-word-prop ;
 
 : store-dependencies-of-type ( word assoc symbol prop-name -- )
-    [ rot '[ nip _ = ] assoc-filter keys ] dip set-word-prop ;
+    [ rot '[ _ = ] filter-values keys ] dip set-word-prop ;
 
 : store-dependencies ( word assoc -- )
     keys "dependencies" set-word-prop ;
index 9980999917b66c211f8a331eb2e14e77ebff1cc6..5ca59d27b4c05db13d6cbf3ee1375b2d6b53d5f0 100644 (file)
@@ -38,7 +38,7 @@ M: #shuffle compute-live-values*
 M: #alien-node compute-live-values* nip look-at-inputs ;
 
 : filter-mapping ( assoc -- assoc' )
-    live-values get '[ drop _ key? ] assoc-filter ;
+    live-values get '[ _ key? ] filter-keys ;
 
 : filter-corresponding ( new old -- old' )
     zip filter-mapping values ;
index 34b5ff1281ff688c0fad7098cf02b834e0a48314..a24cb0d5123ac1b9e4fc82f81d7497b1cbe10fd8 100644 (file)
@@ -110,7 +110,7 @@ SYMBOL: escaping-allocations
 
 : compute-escaping-allocations ( -- )
     allocations get escaping-values get
-    '[ drop _ (escaping-value?) ] assoc-filter
+    '[ _ (escaping-value?) ] filter-keys
     escaping-allocations set ;
 
 : escaping-allocation? ( value -- ? )
index 3d599b1a174d089648ed71faad14f0c8f0e04503..a622d5aeb0cd0e3d0c841c6358175b1ea2df5332 100644 (file)
@@ -162,5 +162,5 @@ M: #alien-callback unbox-tuples* ;
 
 : unbox-tuples ( nodes -- nodes )
     allocations get escaping-allocations get
-    [ nip key? ] curry assoc-all?
+    [ key? ] curry all-values?
     [ [ unbox-tuples* ] map-nodes ] unless ;
index 6335146dd3d35821ca9e83a62a76e4b1df822a19..d76f34609082fd14876e0a7822a067313bcd9ebb 100644 (file)
@@ -27,7 +27,7 @@ M: arm.64 %load-immediate ( reg val -- )
     [ XZR MOVr ] [
         { 0 1 2 3 } [
             tuck -16 * shift 0xffff bitand
-        ] with map>alist [ nip 0 = ] assoc-reject
+        ] with map>alist [ 0 = ] reject-values
         unclip
         overd first2 rot MOVZ
         [ first2 rot MOVK ] with each
index d56dbda3eeb1dfd4de39849e5dc878d0bca8e893..340c68f0c4b18f360da183376394e490adf43516 100644 (file)
@@ -22,7 +22,6 @@ M: unix hosts-path "/etc/hosts" ;
 MEMO: system-hosts ( -- hosts ) hosts-path parse-hosts ;
 
 : host>ips ( host -- ips )
-    system-hosts [ member? nip ] with assoc-filter keys ;
+    system-hosts [ member? ] with filter-values keys ;
 
-: ip>hosts ( ip -- hosts )
-    system-hosts at ;
+: ip>hosts ( ip -- hosts ) system-hosts at ;
index 0672a1d32a96a9577372a8793d4465875c699ad8..ed8c39771b1c59cb86621606c7e6d1e0cefb71fd 100644 (file)
@@ -66,14 +66,17 @@ CONSTANT: word-renames {
     { "count*" { "percent-of" "0.99" } }
     { "more?" { "deref?" "0.99" } }
     { "plox" { "?transmute" "0.99" } }
-    ! { "?if" { "?if" "0.99" } }
     { "ensure-non-negative" { "assert-non-negative" "0.99" } }
     { "order" { "dispatch-order" "0.99" } }
     { "TEST:" { "DEFINE-TEST-WORD:" "0.99" } }
+    { "assoc-all-key?" { "all-keys?" "0.100" } }
+    { "assoc-all-value?" { "all-values?" "0.100" } }
+    { "assoc-any-key?" { "any-key?" "0.100" } }
+    { "assoc-any-value?" { "any-value?" "0.100" } } 
 }
 
 : compute-assoc-fixups ( continuation name assoc -- seq )
-    swap '[ drop _ = ] assoc-filter [
+    swap '[ _ = ] filter-keys [
         drop { }
     ] [
         swap '[
index ca241d161b5ea99f5c2586d462d089121f576e5f..9e0d6769a55add5d57ac233a766f6e192c471637 100644 (file)
@@ -112,12 +112,10 @@ TUPLE: couchdb-auth-provider
     url>user ;
 
 : strip-hash ( hash1 -- hash2 )
-    [ drop first CHAR: _ = ] assoc-reject ;
+    [ first CHAR: _ = ] reject-keys ;
 
-: at-or-k ( key hash -- newkey )
-    ?at drop ;
-: value-at-or-k ( key hash -- newkey )
-    ?value-at drop ;
+: at-or-k ( key hash -- newkey ) ?at drop ;
+: value-at-or-k ( key hash -- newkey ) ?value-at drop ;
 
 : map-fields-forward ( assoc field-map -- assoc )
     [ swapd at-or-k swap ] curry assoc-map ;
index fa6bd6d50d634cef45839daa46119c67f6b98ed5..d00888a3592cd1d08600cc329750044f7f42b126 100644 (file)
@@ -25,7 +25,7 @@ M: object specializer-declaration class-of ;
 : make-specializer ( specs -- quot )
     dup length <iota> <reversed>
     [ (picker) 2array ] 2map
-    [ drop object eq? ] assoc-reject
+    [ object eq? ] reject-keys
     [ [ t ] ] [
         [ swap specializer-predicate append ] { } assoc>map
         [ ] [ swap [ f ] \ if 3array [ ] append-as ] map-reduce
index cf316d5013fd965555123fe1e528c37991ca8019..b342f8130fd237295586c9abe69768df5a42de43 100644 (file)
@@ -7,10 +7,10 @@ xml.data xml.entities xml.writer ;
 IN: html.templates.chloe.compiler
 
 : chloe-attrs-only ( assoc -- assoc' )
-    [ drop chloe-name? ] assoc-filter ;
+    [ chloe-name? ] filter-keys ;
 
 : non-chloe-attrs-only ( assoc -- assoc' )
-    [ drop chloe-name? ] assoc-reject ;
+    [ chloe-name? ] reject-keys ;
 
 : chloe-tag? ( tag -- ? )
     dup xml? [ body>> ] when
index 862f9f4b77e618baf269f47476a84e8a61da5e29..e8ca44b821e911bde803f95c9383a593ddd5e9a4 100644 (file)
@@ -20,7 +20,7 @@ M: singleton-class component-tag
     bi* ;
 
 : compile-component-attrs ( tag class -- )
-    [ attrs>> [ drop main>> "name" = ] assoc-reject ] dip
+    [ attrs>> [ main>> "name" = ] reject-keys ] dip
     [ all-slots swap '[ name>> _ at compile-attr ] each ]
     [ [ boa ] [code-with] ]
     bi ;
index 336cec2a55819854b052bb941ec6ca9cf0212dc3..4a3057498d5ab206a788b09518f0359b1ddb0fe2 100644 (file)
@@ -52,7 +52,7 @@ SYMBOL: message-histogram
 
 : analysis. ( errors word-histogram message-histogram -- )
     nl "==== FREQUENT MESSAGES:" print nl
-    "Total: " write dup values sum . nl
+    "Total: " write dup sum-values . nl
     [
         [ first name>> write bl ]
         [ second write ": " write ]
index fed84682baa23d47d317ce4f678d7ab89388ce2a..cb9b64a792d4616d33f4bbb94902ad2775768ffd 100644 (file)
@@ -53,8 +53,8 @@ HOOK: (fp-env-registers) cpu ( -- registers )
 
 : fp-env-register ( -- register ) (fp-env-registers) first ;
 
-:: mask> ( bits assoc -- symbols )
-    assoc [| k v | bits v mask zero? ] assoc-reject keys ;
+: mask> ( bits assoc -- symbols )
+    [ mask zero? ] with reject-values keys ;
 : >mask ( symbols assoc -- bits )
     over empty?
     [ 2drop 0 ]
index b8e14271c764da49fd02a4f2271aa4e5a32a447e..f849e7e590948679cca329a62c93b7925e7287d6 100644 (file)
@@ -115,7 +115,7 @@ M: word integer-op-input-classes
     [ [ dup 3array ] [ swap ?lookup-method ] 2bi ] with { } map>assoc
     sift-values
     [ def>> ] assoc-map
-    [ nip length 1 = ] assoc-filter
+    [ length 1 = ] filter-values
     [ first ] assoc-map % ;
 
 SYMBOL: math-ops
@@ -135,7 +135,7 @@ SYMBOL: fast-math-ops
     [ drop math-class-max swap method-for-class >boolean ] if ;
 
 : (derived-ops) ( word assoc -- words )
-    swap '[ swap first _ eq? nip ] assoc-filter ;
+    swap '[ first _ eq? ] filter-keys ;
 
 : derived-ops ( word -- words )
     [ 1array ] [ math-ops get (derived-ops) values ] bi append ;
@@ -150,11 +150,10 @@ SYMBOL: fast-math-ops
     [ math-ops get (derived-ops) ] [ fast-math-ops get (derived-ops) ] bi
     [
         [
-            drop
             [ second integer class<= ]
             [ third integer class<= ]
             bi and
-        ] assoc-filter values
+        ] filter-keys values
     ] bi@ append ;
 
 : each-derived-op ( word quot -- )
index bbd972ea71c4bb45ad0b6c4962c40cc7cd3727be..9a1c7fb74df116654d21caa5a0b66863dad2ac6e 100644 (file)
@@ -239,17 +239,17 @@ TUPLE: simd-test-failure
 
 : remove-float-words ( alist -- alist' )
     { distance vsqrt n/v v/n v/ normalize }
-    '[ drop _ member? ] assoc-reject ;
+    '[ _ member? ] reject-keys ;
 
 : remove-integer-words ( alist -- alist' )
     { vlshift vrshift v*high v*hs+ }
-    '[ drop _ member? ] assoc-reject ;
+    '[ _ member? ] reject-keys ;
 
 : boolean-ops ( -- words )
     { vand vandn vor vxor vnot vcount } ;
 
 : remove-boolean-words ( alist -- alist' )
-    boolean-ops '[ drop _ member? ] assoc-reject ;
+    boolean-ops '[ _ member? ] reject-keys ;
 
 : ops-to-check ( elt-class -- alist )
     [ vector-words >alist ] dip
index 497d7f2e314b85566a58ba68b0d11da2cff5f72b..195dbd7cc027a00c8c5d55b460c601fab6273869 100644 (file)
@@ -60,21 +60,22 @@ nonce ;
         ] bi
     ] H{ } make ; inline
 
-! Checksum all the params but only return the oauth_ params for use in the auth header.
+! Checksum all the params but only return the oauth_ params for
+! use in the auth header.
 ! See https://github.com/factor/factor/issues/2487
 :: sign-params ( url request-method consumer-token request-token params -- oauth-params )
     params sort-keys :> params
     url request-method params signature-base-string :> sbs
-    consumer-token secret>> request-token dup [ secret>> ] when hmac-key :> key
+    consumer-token secret>> request-token dup [ secret>> ] when
+    hmac-key :> key
     sbs key sha1 hmac-bytes >base64 >string :> signature
     params { "oauth_signature" signature } prefix
-    [ drop "oauth_" head? ] assoc-filter ;
+    [ "oauth_" head? ] filter-keys ;
 
 : extract-user-data ( assoc -- assoc' )
     [
-        drop
         { "oauth_token" "oauth_token_secret" } member? not
-    ] assoc-filter ;
+    ] filter-keys ;
 
 : parse-token ( response data -- token )
     nip
index 76ee58b043e509c8c5899cf94cf851d4d3352a5d..4cc29b55f7002e66a4c9b1df363a3fc0d0df3d4c 100644 (file)
@@ -13,7 +13,7 @@ IN: regexp.dfa
     new-question old-value = [
         new-question state table set-at
         state nfa transitions>> at
-        [ drop tagged-epsilon? ] assoc-filter
+        [ tagged-epsilon? ] filter-keys
         [| trans to |
             to [
                 table nfa
index 37e725869ed4fda024eea5a194aa96550ef269e7..852f18ef2204137eaad79a6550f462d0065c6f58 100644 (file)
@@ -58,7 +58,7 @@ TUPLE: parts in out ;
                 _ swap '[ _ get-transitions ] assoc-map
                 harvest-values
             ] [
-                [ drop tagged-epsilon? ] assoc-filter
+                [ tagged-epsilon? ] filter-keys
             ] bi H{ } assoc-union-as
         ] assoc-map
     ] change-transitions ;
index 689e15701d26bf8e74cd21c0395d0fdeb6ae3427..8bd48ac895f439f58b89a8e8b6fd194912c12cdc 100644 (file)
@@ -63,7 +63,7 @@ IN: regexp.minimize
     '[ dup _ at =  ] swap '[ _ at has-conditions? ] bi or ;
 
 : delete-duplicates ( transitions state-classes -- new-transitions )
-    dupd '[ drop _ _ canonical-state? ] assoc-filter ;
+    dupd '[ _ _ canonical-state? ] filter-keys ;
 
 : combine-states ( table -- smaller-table )
     dup state-classes
index 82cc78cee3b5c29457bab137a073eb31a803b8bc..a00ebea05ac1ca387da513ccedbcc6b449136c73 100644 (file)
@@ -79,8 +79,8 @@ IN: smtp.tests
         {
             [
                 email>headers sort-keys [
-                    drop { "Date" "Message-Id" } member? not
-                ] assoc-filter
+                    { "Date" "Message-Id" } member? not
+                ] filter-keys
             ]
             [ to>> [ extract-email ] map ]
             [ from>> extract-email ]
index 74889c4b6ef09198eb52a09864e993dc0b88b87a..f513aa4f7fa5b3039778431cf701e013423f7a44 100644 (file)
@@ -86,7 +86,7 @@ M: string coverage
 
 M: word coverage
     "coverage" word-prop
-    [ drop executed?>> ] assoc-reject values ;
+    [ executed?>> ] reject-keys values ;
 
 GENERIC: coverage. ( object -- )
 
index 2bc96942a665f8f49f5eebb692346cd19045b10f..04b0fce974ec050f2aabdd4562df4c4b4e1ce9ce 100644 (file)
@@ -123,7 +123,7 @@ IN: tools.deploy.shaker
     "Stripping word properties" show
     swap '[
         [
-            [ drop _ member? ] assoc-reject sift-values
+            [ _ member? ] reject-keys sift-values
             >alist f like
         ] change-props drop
     ] each ;
@@ -257,7 +257,7 @@ IN: tools.deploy.shaker
                 dup array? [
                     [
                         2 group
-                        [ drop _ in? ] assoc-reject
+                        [ _ in? ] reject-keys
                         concat
                     ] map
                 ] when
index ebb3d0cf74aa49b3090a4e1d5fd93c2f3368fd05..e98352de22a681c7916fe69a568e1621adf30c9e 100644 (file)
@@ -65,7 +65,7 @@ SINGLETON: deprecation-observer
 
 : initialize-deprecation-notes ( -- )
     [
-        get-crossref [ drop deprecated? ] assoc-filter
+        get-crossref [ deprecated? ] filter-keys
         values [ members [ check-deprecations ] each ] each
     ] with-null-writer ;
 
index c9aac35a54f7cf3de99ab03988cd54fa501728b4..3be910161921d47aff094da5f66dac46eb6c88a4 100644 (file)
@@ -158,7 +158,7 @@ PRIVATE>
     [ total-time>> ] same? ;
 
 : trim-flat ( root-node -- root-node' )
-    dup '[ [ nip _ redundant-flat-node? ] assoc-reject ] change-children ;
+    dup '[ [ _ redundant-flat-node? ] reject-values ] change-children ;
 
 PRIVATE>
 
index 1de305d5e4c66510d0f65e7dceb28c0fcb0be2d1..2be3b7f12257bc82a85c7fdf131e41f2245393a1 100644 (file)
@@ -303,10 +303,10 @@ MEMO:: specified-font ( name style size foreground background -- font )
 
 : remove-paragraph-styles ( style -- style' )
     [
-        drop HS{
+        HS{
             wrap-margin border-color page-color inset presented
         } in?
-    ] assoc-reject ;
+    ] reject-keys ;
 
 TUPLE: styled-pane < pane style ;
 
index 451e2773e7e046855ac68ddc9adb6ca62683ab5e..d1be78da2367fdb7611b9a0d5ec3f6ac8ebfe317 100644 (file)
@@ -132,7 +132,7 @@ PRIVATE>
 : process-combining ( data -- hash )
     3 swap (process-data)
     [ string>number ] assoc-map
-    [ nip zero? ] assoc-reject
+    [ zero? ] reject-values
     >hashtable ;
 
 ! the maximum unicode char in the first 3 planes
index 75abec432fca57f982d8f95bf0a8a994b8174ad8..2b713aff3e5bb0a1b891baba5bdfa108d8857630 100644 (file)
@@ -2367,7 +2367,7 @@ FUNCTION: BOOL IsValidDpiAwarenessContext (
 
 ! DPI_AWARENESS_CONTEXT experimentally:
 ! USE: ranges -100 1000 [a..b] [ <alien> IsValidDpiAwarenessContext ] zip-with
-! [ nip 0 > ] assoc-filter keys .
+! [ 0 > ] filter-values keys .
 ! { -5 -4 -3 -2 -1 17 18 34 273 529 785 }
 
 ! -4 <alien> 34 <alien> AreDpiAwarenessContextsEqual . ! t
index 5928158333a4ba64fcc005aad08e27b1554a1bbe..f1c9bc043cbf8e948d6e404ed5f2e3cb892ab74e 100644 (file)
@@ -124,7 +124,7 @@ TUPLE: expiry-check object alien ;
     [ alien>> expired? ] [ t ] if* ;
 
 : delete-values ( value assoc -- )
-    [ rot drop = ] with assoc-reject! drop ;
+    [ nipd = ] with assoc-reject! drop ;
 
 PRIVATE>
 
index 7b7018e400d7990716442b98dbbdcdf89c9b6cc2..05a9ee42835eb94bbacc4fe96e77b49901a4a584 100644 (file)
@@ -335,3 +335,46 @@ M: enumerated length seq>> length ; inline
 M: enumerated nth-unsafe dupd seq>> nth-unsafe 2array ; inline
 
 INSTANCE: enumerated immutable-sequence
+
+: any-key? ( ... assoc quot: ( ... key -- ... ? ) -- ... ? )
+    [ drop ] prepose assoc-find 2nip ; inline
+
+: any-value? ( ... assoc quot: ( ... value -- ... ? ) -- ... ? )
+    [ nip ] prepose assoc-find 2nip ; inline
+
+: all-keys? ( ... assoc quot: ( ... key -- ... ? ) -- ... ? )
+    [ not ] compose any-key? not ; inline
+
+: all-values? ( ... assoc quot: ( ... value -- ... ? ) -- ... ? )
+    [ not ] compose any-value? not ; inline
+
+: assoc-reduce ( ... assoc identity quot: ( ... prev key value -- next ) -- ... result )
+    [ >alist ] 2dip [ first2 ] prepose reduce ; inline
+
+: reduce-keys ( ... assoc identity quot: ( ... prev elt -- ... next ) -- ... result )
+    [ drop ] prepose assoc-reduce ; inline
+
+: reduce-values ( ... assoc identity quot: ( ... prev elt -- ... next ) -- ... result )
+    [ nip ] prepose assoc-reduce ; inline
+
+: sum-keys ( assoc -- n ) 0 [ + ] reduce-keys ; inline
+
+: sum-values ( assoc -- n ) 0 [ + ] reduce-values ; inline
+
+: map-keys ( assoc quot: ( key -- key' ) -- assoc )
+    '[ _ dip ] assoc-map ; inline
+
+: map-values ( assoc quot: ( value -- value' ) -- assoc )
+    '[ swap _ dip swap ] assoc-map ; inline
+
+: filter-keys ( assoc quot: ( key -- ? ) -- assoc' )
+    '[ drop @ ] assoc-filter ; inline
+
+: filter-values ( assoc quot: ( value -- ? ) -- assoc' )
+    '[ nip @ ] assoc-filter ; inline
+
+: reject-keys ( assoc quot: ( key -- ? ) -- assoc' )
+    '[ drop @ ] assoc-reject ; inline
+
+: reject-values ( assoc quot: ( value -- ? ) -- assoc' )
+    '[ nip @ ] assoc-reject ; inline
index c58e4eec54efe1149c16274546ec422b68fcf743..ec901189d5441210b761d0142aea757d6683ccb3 100644 (file)
@@ -90,7 +90,7 @@ C: <predicate-engine> predicate-engine
 ! 2. Convert methods
 : split-methods ( assoc class -- first second )
     [ [ nip class<= ] curry assoc-reject ]
-    [ [ nip class<=     ] curry assoc-filter ] 2bi ;
+    [ [ nip class<= ] curry assoc-filter ] 2bi ;
 
 : convert-methods ( assoc class word -- assoc' )
     over [ split-methods ] 2dip pick assoc-empty?
index 9b22c403e8e737382496807af8adf74f8800b735..0329bb0d15bad9d5a3843e890780483ebd5ec55c 100644 (file)
@@ -23,7 +23,7 @@ TUPLE: hash-set
     [ 3dup swap array-nth ] dip over +empty+ eq?
     [ 4drop no-key ] [
         [ = ] dip swap
-        [ drop rot drop t ]
+        [ roll 2drop t ]
         [ probe (key@) ]
         if
     ] if ; inline recursive
index 469a7cfc9a2639c097d6a648f65f44b9af948e0a..52a7084d95d01498110089a1c673abd3536d649a 100644 (file)
@@ -26,7 +26,7 @@ TUPLE: hashtable
     [ 3dup swap array-nth ] dip over +empty+ eq?
     [ 4drop no-key ] [
         [ = ] dip swap
-        [ drop rot drop t ]
+        [ roll 2drop t ]
         [ probe (key@) ]
         if
     ] if ; inline recursive
index 53b1447d24ec0617c8ee31010a5cd2cb8a9b66dc..938fda112203dcdeaa671fa0870c1c86754d6ed5 100644 (file)
@@ -248,7 +248,7 @@ PRIVATE>
 GENERIC: update ( search-path-elt -- valid? )
 
 : trim-forgotten ( qualified-vocab -- valid? )
-    [ [ nip "forgotten" word-prop ] assoc-reject ] change-words
+    [ [ "forgotten" word-prop ] reject-values ] change-words
     words>> assoc-empty? not ;
 
 M: from update trim-forgotten ;
index 023b361885b8bc5f029d7f2a062e75490b1a4596..75b064645de63ac113fcc8873f803210d8341f7a 100644 (file)
@@ -8,7 +8,7 @@ IN: anagrams
 : make-anagram-hash ( strings -- assoc )
     [ sort ] collect-by
     [ members ] assoc-map
-    [ nip length 1 > ] assoc-filter ;
+    [ length 1 > ] filter-values ;
 
 MEMO: dict-words ( -- seq )
     "/usr/share/dict/words" ascii file-lines [ >lower ] map ;
index 901797305f716ebffb1b2877cf6f4783e4eb0584..03ba4b0ea5b681d3e81753e1b3dbc9489c8050d8 100644 (file)
@@ -11,7 +11,8 @@ IN: assocs.extras
 
 : of+ ( assoc key n -- assoc ) '[ 0 or _ + ] change-of ; inline
 
-: of+* ( assoc key n -- assoc old new ) '[ [ 0 or _ + ] keep swap dup ] change-of ; inline
+: of+* ( assoc key n -- assoc old new )
+    '[ [ 0 or _ + ] keep swap dup ] change-of ; inline
 
 : delete-of ( assoc key -- assoc ) over delete-at ; inline
 
@@ -59,37 +60,6 @@ IN: assocs.extras
 : substitute! ( seq assoc -- seq )
     substituter map! ;
 
-: assoc-reduce ( ... assoc identity quot: ( ... prev key value -- next ) -- ... result )
-    [ >alist ] 2dip [ first2 ] prepose reduce ; inline
-
-: reduce-keys ( ... assoc identity quot: ( ... prev elt -- ... next ) -- ... result )
-    [ drop ] prepose assoc-reduce ; inline
-
-: reduce-values ( ... assoc identity quot: ( ... prev elt -- ... next ) -- ... result )
-    [ nip ] prepose assoc-reduce ; inline
-
-: sum-keys ( assoc -- n ) 0 [ + ] reduce-keys ; inline
-
-: sum-values ( assoc -- n ) 0 [ + ] reduce-values ; inline
-
-: map-keys ( assoc quot: ( key -- key' ) -- assoc )
-    '[ _ dip ] assoc-map ; inline
-
-: map-values ( assoc quot: ( value -- value' ) -- assoc )
-    '[ swap _ dip swap ] assoc-map ; inline
-
-: filter-keys ( assoc quot: ( key -- ? ) -- assoc' )
-    '[ drop @ ] assoc-filter ; inline
-
-: filter-values ( assoc quot: ( value -- ? ) -- assoc' )
-    '[ nip @ ] assoc-filter ; inline
-
-: reject-keys ( assoc quot: ( key -- ? ) -- assoc' )
-    '[ drop @ ] assoc-reject ; inline
-
-: reject-values ( assoc quot: ( value -- ? ) -- assoc' )
-    '[ nip @ ] assoc-reject ; inline
-
 : rekey-new-assoc ( assoc keys -- newassoc )
     [ tuck of ] with H{ } map>assoc ; inline
 
@@ -244,23 +214,9 @@ PRIVATE>
 : expand-values-push ( assoc -- sequence )
     V{ } expand-values-push-as ; inline
 
-: assoc-any-key? ( ... assoc quot: ( ... key -- ... ? ) -- ... ? )
-    [ drop ] prepose assoc-find 2nip ; inline
-
-: assoc-any-value? ( ... assoc quot: ( ... value -- ... ? ) -- ... ? )
-    [ nip ] prepose assoc-find 2nip ; inline
-
-: assoc-all-key? ( ... assoc quot: ( ... key -- ... ? ) -- ... ? )
-    [ not ] compose assoc-any-key? not ; inline
-
-: assoc-all-value? ( ... assoc quot: ( ... value -- ... ? ) -- ... ? )
-    [ not ] compose assoc-any-value? not ; inline
-
-: any-multi-key? ( assoc -- ? )
-    [ sequence? ] assoc-any-key? ;
+: any-multi-key? ( assoc -- ? ) [ sequence? ] any-key? ;
 
-: any-multi-value? ( assoc -- ? )
-    [ sequence? ] assoc-any-value? ;
+: any-multi-value? ( assoc -- ? ) [ sequence? ] any-value? ;
 
 : flatten-keys ( assoc -- assoc' )
     dup any-multi-key? [ expand-keys-set-at flatten-keys ] when ;
index bb2ff52302109c4bee9d9deb259934335eba34aa..6511082c0b8019b1f71656e7722e2071e7df40e7 100644 (file)
@@ -45,7 +45,7 @@ M: all holidays drop (holidays) ;
     [
         [ clone ] dip
         [ drop ] [ holiday-assoc ] 2bi swap
-        '[ drop _ same-day? ] assoc-filter values
+        '[ _ same-day? ] filter-keys values
     ] keep '[ _ swap "holiday" word-prop at ] map ;
 
 HOLIDAY: armistice-day november 11 >>day ;
index 279ccf9f9696daa3a2f31ec0d80302f3a45e1e06..c48c855c389b6958b94b5169f24d6b2dbc8ca435 100644 (file)
@@ -10,7 +10,7 @@ IN: cgi
 <PRIVATE
 
 : query-string ( string -- assoc )
-    query>assoc [ nip ] assoc-filter [
+    query>assoc sift-values [
         [ [ CHAR: \s = ] trim ]
         [ dup string? [ 1array ] when ] bi*
     ] assoc-map ;
index b21fad68a15af277b23dff24608e87a7b74d1a96..ab77c730dceed65831044bc1b6106a94cd17819d 100644 (file)
@@ -27,11 +27,7 @@ CONSTANT: public-key 65537
     ! Loop until phi is not divisible by the public key.
     dup rsa-primes [ * ] 2keep
     [ 1 - ] bi@ *
-    dup public-key coprime? [
-        rot drop
-    ] [
-        2drop modulus-phi
-    ] if ;
+    dup public-key coprime? [ nipd ] [ 2drop modulus-phi ] if ;
 
 PRIVATE>
 
index 36ce56f089297e10fd810d626f36a2e981282e66..d594c760a27ed7e18b245b94578cb728e4b8f198 100644 (file)
@@ -427,7 +427,7 @@ ERROR: repeated-parent-hash hash ;
     ] with-variable ;
 
 : filter-git-remotes ( seq -- seq' )
-    [ drop "remote" head? ] assoc-filter ;
+    [ "remote" head? ] filter-keys ;
 
 : github-git-remote? ( hash -- ? )
     "url" of [ CHAR: / = ] trim-tail "git@github.com:" head? ;
@@ -454,10 +454,10 @@ ERROR: repeated-parent-hash hash ;
     git-config-path utf8 file-contents string>ini >alist ;
 
 : has-any-git-at-urls? ( git-ini -- ? )
-    [ nip github-git-remote? ] assoc-any? ;
+    [ github-git-remote? ] any-value? ;
 
 : has-remote-repo? ( git-ini owner repo -- ? )
-    '[ nip _ _ git-remote-matches? ] assoc-filter f like ;
+    '[ _ _ git-remote-matches? ] filter-values f like ;
 
 : write-git-config ( seq -- )
     ini>string git-config-path utf8 set-file-contents ;
index de1cf4fc9281c327f9dbf234527adb0c1f7d4911..14cea104cb24910cb98c0904e424e89df1b10add 100644 (file)
@@ -18,8 +18,7 @@ IN: koszul
         [ 1array >alt ]
     } cond ;
 
-: canonicalize ( assoc -- assoc' )
-    [ nip zero? ] assoc-reject ;
+: canonicalize ( assoc -- assoc' ) [ zero? ] reject-values ;
 
 SYMBOL: terms
 
index 1922c2ef0347612b6182b3d8a055c90395ad9553..63e03e2f132cf305a87018d2fe0c97fbe58cfefc 100644 (file)
@@ -32,6 +32,7 @@ CONSTANT: manual-substitutions
         { spin [ swap rot ] }
         { >boolean [ f = not ] }
         { keep [ over [ call ] dip ] }
+        { nipd [ rot drop ] }
     }
 
 CONSTANT: trivial-defs
@@ -248,7 +249,7 @@ SYMBOL: lint-definitions-keys
     [ keys lint-definitions-keys set-global ] bi ;
 
 : find-duplicates ( -- seq )
-    lint-definitions get-global [ nip length 1 > ] assoc-filter ;
+    lint-definitions get-global [ length 1 > ] filter-values ;
 
 GENERIC: lint ( obj -- seq )
 
@@ -284,9 +285,9 @@ GENERIC: run-lint ( obj -- obj )
 
 : filter-symbols ( alist -- alist )
     [
-        nip first dup lint-definitions get-global at
+        first dup lint-definitions get-global at
         [ first ] bi@ literalize = not
-    ] assoc-filter ;
+    ] filter-values ;
 
 M: sequence run-lint ( seq -- seq )
     [ lint ] zip-with trim-self
index 962ced0010b1d2ce18950859602fffb42a4dd62b..ab1d4dffb73635398df8bfe4f69116694c971c1f 100644 (file)
@@ -198,11 +198,8 @@ DEFER: next-token
 : no-vocab-found ( name -- empty )
     { } 2array ;
 
-: [is-used?] ( hash-set  -- quot )
-    '[ nip [ _ in? ] any? ] ; inline
-
 : reject-unused-vocabs ( assoc hash-set -- seq )
-    [is-used?] assoc-reject keys ;
+    '[ [ _ in? ] any? ] reject-values keys ;
 
 :: print-new-header ( seq -- )
     "Use the following header to remove unused imports: " print
index 44db2e424135c7e6e65be1f8e0f10bceabc09046..cf3709b3a979ebe8120eb1127be94bc2e35c03e8 100644 (file)
@@ -28,7 +28,7 @@ M: managed-server handle-client-disconnect ;
 : client-streams ( -- assoc ) clients values ;
 : username ( -- string ) client username>> ;
 : everyone-else ( -- assoc )
-    clients [ drop username = ] assoc-reject ;
+    clients [ username = ] reject-keys ;
 : everyone-else-streams ( -- assoc ) everyone-else values ;
 
 ERROR: no-such-client username ;
index f0b5402cf753afa253755843f7a63c8587fb36b4..7d7f9a4e2d0ca37f8b4fa0729b278abfdeff3c9a 100644 (file)
@@ -485,7 +485,7 @@ ERROR: compound-syntax-disallowed n seq obj ;
 : lex-vocabs ( vocabs -- assoc )
     [ [ vocab>literals ] [ nip ] recover ] zip-with ;
 
-: failed-lexing ( assoc -- assoc' ) [ nip array? ] assoc-reject ;
+: failed-lexing ( assoc -- assoc' ) [ array? ] reject-values ;
 
 : rewrite-file ( path encoding quot: ( str -- str' ) -- )
     '[ file-contents @ ] 2keep set-file-contents ; inline
index bd886ae27b9775724deca4408772f5db21e780ea..04694a46ef19118ade7af9e8c100a5db2dd9c5af 100644 (file)
@@ -114,7 +114,7 @@ SYMBOL: total
 : multi-predicate ( classes -- quot )
     dup length <iota> <reversed>
     [ picker 2array ] 2map
-    [ drop object eq? ] assoc-reject
+    [ object eq? ] reject-keys
     [ [ t ] ] [
         [ (multi-predicate) ] { } assoc>map
         unclip [ swap [ f ] \ if 3array [ ] append-as ] reduce
index c40c62d7e325e1d361a9b4771c3073a4d41f2564..b813d3d98b66af58270b6369828c2c7d6590f7c8 100644 (file)
@@ -46,6 +46,6 @@ M: f dev-deps drop { } ;
     ?github-package-json [
         [ "dependencies" of ] [ "devDependencies" of ] bi 2array [
             [ over npm-latest-version "version" of 2array ] parallel-assoc-map
-            [ nip first2 = not ] assoc-filter
+            [ first2 = not ] filter-values
         ] map
     ] transmute ;
index 1033dbad78975debaf1eaae5afce50b888508ae4..d7116576003ceeafae9b51b55ae498444fd6175c 100644 (file)
@@ -77,6 +77,6 @@ IN: project-euler.061
 : euler061 ( -- n )
     4-digit-polygons dup [ 8 = ] filter-keys [
         1array 6 find-cycle
-    ] with map-find drop values sum ;
+    ] with map-find drop sum-values ;
 
 SOLUTION: euler061
index 0a038cf67ae319638d06693faeeefbfd0339ddda..caead44a7ef7000fcbb9ef8d59132ecbd0779d72 100644 (file)
@@ -32,7 +32,7 @@ IN: project-euler.164
 PRIVATE>
 
 : euler164 ( -- answer )
-    init-table 19 [ next-table ] times values sum ;
+    init-table 19 [ next-table ] times sum-values ;
 
 ! [ euler164 ] 100 ave-time
 ! 7 ms ave run time - 1.23 SD (100 trials)
index ea35eb08a9d853285ccca0de451a380ce1110da2..284e85c4c64b575a9b566962d58a78bab9d64a9e 100644 (file)
@@ -32,8 +32,7 @@ IN: rosettacode.anagrams-deranged
         ] each
     ] keep ;
 
-: anagrams ( hash -- seq )
-    [ nip length 1 > ] assoc-filter values ;
+: anagrams ( hash -- seq ) [ length 1 > ] filter-values values ;
 
 : deranged-anagrams ( path -- seq )
     parse-dict-file anagrams [ derangements ] map concat ;
index 9451768c50035369534a7f65520594724e574fdc..453e78d5d12ce03f69232cc1440da42a964b1aaa 100644 (file)
@@ -16,4 +16,4 @@ PRIVATE>
     ] keep ;
 
 : unique-abbrev ( seqs -- assoc )
-    abbrev [ nip length 1 = ] assoc-filter ;
+    abbrev [ length 1 = ] filter-values ;
index 81de4b8e28dcd99b98f7287d3f105b89bfa26332..fb2a7ee4372af9a24ffae9cbc0a2ef39fd838cf0 100644 (file)
@@ -5,7 +5,7 @@ sorting splitting vectors ;
 IN: sequences.extras
 
 : find-all ( ... seq quot: ( ... elt -- ... ? ) -- ... elts )
-    [ <enumerated> ] dip '[ nip @ ] assoc-filter ; inline
+    [ <enumerated> ] dip '[ @ ] filter-values ; inline
 
 :: subseq* ( from to seq -- subseq )
     seq length :> len
index 8327b0ac39171d27b5cb507cc25aeee0e788a879..406c63820d6e43a79afee5f946bff8b5de31acfe 100644 (file)
@@ -71,7 +71,7 @@ M: ast-return compile-ast
         dup dup _ in? [ <local-reader> ] [ <local> ] if
     ] H{ } map>assoc
     dup
-    [ nip local-reader? ] assoc-filter
+    [ local-reader? ] filter-values
     [ <local-writer> ] assoc-map
     <lexenv> swap >>local-writers swap >>local-readers ;
 
index ae85daf308fd1b6f7cff657513faeaa8989d4af0..d086cdb43c682ce9f1d90302e5a1795e134e3fa0 100644 (file)
@@ -50,7 +50,7 @@ QUALIFIED: opencl
 : base-pointer-groups-decoded ( word -- seq )
     word>gc-maps [
         second second [ swap 2array ] map-index
-        [ nip -1 = ] assoc-reject
+        [ -1 = ] reject-values
     ] map ;
 
 ! byte-array>bit-array
index d87ea1f5cf277a788408a4a16df3c2db34e8eb98..9777ea1fa50f84850813eca15158453aa2b05570 100644 (file)
@@ -14,7 +14,7 @@ CONSTANT: ignored-resources {
 }
 
 : filter-flaky-resources ( seq -- seq' )
-    [ drop unparse ignored-resources member? ] assoc-reject ;
+    [ unparse ignored-resources member? ] reject-keys ;
 
 ! Allow testing without calling exit
 : zealot-help-lint ( exit? -- )