World: r3wp
[Core] Discuss core issues
older newer | first last |
BrianH 27-Oct-2008 [11219x2] | Graham, try TAKE for your cut function. |
Never mind, TAKE is the opposite of what you want. Try this: cut: func [s [series!] n [number!]] [clear skip s max 0 n s] | |
Gregg 27-Oct-2008 [11221] | 'Cut doesn't seem like a good name for this. 'Cut is a *nix command that lets you "cut out" the columns you want from data. And if you say "cut ["Gregg Irwin" 5], does that mean to cut five chars or keep them, and from which end? I think 'keep is a better word for this, or maybe 'cut-to. BTW, I have the same naming issue with my PAD func. i.e. does pad/right mean pad *to* the right, or *on* the right. Sometimes you just have to live with a bit of ambiguity. |
BrianH 27-Oct-2008 [11222] | KEEP is used elsewhere. This is more of a constraint. Perhaps cut-length or something like that. |
Graham 27-Oct-2008 [11223] | Trim is also taken |
Anton 27-Oct-2008 [11224] | BrianH, I actually didn't want tilde expansion for that case (an actual directory in the public cache), so R3's behaviour would have been good for me. Just wondering if anyone has any thoughts about the issue in R2. |
Gregg 28-Oct-2008 [11225] | Where is KEEP used? Under R3 it may still be in the COLLECT spec, but I don't recall it in R2. |
Anton 28-Oct-2008 [11226] | What about FIT ? |
Graham 28-Oct-2008 [11227] | I was also thinking of fit |
DideC 28-Oct-2008 [11228] | clear-at |
Anton 28-Oct-2008 [11229] | discard |
BrianH 28-Oct-2008 [11230x2] | COLLECT will be back-ported to R2. At the time of the 2.7.6 release the function was still under discussion - now it is finalized. We only backport final functions. I'm thinking that FOLD will probably make it too :) |
How about TRIM-LENGTH ? | |
btiffin 28-Oct-2008 [11232] | Graham; 'only 'lop 'betail 'amputate 'pare ''shorten ''abscind load up the dict protocol demo and >> thes truncate for more |
Anton 28-Oct-2008 [11233] | oohoo, truncate's good. |
BrianH 29-Oct-2008 [11234] | I like truncate. |
btiffin 29-Oct-2008 [11235] | And just to place credit where it belongs ... Our good Chris was first with truncate ... I was simply using it as a good launch point for a thesaurus scan. |
Graham 29-Oct-2008 [11236x2] | how about 'lose |
never seen that word used in a REBOL script! :) | |
Anton 30-Oct-2008 [11238] | 'lop is pretty good, because it (probably) implies a fixed length. eg. a forester might lop the tops off some trees. |
Tomc 30-Oct-2008 [11239x2] | how about trim/integer ? example abbrev: trim/3 month |
trim/-n could keep the last n chars | |
BrianH 30-Oct-2008 [11241] | Tom, that wouldn't work with REBOL's evaluation rules. Native or not, you can't write a function that way. |
Tomc 30-Oct-2008 [11242] | picky picky mth: trim/lenght month 3 |
Henrik 31-Oct-2008 [11243] | trim/to perhaps |
Graham 31-Oct-2008 [11244] | Cut Keep Fit Clear-at Constrain Discard Trim-length Truncate Lose Lop Trim/to |
Henrik 31-Oct-2008 [11245] | In this sense, CUT would mean split in two parts, I think. TRUNCATE is accurate, but TRIM/TO is a little shorter. |
DideC 31-Oct-2008 [11246] | clear-at (its what it does) truncate (its what it seems to do) |
Graham 31-Oct-2008 [11247] | in that case, I would use trunc :) |
Graham 5-Nov-2008 [11248x2] | One thing I do is to remove the outer characters eg. "[Something]" => "Something" |
Python has good tools for dealing with these functions. | |
Chris 5-Nov-2008 [11250] | That's where a range! datatype would come in handy: copy/part "[Something]" 1..-1 |
Graham 5-Nov-2008 [11251x2] | Yep |
this is Gregg's substr function substring: func [ [catch] source [string!] spec [block!] /local start stop rule ][ rule: [set start integer! '.. set stop integer!] unless parse spec rule [ throw make error! "Invalid range spec." ] copy/part skip source start stop ] | |
Chris 5-Nov-2008 [11253] | You could produce a 'truncate function that uses a pair! to similar effect... truncate: func [string limit [pair! integer!]][ if integer? limit [limit: 1x0 * limit] string: copy string case [ negative? limit/x [remove/part string skip tail string limit/x] positive? limit/x [remove/part string limit/x] negative? limit/y [clear skip tail string limit/y] positive? limit/x [clear skip string limit/y] ] string ] |
Graham 5-Nov-2008 [11254x2] | the ".." is syntactic sugar. |
the dialect doesn't cope with negative offsets it seems | |
Chris 5-Nov-2008 [11256x2] | ; This works!: truncate: func [string limit [pair! integer!]][ if integer? limit [limit: 1x0 * limit] string: copy string case/all [ negative? limit/x [limit/x: limit/x + length? string] negative? limit/y [limit/y: limit/y + length? string] ] clear skip string limit/y remove/part string limit/x ] |
>> truncate "[abc]" 1x-1 == "abc" | |
Graham 5-Nov-2008 [11258x2] | cool |
I think these sorts of series maniplulations should be native | |
Chris 5-Nov-2008 [11260x2] | Quite, except with range! instead of pair! |
copy/part "[abc]" 1..-1 remove/part "[abcd]" 1..-1 | |
BrianH 5-Nov-2008 [11262] | They are native, just without any unnecessary extra syntax. This isn't Perl, you know. |
Graham 5-Nov-2008 [11263x2] | but perl rulz! |
the power of a language lies partly in it's ability to express things concisely | |
PeterWood 5-Nov-2008 [11265] | >> str: "[abc]" == "[abc] >> copy/part skip str 1 back tail str == abc" |
Graham 5-Nov-2008 [11266x3] | str appears twice |
it's annoying | |
three times, if you do str: copy/part skip str 1 back tail str | |
older newer | first last |