concurrency.combinators: adding parallel-assoc-map.

db4
John Benediktsson 2013-11-21 14:52:38 -08:00
parent 13294b49ef
commit 7c9e0f3017
2 changed files with 15 additions and 1 deletions

View File

@ -53,3 +53,9 @@ IN: concurrency.combinators.tests
[ number>string ] 3 parallel-napply [ number>string ] 3 parallel-napply
{ [ "a" append ] [ "b" append ] [ "c" append ] } parallel-spread { [ "a" append ] [ "b" append ] [ "c" append ] } parallel-spread
] unit-test ] unit-test
{ H{ { 0 4 } { 2 6 } { 4 8 } } } [
H{ { 1 2 } { 3 4 } { 5 6 } } [
[ 1 - ] [ 2 + ] bi*
] parallel-assoc-map
] unit-test

View File

@ -1,6 +1,6 @@
! Copyright (C) 2008 Slava Pestov. ! Copyright (C) 2008 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: arrays combinators concurrency.count-downs USING: arrays assocs combinators concurrency.count-downs
concurrency.futures fry generalizations kernel macros sequences concurrency.futures fry generalizations kernel macros sequences
sequences.private sequences.product ; sequences.private sequences.product ;
IN: concurrency.combinators IN: concurrency.combinators
@ -43,6 +43,14 @@ PRIVATE>
: parallel-map ( seq quot: ( elt -- newelt ) -- newseq ) : parallel-map ( seq quot: ( elt -- newelt ) -- newseq )
[future] map future-values ; inline [future] map future-values ; inline
: parallel-assoc-map-as ( assoc quot: ( key value -- newkey newvalue ) exemplar -- newassoc )
[
[ 2array ] compose '[ _ 2curry future ] { } assoc>map future-values
] dip assoc-like ;
: parallel-assoc-map ( assoc quot: ( key value -- newkey newvalue ) -- newassoc )
over parallel-assoc-map-as ;
: 2parallel-map ( seq1 seq2 quot: ( elt1 elt2 -- newelt ) -- newseq ) : 2parallel-map ( seq1 seq2 quot: ( elt1 elt2 -- newelt ) -- newseq )
'[ _ 2curry future ] 2map future-values ; '[ _ 2curry future ] 2map future-values ;