World: r3wp
[Core] Discuss core issues
older newer | first last |
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 [11266x4] | str appears twice |
it's annoying | |
three times, if you do str: copy/part skip str 1 back tail str | |
instead of 'truncate, how about 'peel ? | |
PeterWood 5-Nov-2008 [11270] | If you are removing characters from both ends of a string 'strip would appear to be a more precise description. |
Graham 5-Nov-2008 [11271] | Hmm. You can strip the inner lining of something, but normally you only peel the outer layers :) |
PeterWood 5-Nov-2008 [11272] | If that's you definition of stripping it's no wonder you live in NZ. |
Graham 5-Nov-2008 [11273x3] | However, my preference is to add some dialect to trim ... |
rather than to keep adding words | |
Strip mining? | |
PeterWood 5-Nov-2008 [11276] | Stripping paint? stripping wallpaper? |
Graham 5-Nov-2008 [11277x3] | strip a joint ... = remove the contents |
so, peel has a more restrictive meaning being a subset of strip. | |
I hope we are both joking here :) | |
Rebolek 5-Nov-2008 [11280x2] | 'trim is not good fo this? |
>> trim/with "[Something]" "[]" == "Something" | |
Graham 5-Nov-2008 [11282x2] | it would have to be trim/head/tail/with to avoid removing characters inside ... |
but certainly I forgot about trim/with ! | |
Rebolek 5-Nov-2008 [11284x2] | Hm, it doesn't work |
>> trim/head/tail/with "[Some[]thing]" "[]" ** Script Error: Invalid path value: with ** Near: trim/head/tail/with "[Some[]thing]" "[]" | |
Gregg 5-Nov-2008 [11286] | I'm not a big fan of the -n syntax to mean "from the end", but that's just me. It's convenient to type, but doesn't provide meaning. My BOUNDS/RANGE dialect supports .. notation via tuples so you can't use negative numbers. For the trim/strip stuff, I ended up with a bunch of related funcs (begins-with?, ends-with?, enclose, etc.), and it works for more than single chars. Not as simple as a standalone func, but more robust and flexible for the general case. |
Graham 7-Nov-2008 [11287] | Why can't we have functions that return a value to the calling function, but then continue to do something else ? Is this because we lack multithreading? |
older newer | first last |