math.combinatorics: make permutations-quot to reduce code duplication.
parent
b646d1e1b8
commit
decd9ed1ee
|
@ -68,13 +68,18 @@ M: permutations hashcode* tuple-hashcode ;
|
||||||
|
|
||||||
INSTANCE: permutations immutable-sequence
|
INSTANCE: permutations immutable-sequence
|
||||||
|
|
||||||
|
<PRIVATE
|
||||||
|
|
||||||
|
: permutations-quot ( seq quot -- seq quot' )
|
||||||
|
[ [ permutation-iota ] keep ] dip '[ _ permutation @ ] ; inline
|
||||||
|
|
||||||
|
PRIVATE>
|
||||||
|
|
||||||
: each-permutation ( seq quot -- )
|
: each-permutation ( seq quot -- )
|
||||||
[ [ permutation-iota ] keep ] dip
|
permutations-quot each ; inline
|
||||||
'[ _ permutation @ ] each ; inline
|
|
||||||
|
|
||||||
: map-permutations ( seq quot -- seq' )
|
: map-permutations ( seq quot -- seq' )
|
||||||
[ [ permutation-iota ] keep ] dip
|
permutations-quot map ; inline
|
||||||
'[ _ permutation @ ] map ; inline
|
|
||||||
|
|
||||||
: filter-permutations ( seq quot -- seq' )
|
: filter-permutations ( seq quot -- seq' )
|
||||||
selector [ each-permutation ] dip ; inline
|
selector [ each-permutation ] dip ; inline
|
||||||
|
@ -83,9 +88,8 @@ INSTANCE: permutations immutable-sequence
|
||||||
[ ] map-permutations ;
|
[ ] map-permutations ;
|
||||||
|
|
||||||
: find-permutation ( seq quot -- elt )
|
: find-permutation ( seq quot -- elt )
|
||||||
[ dup [ permutation-iota ] keep ] dip
|
[ permutations-quot find drop ]
|
||||||
'[ _ permutation @ ] find drop
|
[ drop over [ permutation ] [ 2drop f ] if ] 2bi ; inline
|
||||||
[ swap permutation ] [ drop f ] if* ; inline
|
|
||||||
|
|
||||||
: reduce-permutations ( seq identity quot -- result )
|
: reduce-permutations ( seq identity quot -- result )
|
||||||
swapd each-permutation ; inline
|
swapd each-permutation ; inline
|
||||||
|
|
Loading…
Reference in New Issue