reverse-here -> reverse!
							parent
							
								
									b0e3c7a1fc
								
							
						
					
					
						commit
						1476cdb974
					
				| 
						 | 
				
			
			@ -152,8 +152,8 @@ ERROR: bad-live-interval live-interval ;
 | 
			
		|||
    ! to reverse some sequences, and compute the start and end.
 | 
			
		||||
    values dup [
 | 
			
		||||
        {
 | 
			
		||||
            [ ranges>> reverse-here ]
 | 
			
		||||
            [ uses>> reverse-here ]
 | 
			
		||||
            [ ranges>> reverse! drop ]
 | 
			
		||||
            [ uses>> reverse! drop ]
 | 
			
		||||
            [ compute-start/end ]
 | 
			
		||||
            [ check-start ]
 | 
			
		||||
        } cleave
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -209,7 +209,7 @@ RENAMING: convert [ converted-value ] [ converted-value ] [ ]
 | 
			
		|||
 | 
			
		||||
: perform-renaming ( insn -- )
 | 
			
		||||
    needs-renaming? get [
 | 
			
		||||
        renaming-set get reverse-here
 | 
			
		||||
        renaming-set get reverse! drop
 | 
			
		||||
        [ convert-insn-uses ] [ convert-insn-defs ] bi
 | 
			
		||||
        renaming-set get length 0 assert=
 | 
			
		||||
    ] [ drop ] if ;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -52,7 +52,7 @@ HELP: <groups>
 | 
			
		|||
{ $examples
 | 
			
		||||
    { $example
 | 
			
		||||
        "USING: arrays kernel prettyprint sequences grouping ;"
 | 
			
		||||
        "9 >array 3 <groups> dup reverse-here concat >array ." "{ 6 7 8 3 4 5 0 1 2 }"
 | 
			
		||||
        "9 >array 3 <groups> reverse! concat >array ." "{ 6 7 8 3 4 5 0 1 2 }"
 | 
			
		||||
    }
 | 
			
		||||
    { $example
 | 
			
		||||
        "USING: kernel prettyprint sequences grouping ;"
 | 
			
		||||
| 
						 | 
				
			
			@ -68,7 +68,7 @@ HELP: <sliced-groups>
 | 
			
		|||
    { $example
 | 
			
		||||
        "USING: arrays kernel prettyprint sequences grouping ;"
 | 
			
		||||
        "9 >array 3 <sliced-groups>"
 | 
			
		||||
        "dup [ reverse-here ] each concat >array ."
 | 
			
		||||
        "dup [ reverse! drop ] each concat >array ."
 | 
			
		||||
        "{ 2 1 0 5 4 3 8 7 6 }"
 | 
			
		||||
    }
 | 
			
		||||
    { $example
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -101,7 +101,7 @@ SYNTAX: HINTS:
 | 
			
		|||
{ { fixnum fixnum string } { fixnum fixnum array } }
 | 
			
		||||
"specializer" set-word-prop
 | 
			
		||||
 | 
			
		||||
\ reverse-here
 | 
			
		||||
\ reverse!
 | 
			
		||||
{ { string } { array } }
 | 
			
		||||
"specializer" set-word-prop
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -66,7 +66,7 @@ TUPLE: range ufirst ulast bfirst blast ;
 | 
			
		|||
    126 /mod HEX: 81 + swap
 | 
			
		||||
    10 /mod HEX: 30 + swap
 | 
			
		||||
    HEX: 81 +
 | 
			
		||||
    4byte-array dup reverse-here ;
 | 
			
		||||
    4byte-array reverse! ;
 | 
			
		||||
 | 
			
		||||
: >interval-map-by ( start-quot end-quot value-quot seq -- interval-map )
 | 
			
		||||
    '[ _ [ @ 2array ] _ tri ] { } map>assoc <interval-map> ; inline
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -81,7 +81,7 @@ ARTICLE: "io.mmap.examples" "Memory-mapped file examples"
 | 
			
		|||
    ""
 | 
			
		||||
    "\"mydata.dat\" char ["
 | 
			
		||||
    "    4 <sliced-groups>"
 | 
			
		||||
    "    [ reverse-here ] map! drop"
 | 
			
		||||
    "    [ reverse! drop ] map! drop"
 | 
			
		||||
    "] with-mapped-array"
 | 
			
		||||
}
 | 
			
		||||
"Normalize a file containing packed quadrupes of floats:"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,7 @@ IN: io.binary
 | 
			
		|||
: nth-byte ( x n -- b ) -8 * shift mask-byte ; inline
 | 
			
		||||
 | 
			
		||||
: >le ( x n -- byte-array ) iota [ nth-byte ] with B{ } map-as ;
 | 
			
		||||
: >be ( x n -- byte-array ) >le dup reverse-here ;
 | 
			
		||||
: >be ( x n -- byte-array ) >le reverse! ;
 | 
			
		||||
 | 
			
		||||
: d>w/w ( d -- w1 w2 )
 | 
			
		||||
    [ HEX: ffffffff bitand ]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -138,7 +138,7 @@ PRIVATE>
 | 
			
		|||
: positive>base ( num radix -- str )
 | 
			
		||||
    dup 1 <= [ "Invalid radix" throw ] when
 | 
			
		||||
    [ dup 0 > ] swap [ /mod >digit ] curry "" produce-as nip
 | 
			
		||||
    dup reverse-here ; inline
 | 
			
		||||
    reverse! ; inline
 | 
			
		||||
 | 
			
		||||
PRIVATE>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -605,9 +605,9 @@ HELP: exchange
 | 
			
		|||
{ $values { "m" "a non-negative integer" } { "n" "a non-negative integer" } { "seq" "a mutable sequence" } }
 | 
			
		||||
{ $description "Exchanges the " { $snippet "m" } "th and " { $snippet "n" } "th elements of " { $snippet "seq" } "." } ;
 | 
			
		||||
 | 
			
		||||
HELP: reverse-here
 | 
			
		||||
HELP: reverse!
 | 
			
		||||
{ $values { "seq" "a mutable sequence" } }
 | 
			
		||||
{ $description "Reverses a sequence in-place." }
 | 
			
		||||
{ $description "Reverses a sequence in-place and outputs that sequence." }
 | 
			
		||||
{ $side-effects "seq" } ;
 | 
			
		||||
 | 
			
		||||
HELP: padding
 | 
			
		||||
| 
						 | 
				
			
			@ -635,7 +635,7 @@ HELP: reverse
 | 
			
		|||
{ $values { "seq" sequence } { "newseq" "a new sequence" } }
 | 
			
		||||
{ $description "Outputs a new sequence having the same elements as " { $snippet "seq" } " but in reverse order." } ;
 | 
			
		||||
 | 
			
		||||
{ reverse <reversed> reverse-here } related-words
 | 
			
		||||
{ reverse <reversed> reverse! } related-words
 | 
			
		||||
 | 
			
		||||
HELP: <reversed>
 | 
			
		||||
{ $values { "seq" sequence } { "reversed" "a new sequence" } }
 | 
			
		||||
| 
						 | 
				
			
			@ -1617,7 +1617,7 @@ ARTICLE: "sequences-destructive" "Destructive operations"
 | 
			
		|||
}
 | 
			
		||||
"Other destructive words:"
 | 
			
		||||
{ $subsections
 | 
			
		||||
    reverse-here
 | 
			
		||||
    reverse!
 | 
			
		||||
    push-all
 | 
			
		||||
    move
 | 
			
		||||
    exchange
 | 
			
		||||
| 
						 | 
				
			
			@ -1632,7 +1632,7 @@ ARTICLE: "sequences-destructive" "Destructive operations"
 | 
			
		|||
    { { $link remove } { $link remove! } }
 | 
			
		||||
    { { $link remove-eq } { $link remove-eq! } }
 | 
			
		||||
    { { $link remove-nth } { $link remove-nth! } }
 | 
			
		||||
    { { $link reverse } { $link reverse-here } }
 | 
			
		||||
    { { $link reverse } { $link reverse! } }
 | 
			
		||||
    { { $link append } { $link append! } }
 | 
			
		||||
    { { $link map } { $link map! } }
 | 
			
		||||
    { { $link filter } { $link filter! } }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -723,15 +723,16 @@ PRIVATE>
 | 
			
		|||
    [ exchange-unsafe ]
 | 
			
		||||
    3tri ;
 | 
			
		||||
 | 
			
		||||
: reverse-here ( seq -- )
 | 
			
		||||
: reverse! ( seq -- seq )
 | 
			
		||||
    [
 | 
			
		||||
        [ length 2/ iota ] [ length ] [ ] tri
 | 
			
		||||
    [ [ over - 1 - ] dip exchange-unsafe ] 2curry each ;
 | 
			
		||||
        [ [ over - 1 - ] dip exchange-unsafe ] 2curry each
 | 
			
		||||
    ] keep ;
 | 
			
		||||
 | 
			
		||||
: reverse ( seq -- newseq )
 | 
			
		||||
    [
 | 
			
		||||
        dup [ length ] keep new-sequence
 | 
			
		||||
        [ 0 swap copy ] keep
 | 
			
		||||
        [ reverse-here ] keep
 | 
			
		||||
        [ 0 swap copy ] keep reverse!
 | 
			
		||||
    ] keep like ;
 | 
			
		||||
 | 
			
		||||
: sum-lengths ( seq -- n )
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -86,7 +86,7 @@ unit-test
 | 
			
		|||
] unit-test
 | 
			
		||||
 | 
			
		||||
! Make sure we clear aux vector when storing octets
 | 
			
		||||
[ "\u123456hi" ] [ "ih\u123456" clone dup reverse-here ] unit-test
 | 
			
		||||
[ "\u123456hi" ] [ "ih\u123456" clone reverse! ] unit-test
 | 
			
		||||
 | 
			
		||||
! Make sure aux vector is not shared
 | 
			
		||||
[ "\udeadbe" ] [
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,7 +12,7 @@ IN: benchmark.fannkuch
 | 
			
		|||
: count-flips ( perm -- flip# )
 | 
			
		||||
    '[
 | 
			
		||||
        _ dup first dup 1 =
 | 
			
		||||
        [ 2drop f ] [ head-slice reverse-here t ] if
 | 
			
		||||
        [ 2drop f ] [ head-slice reverse! drop t ] if
 | 
			
		||||
    ] count ; inline
 | 
			
		||||
 | 
			
		||||
: write-permutation ( perm -- )
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,7 @@ IN: benchmark.reverse-complement
 | 
			
		|||
TR: trans-map ch>upper "ACGTUMRYKVHDB" "TGCAAKYRMBDHV" ;
 | 
			
		||||
 | 
			
		||||
: translate-seq ( seq -- str )
 | 
			
		||||
    concat dup reverse-here dup trans-map-fast ;
 | 
			
		||||
    concat reverse! dup trans-map-fast ;
 | 
			
		||||
 | 
			
		||||
: show-seq ( seq -- )
 | 
			
		||||
    translate-seq 60 <groups> [ print ] each ;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,7 +53,7 @@ syn keyword factorKeyword or tuck 2bi 2tri while wrapper nip 4dip wrapper? bi* c
 | 
			
		|||
syn keyword factorKeyword ?at assoc? assoc-clone-like assoc= delete-at* assoc-partition extract-keys new-assoc value? assoc-size map>assoc push-at assoc-like key? assoc-intersect assoc-refine update assoc-union assoc-combine at* assoc-empty? at+ set-at assoc-all? assoc-subset? assoc-hashcode change-at assoc-each assoc-diff zip values value-at rename-at inc-at enum? at cache assoc>map <enum> assoc assoc-map enum value-at* assoc-map-as >alist assoc-filter-as clear-assoc assoc-stack maybe-set-at substitute assoc-filter 2cache delete-at assoc-find keys assoc-any? unzip
 | 
			
		||||
syn keyword factorKeyword case execute-effect no-cond no-case? 3cleave>quot 2cleave cond>quot wrong-values? no-cond? cleave>quot no-case case>quot 3cleave wrong-values to-fixed-point alist>quot case-find cond cleave call-effect 2cleave>quot recursive-hashcode linear-case-quot spread spread>quot
 | 
			
		||||
syn keyword factorKeyword byte-array>bignum sgn >bignum next-float number= each-integer next-power-of-2 ?1+ fp-special? imaginary-part mod recip float>bits rational >float number? 2^ bignum? integer fixnum? neg fixnum sq bignum fp-snan? fp-infinity? denominator (all-integers?) times find-last-integer (each-integer) bit? * + fp-bitwise= - fp-qnan? / power-of-2? >= bitand find-integer complex <fp-nan> < log2 > integer? real number bits>double double>bits bitor 2/ zero? rem fp-nan-payload all-integers? (find-integer) real-part prev-float align bits>float float? shift float fp-nan? abs bitxor ratio? even? <= /mod odd? >integer ratio rational? bitnot real? >fixnum complex? /i numerator /f
 | 
			
		||||
syn keyword factorKeyword append assert-sequence= find-last-from trim-head-slice clone-like 3sequence assert-sequence? map-as filter! last-index-from reversed index-from cut* pad-tail (indices) concat-as remove-eq but-last snip trim-tail nths nth 2pusher sequence slice? <slice> partition remove-nth tail-slice empty? tail* if-empty find-from virtual-sequence? member? set-length remove-eq! drop-prefix unclip iota unclip-last-slice bounds-error? sequence-hashcode-step map start midpoint@ rest-slice prepend fourth sift delete sigma new-sequence follow like remove-nth! first4 1sequence reverse slice unless-empty padding virtual@ repetition? set-last index 4sequence max-length set-second immutable-sequence first2 first3 replicate-as reduce-index unclip-slice supremum insert-nth trim-tail-slice tail 3append short count suffix concat flip filter sum immutable? 2sequence map-integers delete-all start* indices snip-slice check-slice sequence? head map-find reduce append-as reverse-here sequence= halves collapse-slice interleave 2map binary-reduce virtual-seq slice-error? product bounds-check? bounds-check harvest immutable find produce remove pad-head last replicate set-fourth shorten reversed? map-find-last 3map-as 2unclip-slice shorter? 3map find-last head-slice pop* 2map-as tail-slice* but-last-slice 2map-reduce iota? accumulate each pusher cut-slice new-resizable each-index head-slice* 2reverse-each sequence-hashcode memq? pop set-nth ?nth <flat-slice> second map! join when-empty accumulator immutable-sequence? <reversed> all? 3append-as virtual-sequence subseq? push-either new-like length last-index push-if 2all? lengthen assert-sequence copy map-reduce move third first 3each tail? set-first prefix bounds-error any? <repetition> trim-slice exchange surround 2reduce cut change-nth min-length set-third produce-as push-all head? delete-slice rest sum-lengths 2each head* infimum glue slice-error subseq replace-slice push repetition map-index trim-head unclip-last mismatch trim
 | 
			
		||||
syn keyword factorKeyword append assert-sequence= find-last-from trim-head-slice clone-like 3sequence assert-sequence? map-as filter! last-index-from reversed index-from cut* pad-tail (indices) concat-as remove-eq but-last snip trim-tail nths nth 2pusher sequence slice? <slice> partition remove-nth tail-slice empty? tail* if-empty find-from virtual-sequence? member? set-length remove-eq! drop-prefix unclip iota unclip-last-slice bounds-error? sequence-hashcode-step map start midpoint@ rest-slice prepend fourth sift delete sigma new-sequence follow like remove-nth! first4 1sequence reverse slice unless-empty padding virtual@ repetition? set-last index 4sequence max-length set-second immutable-sequence first2 first3 replicate-as reduce-index unclip-slice supremum insert-nth trim-tail-slice tail 3append short count suffix concat flip filter sum immutable? 2sequence map-integers delete-all start* indices snip-slice check-slice sequence? head map-find reduce append-as reverse! sequence= halves collapse-slice interleave 2map binary-reduce virtual-seq slice-error? product bounds-check? bounds-check harvest immutable find produce remove pad-head last replicate set-fourth shorten reversed? map-find-last 3map-as 2unclip-slice shorter? 3map find-last head-slice pop* 2map-as tail-slice* but-last-slice 2map-reduce iota? accumulate each pusher cut-slice new-resizable each-index head-slice* 2reverse-each sequence-hashcode memq? pop set-nth ?nth <flat-slice> second map! join when-empty accumulator immutable-sequence? <reversed> all? 3append-as virtual-sequence subseq? push-either new-like length last-index push-if 2all? lengthen assert-sequence copy map-reduce move third first 3each tail? set-first prefix bounds-error any? <repetition> trim-slice exchange surround 2reduce cut change-nth min-length set-third produce-as push-all head? delete-slice rest sum-lengths 2each head* infimum glue slice-error subseq replace-slice push repetition map-index trim-head unclip-last mismatch trim
 | 
			
		||||
syn keyword factorKeyword global +@ change set-namestack change-global init-namespaces on off set-global namespace set with-scope bind with-variable inc dec counter initialize namestack get get-global make-assoc
 | 
			
		||||
syn keyword factorKeyword <array> 2array 3array pair >array 1array 4array pair? array resize-array array?
 | 
			
		||||
syn keyword factorKeyword +character+ bad-seek-type? readln stream-seek read print with-output-stream contents write1 stream-write1 stream-copy stream-element-type with-input-stream stream-print stream-read stream-contents bl seek-output bad-seek-type nl stream-nl write flush stream-lines +byte+ stream-flush read1 seek-absolute? stream-read1 lines stream-readln stream-read-until each-line seek-end with-output-stream* seek-absolute with-streams seek-input seek-relative? input-stream stream-write read-partial seek-end? seek-relative error-stream read-until with-input-stream* with-streams* each-block output-stream stream-read-partial
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue