From d2163097f0aaddf0e1b922f974c5b59217b0f71a Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Tue, 18 Dec 2007 02:37:06 -0600 Subject: [PATCH] Add cut-all, human-sort to sequences.lib --- extra/sequences/lib/lib.factor | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/extra/sequences/lib/lib.factor b/extra/sequences/lib/lib.factor index f5adccf445..ba2fb055e2 100644 --- a/extra/sequences/lib/lib.factor +++ b/extra/sequences/lib/lib.factor @@ -1,5 +1,6 @@ USING: combinators.lib kernel sequences math namespaces assocs random sequences.private shuffle math.functions mirrors ; +USING: arrays math.parser sorting strings ; IN: sequences.lib ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -104,3 +105,20 @@ PRIVATE> : power-set ( seq -- subsets ) 2 over length exact-number-strings swap [ nths ] curry map ; + +: cut-find ( seq pred -- before after ) + dupd find drop dup [ cut ] when ; + +: cut3 ( seq pred -- first mid last ) + [ cut-find ] keep [ not ] compose cut-find ; + +: (cut-all) ( seq pred quot -- ) + [ >r cut3 r> dip >r >r , r> [ , ] when* r> ] 2keep + pick [ (cut-all) ] [ 3drop ] if ; + +: cut-all ( seq pred quot -- first mid last ) + [ (cut-all) ] { } make ; + +: human-sort ( seq -- newseq ) + [ dup [ digit? ] [ string>number ] cut-all ] { } map>assoc + sort-values keys ;