Skip to content

Instantly share code, notes, and snippets.

@toomasv
Last active September 1, 2017 06:25
Show Gist options
  • Save toomasv/339cbe53fe99283bebe6a819f6840beb to your computer and use it in GitHub Desktop.
Save toomasv/339cbe53fe99283bebe6a819f6840beb to your computer and use it in GitHub Desktop.
Rewrite of `reverse` to allow record-like reversing
reverse: func [
series /skip size /part length /local i tuple
][
switch type?/word series [
pair! [return to-pair reduce [series/2 series/1]]
tuple! [tuple: clear [] repeat i length? series [append tuple pick series i] series: copy tuple tuple: yes]
]
size: any [size 1]
either 0 = ((length? series) % size) [
length: any [length length? series]
i: 1
loop (length / size - 1) [
i: i + size
series: at head series i
insert head series take/part series size
]
series: head series
][cause-error 'user 'message ["Wrong length of series or skip!"]]
either tuple [to-tuple series][series]
]
@toomasv
Copy link
Author

toomasv commented Aug 28, 2017

>> reverse/skip/part [1 2 3 4 5 6] 2 4
== [3 4 1 2 5 6]
>> reverse/skip [1 2 3 4 5 6] 2
== [5 6 3 4 1 2]
>> reverse [1 2 3 4 5 6]
== [6 5 4 3 2 1]
>> reverse/skip [1 2 3 4 5 6] 3
== [4 5 6 1 2 3]
>> reverse 1x2
== 2x1
>> reverse 1.2.3.4
== 4.3.2.1
>> reverse/skip 1.2.3.4 2
== 3.4.1.2
>> reverse/skip/part 1.2.3.4.5.6 2 4
== 3.4.1.2.5.6

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment