1 USING: kernel math sequences strings ;
4 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
6 : 3nth ( n seq -- slice ) >r dup 3 + r> <slice> ;
8 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
10 : map3-i ( seq -- i ) length 2 - ;
12 : map3-quot ( quot -- quot ) [ swap 3nth ] swap append ;
14 : map3 ( seq quot -- seq ) over map3-i swap map3-quot map-with ;
16 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
18 : (rtrim*) ( seq quot -- newseq )
21 [ >r dup length 1- head-slice r> (rtrim*) ] [ drop ] if
25 : rtrim* ( seq quot -- newseq ) [ (rtrim*) ] 2keep drop like ;
26 : rtrim ( seq -- newseq ) [ blank? ] rtrim* ;
28 : (ltrim*) ( seq quot -- newseq )
30 2dup >r first r> call [ >r 1 tail-slice r> (ltrim*) ] [ drop ] if
34 : ltrim* ( seq quot -- newseq ) [ (ltrim*) ] 2keep drop like ;
35 : ltrim ( seq -- newseq ) [ blank? ] ltrim* ;
37 : trim* ( seq quot -- newseq ) [ (ltrim*) ] keep rtrim* ;
38 : trim ( seq -- newseq ) [ blank? ] trim* ;
40 : ?head-slice ( seq begin -- newseq ? )
41 2dup head? [ length tail-slice t ] [ drop f ] if ;
43 : ?tail-slice ( seq end -- newseq ? )
44 2dup tail? [ length head-slice* t ] [ drop f ] if ;
46 : unclip-slice ( seq -- rest first )
47 dup 1 tail-slice swap first ;
49 PROVIDE: libs/sequences ;