World: r3wp
[Core] Discuss core issues
older newer | first last |
Maxim 21-Dec-2006 [6502] | compose strips the outer block. |
Dirk 21-Dec-2006 [6503] | the block from (vals) ? |
Maxim 21-Dec-2006 [6504] | reduce simply evaluates each value in the block and inserts the result |
Dirk 21-Dec-2006 [6505] | i see |
Maxim 21-Dec-2006 [6506] | yep |
Dirk 21-Dec-2006 [6507] | this is not even mentioned in the tutorial i read... do more operators behave like that? |
Maxim 21-Dec-2006 [6508x4] | a common trick is to do this to unify a series as a block! which might also accept a string! : val: compose [(val)] this way, if val was originally a block, it stays that way, but if it was a string, its then inserted within one. Note that the above actually creates a new block... so that the original val (if it was a block) and the new one are not the same |
nope, its a special case for compose... and is one of its differentiating features. | |
also note that compose has a /deep refinement which is very handy | |
ex: a-big-view-block: [ button "press me" [print rejoin ["You have pressed " (val)]]] val: "the button" view layout compose/deep a-big-view-block | |
Dirk 21-Dec-2006 [6512x2] | neat (and important) |
im using rebol on sparc/solaris (for automation). not even perl installed on these boxes .-) | |
Maxim 21-Dec-2006 [6514] | note that in the above, if you didn't compose the block it would still work, since val would be evaluated on the fly... BUT if you have several windows opened at the same time and each new window displayed a different caption, then the above is necessary... otherwise changing the value of val will change ALL windows at the same time :-) which is a common error we all make at some point. |
Dirk 21-Dec-2006 [6515] | so the callback of the button will be bound to the value of 'val' at compose/deep time .. ? ok. |
Maxim 21-Dec-2006 [6516x3] | it will replace the (val) by its value at specific time |
another very good use of compose: time: now my-object: make object! compose [ name: "me" time: (time) ] without the compose, my-object/time will be none | |
actually it will raise an error since time within the context of the object, is not yet set. | |
Dirk 21-Dec-2006 [6519x2] | hm, isn't: my-object: make object! [ name: "me" time: now ] equivalent? |
ah, i see. | |
Maxim 21-Dec-2006 [6521] | yes... obviously, but sometimes, the value you want to set within your object is already used within the code that is populating it... it was just an example :-) |
Dirk 21-Dec-2006 [6522] | yeah, i see the difference. but i think the behaviour is a bit weird |
Maxim 21-Dec-2006 [6523] | why? |
Dirk 21-Dec-2006 [6524x3] | i would expect that time is identical to now after time: now but it's not. |
forget it. time: now my-object: make object! [ name: "me" mtime: time ] behaves the same ... | |
time: time was the problem | |
Maxim 21-Dec-2006 [6527x2] | yes exactly. that's what the compose allows. |
obviously one can say well, just use other words... but... its not always pretty... actually it rarely is. | |
Dirk 21-Dec-2006 [6529] | one last question: a: [ "a" "b" ] how to write/append %to.txt a so that a b <- with whitespace inbetween gets written? |
Maxim 21-Dec-2006 [6530x2] | btw, Ladislav has another more flexible function similar to compose... its called 'BUILD ( http://www.fm.vslib.cz/~ladislav/rebol/) |
write/append %to.txt form a | |
Dirk 21-Dec-2006 [6532] | woot! thx |
Maxim 21-Dec-2006 [6533] | glad I can help :-) |
Dirk 21-Dec-2006 [6534] | should have read strings, not blocks in the reference .... Thanx for you help Maxim. Have to drive home now ... |
Anton 26-Dec-2006 [6535] | Dirk, check out compose/ONLY, eg: >> blk: [1 2 3] compose/only [hello (blk)] == [hello [1 2 3]] |
Anton 28-Dec-2006 [6536x2] | I want to speed up access to a block of objects (unassociated) for a search algorithm. Should I use LIST! or HASH! ? It's a growing list of visited objects, and I'm searching it each time to see if the currently visited object has already been visited. |
It looks like I should use HASH!, as it is designed to make lookup faster. LIST! is designed for faster modifications. | |
Henrik 28-Dec-2006 [6538] | I wonder what the conversion time is between BLOCK!, LIST! and HASH! there must be some kind of penalty there. |
Tomc 29-Dec-2006 [6539] | perhaps the objects could just contain a visited field |
Anton 29-Dec-2006 [6540] | No, I'm searching the system object; I can't modify the objects. |
Tomc 29-Dec-2006 [6541x2] | ah |
what are you keying off of? | |
Anton 29-Dec-2006 [6543] | Search term is a word, but I want to support strings as well. |
Gregg 29-Dec-2006 [6544] | If lookup speed is primary, use hash!, if you're doing a lot of inserts and removes, use list! There is overhead to has items for lookup, but the speedup is enormous on lookups.. |
Maxim 29-Dec-2006 [6545] | also remmember that lists are at their tails after inserts and append... this is usefull, but quite frustrating to discover when you don't know about it. |
Anton 29-Dec-2006 [6546x2] | A quick test looks like using a hash didn't help in my case, the major work must be somewhere else. |
Yes, I am aware of the index position confusion with list!. | |
Geomol 31-Dec-2006 [6548] | Is it possible to turn off: ** Math Error: Math or number overflow ? My gcc compiler here warn me of integer overflow, but I can run the C program, and bits are lost. But that can be ok in some cases, for example to calculate noise. I'm wondering, if I can do that in a fast way with REBOL. Example: 46341 * 46341 will produce an integer overflow. I just want the result with the high order bits lost. |
Robert 31-Dec-2006 [6549] | Good question. I would like to avoid this error as well. A overflow would be OK in most cases. |
Sunanda 31-Dec-2006 [6550] | Youd could bypass it with something like: (1. * 46341 * 46341) // (2 ** 31) |
Robert 31-Dec-2006 [6551] | How do you do this when you have a lot of claculation that use user input? |
older newer | first last |