Gregg, cool . but how about parse?

>> b: [1 2 3 4 5 6 7 8 9 10 11 12 13 14]
== [1 2 3 4 5 6 7 8 9 10 11 12 13 14]
>> parse b[ 4 skip copy v 2 skip]
== false
>> v
== [5 6]

-Volker
 
Am Samstag, 18. Oktober 2003 21:02 schrieb Gregg Irwin:
> Max et al,
>
> I agree that something more concise than "raw REBOL" (copy/part
> at...) would be great, but the slice notation as used in Python and
> Ruby isn't grabbing me--not for general use anyway.
>
> MOA> I still prefer this type of syntax:
>
> MOA> blk/[1 3:5]
>
> MOA> it is clear, and uses the least typing each space defines a block to
> MOA> extract it also looks most like spreadsheets syntax when specifying
> MOA> ranges.
> ...
> MOA> blk/[ 5:  ~10 ]   ; everything starting at 5 but not the tenth
> element.
>
> It may be clear to programmers that are familiar with that notation,
> but I'm not sure it would be clear to normal people (spreadsheet
> people are in-between and would understand the basic range notation,
> but would have to learn any extensions to it).
>
> The n:m notation would conflict with time! values as well.
>
> General clarity aside, my gut reaction to the path/block/slice
> notation isn't positive. I don't think it buys us anything in the long
> run, and it could have a pretty serious impact on things if included
> as a base syntactical change (particularly if it doesn't fit within
> REBOL's current lexicon).
>
> MOA> because the colon is already used, maybe we could simply use another
> MOA> character:
>
> If you "simply use another character", then you: a) lose what I see as
> the most positive aspect of it--that it's a known range notation for
> some people, and b) fall into a "what fits" approach, rather than
> designing for clear meaning and intent.
>
> Now, since I disagree, it's only fair that I offer up a solution. :)
>
> At the end of this message is a function called EXCERPT, that uses a
> simple dialect. I originally called it CUT (as in the *nix utility
> that does the same kind of thing), which also maps closely to the
> "slice" concept in other languages. The problem I saw was that we're
> not really cutting anything out, we're copying things out, so it isn't
> really an accurate name (IIRC, Python and Ruby have different
> semantics for slicing). COPY, SELECT, and PICK are already taken, as
> is EXTRACT; though EXTRACT is a mezzanine that we could enhance, which
> might be a better bet. EXCERPT implies the correct meaning to me, but
> it isn't grabbing me as a great word so far. :)
>
> Let me know what you think.
>
> -- Gregg
>
> ; The dialect allows you to use commas in the block, but how they
> ; are interpreted is not how you might think. Coming after a number,
> ; they are a valid lexical form, but they denote a decimal! rather
> ; than being seen as a separator, which means you can't use them too
> ; flexibly.
> excerpt: func [
>     {Returns the specified items and/or ranges from the series.}
>     series  [series!]
>     offsets [block!] {Offsets of the items to extract; dialected.}
>     /only "return sub-block ranges as blocks"
>     /local
>         emit emit-range rules
>         from* to* index*        ; parse vars
>         result
> ][
>     emit: func [value] [
>         either only [append/only result value][append result value]
>     ]
>     emit-range: func [start end] [
>         start: to integer! start
>         if number? end [end: to integer! end - start + 1]
>         emit either end = 'end [copy at series start][
>             copy/part at series start end
>         ]
>     ]
>     rules: [
>         some [
>             opt 'from set from* number! 'to set to* number! (
>                 emit-range from* to*
>             )
>
>           | opt 'from set from* number! 'to 'end (emit-range from* 'end)
>           | 'to set to* number!  (emit-range 1 to*)
>           | set index* number!   (emit pick series index*)
>           | into rules
>
>         ]
>     ]
>     ; Return a block. Easy enough for them to REJOIN if they want.
>     result: make block! length? series
>     parse offsets rules
>     result
> ]
> b: [1 2 3 4 5 6 7 8 9 10 11 12 13 14]
> excerpt b [1 3 5]
> excerpt b [1 3 to 6 8]
> excerpt/only b [1, 3 to 6, 8]
> excerpt b [1 [5 to 7] 8]
> excerpt/only b [1 (from 5 to 7) 8]
> excerpt b [(to 2) [4 to 6] 8, 10, from 12 to end]
> excerpt/only b [to 2, 4 to 6, 8, 10, (12 to end)]
> ; Can't use a comma after 'end
> excerpt/only b [to 2 to 6 8 10 to end 12 to end]
> excerpt/only b [to 2, to 6, 8 [10 to end] 12 to end]
> excerpt/only trim {
>     REBOL is my favorite language
> } [
>     to 5, 10 to 11, 13, 14, 15, 22 to end
> ]


-- 
To unsubscribe from this list, just send an email to
[EMAIL PROTECTED] with unsubscribe as the subject.

Reply via email to