[ keys ] [ [ [ ] concat-as ] [ ] map-as ] bi dup length dup '[
[ [ first ] bi@ _ 2cleave ] 2keep
[ @ _ [ cleave-curry ] [ cleave-curry ] bi _ spread* ]
- 1 -roll 2each-from
+ 1 2each-from
] ;
: smart-loop ( ..a quot: ( ..a -- ..b ? ) -- ..b )
: 2each ( ... seq1 seq2 quot: ( ... elt1 elt2 -- ... ) -- ... )
2length-operator each-integer ; inline
-: 2each-from ( ... from seq1 seq2 quot: ( ... elt1 elt2 -- ... ) -- ... )
- 2length-operator each-integer-from ; inline
+: 2each-from ( ... seq1 seq2 quot: ( ... elt1 elt2 -- ... ) from -- ... )
+ -roll 2length-operator each-integer-from ; inline
: 2reduce ( ... seq1 seq2 identity quot: ( ... prev elt1 elt2 -- ... next ) -- ... result )
-rotd 2each ; inline
: 2map-reduce ( ..a seq1 seq2 map-quot: ( ..a elt1 elt2 -- ..a intermediate ) reduce-quot: ( ..a prev intermediate -- ..a next ) -- ..a result )
[ [ [ [ first ] bi@ ] 2keep ] dip [ 2dip ] keep ] dip
- '[ rot _ dip swap @ ] 1 -roll 2each-from ; inline
+ '[ rot _ dip swap @ ] 1 2each-from ; inline
<PRIVATE