World: r3wp
[!REBOL3-OLD1]
older newer | first last |
BrianH 13-Feb-2009 [11216x3] | That's REFLECT and its associated *-OF functions. Yes, gradually, as R3 gets fuurther along. The backports can be used with existing releases though - I'm bundling them all into %r2-forward.r. |
I also backported CAUSE-ERROR, which triggers errors safely. | |
Also the proposed QUOTE and ACCUMULATE. | |
Steeve 13-Feb-2009 [11219x2] | quote ? |
accumulate -> cumul (shorter name) | |
BrianH 13-Feb-2009 [11221x4] | QUOTE is a Peta special, a simple function to perform a nasty trick in as little code as possible. It blocks evalation :) ; R3 version quote: func [ "Returns the value passed to it without evaluation." :value [any-type!] ] [ :value ] ; R2 version quote: func [ "Returns the value passed to it without evaluation." :value [any-type!] ] [ get/any 'value ] |
It's like the Scheme function of the same name. | |
evalation -> evaluation | |
CUMUL is not an English word (but let me check). I picked ACCUMULATE because it is the industry standard (for procedural langs). | |
Steeve 13-Feb-2009 [11225] | oh sorry it's french (i tried) |
BrianH 13-Feb-2009 [11226x2] | We are not going the Perl 6 route :) |
I'm checking a thesaurus. | |
Steeve 13-Feb-2009 [11228] | and ACCU ? |
BrianH 13-Feb-2009 [11229] | GATHER perhaps? |
Steeve 13-Feb-2009 [11230] | http://en.wikipedia.org/wiki/ACCU |
Henrik 13-Feb-2009 [11231] | BrianH, check #1804, for a GATHER function that does something else. |
BrianH 13-Feb-2009 [11232x4] | That sounds like a better function to call GATHER. ACCUMULATE will get called less than that. |
It could use the /into option though. | |
With all of these collection synonym functions it will be interesting to keep them straight. | |
Use FORALL for the R3 version of GATHER - FORALL is faster than FOREACH in R3. | |
Henrik 13-Feb-2009 [11236] | ASSEMBLE might be a nice word to reserve. |
Steeve 13-Feb-2009 [11237] | Could be disturbing for beginners, a same thing can be writed using so many various ways with the tons of mezz we have now. |
BrianH 13-Feb-2009 [11238] | Yeah. For an assembler :) We want reserve COMPILE too :D |
Henrik 13-Feb-2009 [11239] | Steeve, you have a point. For a couple of years, I would write mezzanines for things that already existed in R2, but hadn't noticed. |
Steeve 13-Feb-2009 [11240] | ahah, shame on you ;-) |
BrianH 13-Feb-2009 [11241] | I'm converting GATHER to mezzanine/library code standards now. We'll probably put all of these is an advanced series manipulation library module. |
Steeve 13-Feb-2009 [11242] | types-of is ugly Brian :) |
BrianH 13-Feb-2009 [11243x2] | You have no idea. TYPES-OF was the only reflector that had no corresponding hack in R2. I had to do it from scratch. |
Mezzanine-quality version of Henrik's GATHER, R3 version: gather: func [ "Get the values of a given field from all objects in a block." block [block!] word [word!] /into "Insert into a buffer instead (returns position after insert)" output [series!] "The buffer series (modified)" ][ unless output [output: make block length? block] forall block [ all [ object? block/1 in block/1 word output: insert/only output select block/1 word ] ] either into [output] [head output] ] | |
PeterWood 13-Feb-2009 [11245x3] | Has the spec for make function! been changed on purpose in R3? Is for what reason? |
Is => if | |
>> a: make function! [spec] [body] ** Script error: cannot MAKE/TO function! from: function! ** Where: make ** Near: make function! [spec] [body] >> my-func: make function! [[b] [print b] ] == make function! [[b][print b]] | |
BrianH 13-Feb-2009 [11248x2] | Yes. Reason: To simplify and speed up MAKE, and REBOL, and to make code generation easier. |
Use the wrappers if you want to be R2 compatible. | |
Steeve 13-Feb-2009 [11250] | Brian, are you sure that (output: insert/only output ..) is faster than (append/only output) in R3 ? |
BrianH 13-Feb-2009 [11251] | No, it's not, but not by much and it's necessary for the /into option. |
Steeve 13-Feb-2009 [11252] | ah yes, i forget |
BrianH 13-Feb-2009 [11253x2] | Strangely enough the REBOL overhead of the /into option (one UNLESS, one EITHER, and n assignments) is dwarfed by the overhead saved if the /into option is implemented pervasively. |
Plus, I can copy-paste most of the code :) | |
Steeve 13-Feb-2009 [11255] | and you say that foreach is slower than forall in this case ? (overhead with 3 path evaluations block/1 , no ?) |
Henrik 13-Feb-2009 [11256] | BrianH, nice GATHER function. :-) |
BrianH 13-Feb-2009 [11257x2] | FOREACH does a BIND/copy of its code block, but you might have a point in this case because the 3 paths are N*3. |
Final submitted R3 version: gather: func [ "Get the values of a given field from all objects in a block that have it." block [block!] "A block which may contain objects" word [word!] "The field to look for" /into "Insert into a buffer instead (returns position after insert)" output [series!] "The buffer series (modified)" ][ unless output [output: make block length? block] foreach item block [all [ object? :item in item word output: insert/only output select item word ]] either into [output] [head output] ] | |
Henrik 13-Feb-2009 [11259] | So FOREACH is better, anyway? |
Steeve 13-Feb-2009 [11260] | not anyway |
Henrik 13-Feb-2009 [11261] | Argh, I need to read better. You wrote this already. |
BrianH 13-Feb-2009 [11262x2] | It seems like speed is more important than memory in this function. |
Henrik, if you can write up a CureCode wish for this function I can mark it as pending. | |
Henrik 13-Feb-2009 [11264] | For GATHER? Should I just copy your code and credit it to myself? :-) |
Steeve 13-Feb-2009 [11265] | yes, we all do that :) |
older newer | first last |