Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search

[REBOL] Re: The reaseon for having SERIES?

From: joel:neely:fedex at: 5-Jan-2003 7:55

Hi, Frantisek, Frantisek Fuka wrote:
> What is the reason for having SERIES type in Rebol? I understand > what the series are for but it seems to me that exact same things > can be done using normal strings. Having series type when you have > string seems to me like having negative-integer type when you have > integer (i.e. redundant)... >
To stay with your analogy as best I can, I'd flip the example around; the REBOL types for numeric data include: NUMBER! INTEGER! DECIMAL! so that, e.g., if you specify something like nexamp: func [a [number!] ... then you will be able to evaluate nexamp 1 ... as well as nexamp 3.14 ... because NUMBER! subsumes both INTEGER! and DECIMAL! into one abstract pseudo-type. Now to your question: the REBOL type system includes (in part) the SERIES! family, which is the most general type of ordered structure that REBOL supports. But look at the family tree: SERIES! ANY-STRING! STRING! FILE! URL! EMAIL! ... ANY-BLOCK! BLOCK! LIST! HASH! so that any operation that can be applied to a SERIES! value can be applied to any of the specific types underneath. On the other hand, there are operations that can be applied to an ANY-STRING! value (such as UPPERCASE) that make no sense when applied to an ANY-BLOCK! value. This hierarchy allows us to conveniently/compactly express exactly what types (or sets of types) we expect to find used in various settings, without having to provide an exhaustive list in every case: both-ends: func [s [series!]] [ join copy/part s 1 last s ] which behaves as
>> foo: [1 3 5 7 9]
== [1 3 5 7 9]
>> both-ends foo
== [1 9] is clearly applicable to anything under the SERIES! family tree, and it's nicer to write it as such than to have to specify both-ends: func [x [string! file! url! ... block! list! hash!] ... to make sure that all are included. Hope this helps! -jn-