Follow our naming scheme for words that take exemplars.
}
} [
"1234567890" [ length 1 + ] keep 156 <murmur3-32>
- '[ _ swap head _ checksum-bytes ] { } map-integers
+ '[ _ swap head _ checksum-bytes ] map-integers
] unit-test
{ t } [
"1234567890" dup >byte-array [
[ length 1 + ] keep 156 <murmur3-32>
- '[ _ swap head _ checksum-bytes ] { } map-integers
+ '[ _ swap head _ checksum-bytes ] map-integers
] bi@ =
] unit-test
}
} [
"1234567890" [ length 1 + ] keep 0 <superfast>
- '[ _ swap head _ checksum-bytes ] { } map-integers
+ '[ _ swap head _ checksum-bytes ] map-integers
] unit-test
{ t } [
"1234567890" dup >byte-array [
[ length 1 + ] keep 0 <superfast>
- '[ _ swap head _ checksum-bytes ] { } map-integers
+ '[ _ swap head _ checksum-bytes ] map-integers
] bi@ =
] unit-test
INSTANCE: column virtual-sequence
: <flipped> ( seq -- seq' )
- dup empty? [ dup first length [ <column> ] with { } map-integers ] unless ;
+ dup empty? [ dup first length [ <column> ] with map-integers ] unless ;
: CF>array ( alien -- array )
dup CFArrayGetCount
- [ CFArrayGetValueAtIndex ] with { } map-integers ;
+ [ CFArrayGetValueAtIndex ] with map-integers ;
: <CFArray> ( seq -- alien )
f over length &: kCFTypeArrayCallBacks CFArrayCreateMutable
{ 250,000 250,000 0 } [
250,000 <cuckoo-filter>
- 250,000 [ number>string ] { } map-integers
+ 250,000 [ number>string ] map-integers
[
[
{
t >>bound? drop ;
: sql-row ( result-set -- seq )
- dup #columns [ row-column ] with { } map-integers ;
+ dup #columns [ row-column ] with map-integers ;
: sql-row-typed ( result-set -- seq )
- dup #columns [ row-column-typed ] with { } map-integers ;
+ dup #columns [ row-column-typed ] with map-integers ;
: query-each ( result-set quot: ( row -- ) -- )
over more-rows? [
} case ;
: sqlite-row ( handle -- seq )
- dup sqlite-#columns [ sqlite-column ] with { } map-integers ;
+ dup sqlite-#columns [ sqlite-column ] with map-integers ;
: sqlite-step-has-more-rows? ( prepared -- ? )
{
{ "git-checkout-existing-branch" { "git-checkout-existing" "0.99" } }
{ "git-checkout-existing-branch*" { "git-checkout-existing*" "0.99" } }
{ "tags" { "chloe-tags" "0.99" } }
+ { "(each)" { "sequence-operator" "0.99" } }
{ "(each-integer)" { "each-integer-from" "0.99" } }
{ "(find-integer)" { "find-integer-from" "0.99" } }
{ "(all-integers?)" { "all-integers-from?" "0.99" } }
+ { "short" { "cramp" "0.99" } }
+ { "map-integers" { "map-integers-as" "0.99" } }
}
: compute-assoc-fixups ( continuation name assoc -- seq )
(neach) each-integer ; inline
: nmap-as ( seq... quot exemplar n -- result )
- '[ _ (neach) ] dip map-integers ; inline
+ '[ _ (neach) ] dip map-integers-as ; inline
: nmap ( seq... quot n -- result )
dup '[ [ _ npick ] dip swap ] dip nmap-as ; inline
: ncollect ( len quot into... n -- )
(ncollect) each-integer ; inline
-: nmap-integers ( len quot exemplar... n -- result... )
+: nmap-integers-as ( len quot exemplar... n -- result... )
4 dupn
'[ [ over ] _ ndip [ [ _ ncollect ] _ nkeep ] _ nnew-like ] call ; inline
: mnmap-as ( m*seq quot n*exemplar m n -- result*n )
- dup '[ [ _ (neach) ] _ ndip _ nmap-integers ] call ; inline
+ dup '[ [ _ (neach) ] _ ndip _ nmap-integers-as ] call ; inline
: mnmap ( m*seq quot m n -- result*n )
2dup '[ [ _ npick ] dip swap _ dupn ] 2dip mnmap-as ; inline
}
{ $description "Unrolled version of " { $link map-index } " that maps over the first " { $snippet "len" } " elements of " { $snippet "seq" } ". " { $snippet "len" } " must be a compile-time constant. If " { $snippet "seq" } " has fewer than " { $snippet "len" } " elements, raises an " { $link unrolled-bounds-error } "." } ;
-HELP: unrolled-map-integers
+HELP: unrolled-map-integers-as
{ $values
{ "n" integer } { "quot" { $quotation ( n -- value ) } } { "exemplar" sequence } { "newseq" sequence }
}
-{ $description "Unrolled version of " { $link map-integers } ". " { $snippet "n" } " must be a compile-time constant." } ;
+{ $description "Unrolled version of " { $link map-integers-as } ". " { $snippet "n" } " must be a compile-time constant." } ;
ARTICLE: "sequences.unrolled" "Unrolled sequence iteration combinators"
"The " { $vocab-link "sequences.unrolled" } " vocabulary provides versions of some of the " { $link "sequences-combinators" } " that unroll their loops, that is, expand to a constant number of repetitions of a quotation rather than an explicit loop. These unrolled combinators all require a constant integer value to indicate the number of unrolled iterations to perform."
"Unrolled versions of low-level iteration combinators:"
{ $subsections
unrolled-each-integer
- unrolled-map-integers
+ unrolled-map-integers-as
unrolled-collect
} ;
: unrolled-collect ( n quot: ( n -- value ) into -- )
(unrolled-collect) unrolled-each-integer ; inline
-: unrolled-map-integers ( n quot: ( n -- value ) exemplar -- newseq )
+: unrolled-map-integers-as ( n quot: ( n -- value ) exemplar -- newseq )
overd [ [ unrolled-collect ] keep ] new-like ; inline
ERROR: unrolled-bounds-error
(unrolled-each-index) unrolled-each-integer ; inline
: unrolled-map-as-unsafe ( seq len quot: ( x -- newx ) exemplar -- newseq )
- [ (unrolled-each) ] dip unrolled-map-integers ; inline
+ [ (unrolled-each) ] dip unrolled-map-integers-as ; inline
: unrolled-2map-as-unsafe ( xseq yseq len quot: ( x y -- newx ) exemplar -- newseq )
- [ (unrolled-2each) ] dip unrolled-map-integers ; inline
+ [ (unrolled-2each) ] dip unrolled-map-integers-as ; inline
: unrolled-map-unsafe ( seq len quot: ( x -- newx ) -- newseq )
pick unrolled-map-as-unsafe ; inline
:: rolling-map ( ... seq n quot: ( ... slice -- ... elt ) -- ... newseq )
seq length [
1 + [ n [-] ] [ seq <slice-unsafe> ] bi quot call
- ] { } map-integers ; inline
+ ] map-integers ; inline
: rolling-sum ( seq n -- newseq )
[ sum ] rolling-map ;
{ { 1 3 2 4 } } [ { 1 2 3 4 } clone 1 2 pick exchange ] unit-test
{ { "" "a" "aa" "aaa" } }
-[ 4 [ CHAR: a <string> ] { } map-integers ]
+[ 4 [ CHAR: a <string> ] map-integers ]
unit-test
{ V{ 1 3 5 7 9 } } [ 10 <iota> >vector [ even? ] reject! ] unit-test
[ 2dup bounds-check? ] 2dip
'[ _ _ (find-index) ] [ 2drop f f ] if ; inline
-: (accumulate) ( seq identity quot -- identity seq quot )
+: (accumulate) ( seq identity quot -- identity seq quot' )
swapd [ keepd ] curry ; inline
-: (accumulate*) ( seq identity quot -- identity seq quot )
+: (accumulate*) ( seq identity quot -- identity seq quot' )
swapd [ dup ] compose ; inline
PRIVATE>
: reduce ( ... seq identity quot: ( ... prev elt -- ... next ) -- ... result )
swapd each ; inline
-: map-integers ( ... len quot: ( ... i -- ... elt ) exemplar -- ... newseq )
+: map-integers-as ( ... len quot: ( ... i -- ... elt ) exemplar -- ... newseq )
overd [ [ collect ] keep ] new-like ; inline
+: map-integers ( ... len quot: ( ... i -- ... elt ) -- ... newseq )
+ { } map-integers-as ; inline
+
+! : map-integers ( ... len quot: ( ... i -- ... elt ) exemplar -- ... newseq )
+! overd [ [ collect ] keep ] new-like ; inline
+
: map-as ( ... seq quot: ( ... elt -- ... newelt ) exemplar -- ... newseq )
- [ length-operator ] dip map-integers ; inline
+ [ length-operator ] dip map-integers-as ; inline
: map ( ... seq quot: ( ... elt -- ... newelt ) -- ... newseq )
over map-as ; inline
: replicate-as ( ... len quot: ( ... -- ... newelt ) exemplar -- ... newseq )
- [ [ drop ] prepose ] dip map-integers ; inline
+ [ [ drop ] prepose ] dip map-integers-as ; inline
: replicate ( ... len quot: ( ... -- ... newelt ) -- ... newseq )
{ } replicate-as ; inline
-rotd 2each ; inline
: 2map-as ( ... seq1 seq2 quot: ( ... elt1 elt2 -- ... newelt ) exemplar -- ... newseq )
- [ (2each) ] dip map-integers ; inline
+ [ (2each) ] dip map-integers-as ; inline
: 2map ( ... seq1 seq2 quot: ( ... elt1 elt2 -- ... newelt ) -- ... newseq )
pick 2map-as ; inline
(3each) each-integer ; inline
: 3map-as ( ... seq1 seq2 seq3 quot: ( ... elt1 elt2 elt3 -- ... newelt ) exemplar -- ... newseq )
- [ (3each) ] dip map-integers ; inline
+ [ (3each) ] dip map-integers-as ; inline
: 3map ( ... seq1 seq2 seq3 quot: ( ... elt1 elt2 elt3 -- ... newelt ) -- ... newseq )
pickd swap 3map-as ; inline
: generic-flip ( matrix -- newmatrix )
[ [ length ] [ min ] map-reduce ] keep
- '[ _ [ nth-unsafe ] with { } map-as ] { } map-integers ; inline
+ '[ _ [ nth-unsafe ] with { } map-as ] map-integers ; inline
USE: arrays
: array-flip ( matrix -- newmatrix )
{ array } declare
[ [ { array } declare length>> ] [ min ] map-reduce ] keep
- '[ _ [ { array } declare array-nth ] with { } map-as ] { } map-integers ;
+ '[ _ [ { array } declare array-nth ] with { } map-as ] map-integers ;
PRIVATE>
CONSTANT: ALPHABET $[ "0123456789ABCDEFGHJKMNPQRSTVWXYZ" >byte-array ]
>>
-CONSTANT: INVERSE $[ 256 [ ALPHABET index 0xff or ] B{ } map-integers ]
+CONSTANT: INVERSE $[ 256 [ ALPHABET index 0xff or ] B{ } map-integers-as ]
CONSTANT: CHECKSUM $[ ALPHABET "*~$=U" append ]
<<
CONSTANT: base32-alphabet $[ "0123456789bcdefghjkmnpqrstuvwxyz" >byte-array ]
>>
-CONSTANT: base32-inverse $[ 256 [ base32-alphabet index 0xff or ] B{ } map-integers ]
+CONSTANT: base32-inverse $[ 256 [ base32-alphabet index 0xff or ] B{ } map-integers-as ]
: base32-encode ( x -- str )
-59 12 [
}
: gamma-z ( x n -- seq )
- [ + recip ] with { } map-integers 1.0 0 pick set-nth ;
+ [ + recip ] with map-integers 1.0 0 pick set-nth ;
: (gamma-lanczos6) ( x -- log[gamma[x+1]] )
! log(gamma(x+1)
: even-indices ( seq -- seq' )
[ length 1 + 2/ ] keep [
[ [ 2 * ] dip nth-unsafe ] curry
- ] keep map-integers ;
+ ] keep map-integers-as ;
: odd-indices ( seq -- seq' )
[ length 2/ ] keep [
[ [ 2 * 1 + ] dip nth-unsafe ] curry
- ] keep map-integers ;
+ ] keep map-integers-as ;
: compact ( ... seq quot: ( ... elt -- ... ? ) elt -- ... seq' )
[ split-when harvest ] dip join ; inline
PRIVATE>
: map-from-as ( ... seq quot: ( ... elt -- ... newelt ) i exemplar -- ... newseq )
- [ -rot setup-each-from ] dip map-integers ; inline
+ [ -rot setup-each-from ] dip map-integers-as ; inline
: map-from ( ... seq quot: ( ... elt -- ... newelt ) i -- ... newseq )
pick map-from-as ; inline
pick [ 2map-into ] keep ; inline
: 2map-index ( ... seq1 seq2 quot: ( ... elt1 elt2 index -- ... newelt ) -- ... newseq )
- pick [ (2each-index) ] dip map-integers ; inline
+ pick [ (2each-index) ] dip map-integers-as ; inline
TUPLE: evens { seq read-only } ;