math.combinatorics: adding all-combinations? and all-permutations?.
parent
bd55cd3074
commit
d76f8d151d
|
@ -4,7 +4,7 @@
|
||||||
USING: accessors arrays assocs binary-search classes.tuple
|
USING: accessors arrays assocs binary-search classes.tuple
|
||||||
combinators fry hints kernel kernel.private locals math
|
combinators fry hints kernel kernel.private locals math
|
||||||
math.order math.ranges memoize namespaces sequences
|
math.order math.ranges memoize namespaces sequences
|
||||||
sequences.private sorting strings ;
|
sequences.private sorting strings vectors ;
|
||||||
FROM: sequences => change-nth ;
|
FROM: sequences => change-nth ;
|
||||||
IN: math.combinatorics
|
IN: math.combinatorics
|
||||||
|
|
||||||
|
@ -17,6 +17,7 @@ IN: math.combinatorics
|
||||||
GENERIC: nths-unsafe ( indices seq -- seq' )
|
GENERIC: nths-unsafe ( indices seq -- seq' )
|
||||||
M: string nths-unsafe (nths-unsafe) ;
|
M: string nths-unsafe (nths-unsafe) ;
|
||||||
M: array nths-unsafe (nths-unsafe) ;
|
M: array nths-unsafe (nths-unsafe) ;
|
||||||
|
M: vector nths-unsafe (nths-unsafe) ;
|
||||||
M: iota-tuple nths-unsafe (nths-unsafe) ;
|
M: iota-tuple nths-unsafe (nths-unsafe) ;
|
||||||
M: object nths-unsafe (nths-unsafe) ;
|
M: object nths-unsafe (nths-unsafe) ;
|
||||||
|
|
||||||
|
@ -118,6 +119,9 @@ PRIVATE>
|
||||||
: all-permutations ( seq -- seq' )
|
: all-permutations ( seq -- seq' )
|
||||||
[ ] map-permutations ;
|
[ ] map-permutations ;
|
||||||
|
|
||||||
|
: all-permutations? ( ... seq quot: ( ... elt -- ... ? ) -- ... ? )
|
||||||
|
permutations-quot all? ; inline
|
||||||
|
|
||||||
: find-permutation ( ... seq quot: ( ... elt -- ... ? ) -- ... elt/f )
|
: find-permutation ( ... seq quot: ( ... elt -- ... ? ) -- ... elt/f )
|
||||||
[ permutations-quot find drop ]
|
[ permutations-quot find drop ]
|
||||||
[ drop over [ permutation ] [ 2drop f ] if ] 2bi ; inline
|
[ drop over [ permutation ] [ 2drop f ] if ] 2bi ; inline
|
||||||
|
@ -235,6 +239,9 @@ PRIVATE>
|
||||||
: all-combinations ( seq k -- seq' )
|
: all-combinations ( seq k -- seq' )
|
||||||
[ ] map-combinations ;
|
[ ] map-combinations ;
|
||||||
|
|
||||||
|
: all-combinations? ( ... seq k quot: ( ... elt -- ... ? ) -- ... ? )
|
||||||
|
combinations-quot all? ; inline
|
||||||
|
|
||||||
: find-combination ( ... seq k quot: ( ... elt -- ... ? ) -- ... elt/f )
|
: find-combination ( ... seq k quot: ( ... elt -- ... ? ) -- ... elt/f )
|
||||||
[ combinations-quot find drop ]
|
[ combinations-quot find drop ]
|
||||||
[ drop pick [ combination ] [ 3drop f ] if ] 3bi ; inline
|
[ drop pick [ combination ] [ 3drop f ] if ] 3bi ; inline
|
||||||
|
|
Loading…
Reference in New Issue