World: r3wp
[Core] Discuss core issues
older newer | first last |
Pekr 15-Sep-2010 [18133x2] | sorry if I will propose a nonsense, or if the solution already exists, but - when using REBOL for data extraction (using parse) and forming a block or CSV as a result, I often come to the need of append-only-if-the-item-does-not-exist-already, so using following idiom: if not found? find target value [append target value] What about adding /not refinement (or other name), so that I could append only unique values? |
Also - is there any way of how to easily find out, if the block is unique? Should I apply 'unique, and compare the length before and after? Pity 'unique has /skip refinement, but does not have /compare one (as 'sort has), so that I can't set, when I have e.g. record of 5 items, I want to 1) set the record size (/skip) 2) select fields, upon which we want to define uniquess - could be an integer offset, or a block of positions [1 3] ... 'sort allows at least the offset via /compare | |
Sunanda 15-Sep-2010 [18135] | Two partial workarounds to your first issue Petr (I've used them both or various data sets): 1. simply APPEND each time, then when the set is complete use UNIQUE to deduplicate 2. if not alter target value [append target value] this ensures that VALUE is the last entry in TARGET |
Henrik 15-Sep-2010 [18136] | 2 is more efficient, since UNIQUE always copies. |
Pekr 15-Sep-2010 [18137] | but as for efficiency, does the alter really differs from "if not found? find?" |
Henrik 15-Sep-2010 [18138] | ALTER removes a value, if it's found. |
Pekr 15-Sep-2010 [18139] | which is the reverse, but the same, as appending only in the case, if not found :-) |
Henrik 15-Sep-2010 [18140] | ALTER is not really useful in its current form. |
Oldes 15-Sep-2010 [18141x3] | I found not use ALTER as it's not native.. I usually use the solution UNIQUE where the block is not much large, but if efficiency is needed, I would just go with: unless find blk val [append blk val] |
(I found = I would) | |
I don't want to add new refinements for such a easy to do solutions as they would slow every APPEND a little bit. | |
Pekr 15-Sep-2010 [18144] | it is just, at least for me, when using append at all - it is very often used idiom ... |
Graham 15-Sep-2010 [18145] | some people prefer this construct all [ find blk val append blk val ] |
Henrik 15-Sep-2010 [18146] | that would be ANY instead of ALL. |
Graham 15-Sep-2010 [18147x2] | oh yeah :) |
two characters shorter than Oldes' solution | |
Pekr 15-Sep-2010 [18149x2] | that's programmer's solution, but it does not read as nicely as - if not found? find blk val [append blk val] :-) |
yes, Oldes' version reads even nicely ... | |
Graham 15-Sep-2010 [18151x3] | Who says? |
These are just idioms ... | |
I always have to think twice or more when i come across 'unless :) | |
Pekr 15-Sep-2010 [18154x2] | And I have to think more than twice, when using combination of NOT ALL, NOT ANY :-) |
Can I somehow get a difference of two blocks, with different sizes? Trying to avoid loops, but I will use loop most probably anyway ... blk1 structure: [contract user tarif] blk2 structure: [contract user street town tarif] I know there are functions like intersect/difference, they even have /skip refinement, but those most probably can't treat different record sizes? | |
Oldes 15-Sep-2010 [18156] | Graham, you are not english native speaker? For me it's easy.. I learned that UNLESS = IF NOT and so I use it:) http://www.edufind.com/english/grammar/IF9.cfm |
Pekr 15-Sep-2010 [18157] | I remember UNLESS from extended basic of ZX Spectrum. And I lowed the word itself, dunno why :-) |
Oldes 15-Sep-2010 [18158x2] | Are you looking for this? >> difference [contract user tarif] [contract user street town tarif] == [street town] |
or what result do you expect? | |
Pekr 15-Sep-2010 [18160x2] | no, sorry ... those are just structures, but blocks contain real data, hundreds and thousands of records ... |
but never mind, I will use loop and look-up, no problem, just laziness :-) | |
Graham 15-Sep-2010 [18162] | unless is one more character than if not .. so why use it? |
Ladislav 15-Sep-2010 [18163] | I guess, that what Pekr wants should be implemented carefully, otherwise it may end up being slow... |
Oldes 15-Sep-2010 [18164] | Graham.. that's easy... because UNLESS is faster then IF NOT |
Maxim 15-Sep-2010 [18165] | I really think, again, that 'append-or-insert-only-if-the-item-does-not-exist-already should be a native in R3. its a function MOST of us would use on a frequent basis. it would be very usefull and its very powerfull with a /skip refinement |
Pekr 15-Sep-2010 [18166] | agreed ... |
Ladislav 15-Sep-2010 [18167] | As opposed to that, my opinion is, that it should not be a native, since no significant speedup against a mezzanine would be observable |
Maxim 15-Sep-2010 [18168x2] | we can start with a mezz... but because of the find and then insert/tail and all the possible refinements its needs to handle... overall, it will be faster as a native. |
this function will often be used in loops, and the less functions and REBOL stack usage you have the bigger the speed gains. | |
Anton 15-Sep-2010 [18170x2] | Yes, I agree that it would be useful built in. (Whether it's native or mezz, doesn't really bother me.) |
(Graham, "unless" = 6 chars = "if not") | |
Graham 15-Sep-2010 [18172] | ascii printable characters ... we are talking about saving ink here! |
Maxim 15-Sep-2010 [18173] | yes and LCD fatique too |
Graham 15-Sep-2010 [18174] | No body wants "unless" burnt into their screens! |
Gregg 15-Sep-2010 [18175] | I would like to see a version of REBOL where only the bare minimum natives are implemented and everything else is a mezz. It's possible that REBOL would run many months faster if not preamturely optimized. ;-) |
Henrik 15-Sep-2010 [18176] | I'd be interested in seeing how small an executable could be made, if utterly everything was stripped, even file and network access. |
Gregg 15-Sep-2010 [18177] | That might be interesting, but not terribly useful. |
Henrik 15-Sep-2010 [18178] | well, then you can say that you can fit your software on a floppy and wave a 5.25" floppy in people's faces :-) |
Gregg 15-Sep-2010 [18179x2] | We can do that now. Base is ~270K. |
It's really hard, now, to find media small enough to make an "it fits" claim. :-) I think the smallest memory sticks I have are 64MB. | |
Henrik 15-Sep-2010 [18181] | I wonder if you can fit a script onto those square barcodes. |
Graham 15-Sep-2010 [18182] | sure.... |
older newer | first last |