|Version||r3 master||Category||Mezzanine||Submitted by||abolka|
|Summary||Rename SPLIT's /INTO refinement|
SPLIT currently has an /INTO refinement, that toggles between splitting into parts of length N and splitting into N parts (cf. the example code).
While aptly named in and of itself, this non-standard usage of /INTO conflicts with the intention to use `/INTO outbuffer` as a common refinement to pre-supply a result buffer to functions (to avoid allocating intermediate storage). This latter usage is currently implemented in e.g. AJOIN, COLLECT, COMPOSE, EXTRACT, REDUCE, or REWORD.
So SPLIT's /INTO refinement should be renamed, to avoid conflict with the standard /INTO usage.
;; Split into parts of length 2: >> split [a b c d e f] 2 == [[a b] [c d] [e f]] ;; Split into 2 parts: >> split/into [a b c d e f] 2 == [[a b c] [d e f]]
|Assigned to||n/a||Fixed in||-||Last Update||15-Oct-2013 03:05|
As evidenced by the above comments in the example code, /INTO would be a troublesome name that could apply to both scenarios...
A name that seems to only apply to the "/INTO" case could be /EVENLY..., although it would have to be explained as "Split into N equally-sized parts as best possible (with at most one non-empty piece of an unequal size to the others)"
>> split/evenly [a b c d e f] 2
== [[a b c] [d e f]]
>> split/evenly [a b c d e f] 7
== [[a] [b] [c] [d] [e] [f] ]
>> split/evenly [a b c d e f] 4
== [[a] [b] [c] [d e f]]
|Is it certain that `split/into` shouldn't be default and defer the current default to a `split/skip` or `split/length`? To say `split "something" 4`, it might be expected that it splits into four parts. `split/skip "something" 4` would slice into four-sized pieces.|
+1 for the switch and calling the old default behavior split/skip (as proposed by @onetom)
The current default skipping behavior is pretty Rebol specific. "I split the rope in two" means something in English, and it does not mean you split the rope in many pieces of size 2
split/length has the problem as with /into... are you splitting with the intent of producing a result which will have that length? Or are you splitting into pieces which have that length? It's ambiguous.
/skip is unambiguous, has precedent, and not contentious with English usage.
|I agree with changing the default, but how about calling the new option /by instead? This would be more helpful when you do multi-level splitting, where the value you're splitting by would be an array compatible dimensions block, rather than a select compatible record size.|
+1 for the switch and calling the old default behavior split/skip.
Brian, I think it will do what you want without /BY, because of how block args are processed. Or I'm misunderstanding.
|15-Oct-2013 03:05||Gregg||Comment : 0004075||Added||-|
|23-Aug-2013 17:03||BrianH||Comment : 0003951||Added||-|
|21-Aug-2013 07:24||Fork||Comment : 0003949||Added||-|
|21-Aug-2013 06:56||rgchris||Comment : 0003948||Added||-|
|20-Aug-2013 21:05||Fork||Comment : 0003945||Added||-|
|19-Aug-2013 14:43||abolka||Category||Modified||Unspecified => Mezzanine|
|19-Aug-2013 14:43||abolka||Severity||Modified||minor => tweak|
|19-Aug-2013 14:43||abolka||Type||Modified||Bug => Wish|