World: r3wp
[Core] Discuss core issues
older newer | first last |
Graham 16-Mar-2008 [9424] | Perhaps someone can post examples of how the new mezzanines are used ... |
btiffin 16-Mar-2008 [9425] | ALSO; instead of tmp: first series series: next series tmp also first series series: next series No tmp required, ALSO will return the first result of the two expressions BUT in this case why? :) FIRST+; instead of the (now) useless example I just wrote; first+ series ;; return value at current reference and then advance reference No tmp, no next required. All in one expression. Note: SOURCE ALSO it's cool and will make a lot of sense when you see it. |
[unknown: 5] 16-Mar-2008 [9426] | Yeah the mezzanines will be very useful and should be in there just because of the frequency they will be used. |
Graham 17-Mar-2008 [9427x2] | also: func [ {Returns the first value, but also evaluates the second.} value1 [any-type!] value2 [any-type!] ][ get/any 'value1 ] |
so, it's getting the first value .. how is it evaluating the second ? | |
btiffin 17-Mar-2008 [9429] | also 1 2 1 and 2 are evaluated by the normal sequence of getting arguments. This func captures the two results (simply by having them as arguments) and returns the first. Love the REBOL. :) |
Graham 17-Mar-2008 [9430] | ahh... deep magic |
JohanAR 17-Mar-2008 [9431] | I use the following in my program: name: any [ also getname var: yes also getanothername var: no ] if getname fails (returns none) the other function must be called, and a variable set to flag this. Could ofcourse be rewritten, but I wanted to try using also :) |
Geomol 17-Mar-2008 [9432] | ahh... deep magic Made me think of Arthur C. Clarke's 3. law: Any sufficiently advanced technology is indistinguishable from magic. :-) |
Graham 17-Mar-2008 [9433] | Nah .. it's CS Lewis, and Narnia |
[unknown: 5] 21-Mar-2008 [9434x3] | I wish we could do something like this: myfunc: ['notjustanyword [word! [this that]][spec block] |
That way we can only pass this or that to the function otherwise it generates an error | |
Maybe I'll add that to the wish list for R4 - lol. | |
Henrik 22-Mar-2008 [9437] | is there any way to check whether the Windows clock has changed? |
[unknown: 5] 22-Mar-2008 [9438x3] | You can do a call to net time |
Doesn't REBOL read the windows time? | |
Guess need more information by what you mean by changed. | |
Henrik 22-Mar-2008 [9441] | if someone manipulates the clock or if it switches to daylight savings time, etc. |
[unknown: 5] 22-Mar-2008 [9442x5] | Henrik those events are written into the event log on NT platforms. |
Maybe that would help to query the log. | |
You can see those messages by going to start -> run -> "eventvwr.msc" | |
Should record then in the system log section. | |
;Here is a handy skip function: skip+: func [ {Returns a series matching the skip sequence} series [series!] "Series to return skip values from." interval [integer!] "Skip interval" start [integer!] "Series index to start skipping from." /local blk][ blk: copy [] series: at series start while [not tail? series][ if (index? series) = start [insert tail blk first series start: start + interval] series: next series ] series: head series if empty? blk [return none] blk ] | |
Henrik 22-Mar-2008 [9447] | hmm... can you give some examples of the skip+ function? |
[unknown: 5] 22-Mar-2008 [9448x2] | >> blk: [1 2 3 4 5 6 7 8 9 10] == [1 2 3 4 5 6 7 8 9 10] >> skip+ blk 2 1 == [1 3 5 7 9] >> blk: ["paul" "john" "ringo" "george" "michael" "ted" "hans" "linda" "sue"] == ["paul" "john" "ringo" "george" "michael" "ted" "hans" "linda" "sue"] >> skip+ blk 3 1 == ["paul" "george" "hans"] |
It allows you to start at any index position in a series and begin returning values that match the skip interval. | |
Geomol 22-Mar-2008 [9450x2] | You can use EXTRACT for that: >> extract blk 3 == ["paul" "george" "hans"] >> extract next blk 3 == ["john" "michael" "linda"] |
REBOL has so many cool functions already build in. Look here for them sorted by area of use: http://www.rebol.com/docs/dictionary.html | |
Henrik 22-Mar-2008 [9452] | Geomol, it reminds me that R3's help function must provide hints to relevant functions. I've fallen into this trap many times. |
[unknown: 5] 22-Mar-2008 [9453x6] | LOL geomol, I was looking all over for a function in REBOL that did that. |
My skip function is a bit more efficient though. Maybe we should replace extract with it: | |
>> a == [1 2 3 4 5 6 7 8 9 10] >> stats/evals/clear == [2 1 2] >> b: extract/index a 2 1 == [1 3 5 7 9] >> stats/evals == [218 107 33] >> stats/evals/clear == [219 108 34] >> b: skip+ a 2 1 == [1 3 5 7 9] >> stats/evals == [187 90 39] | |
Looks like extract is also a bit buggy | |
>> a == [1 2 3 4 5 6 7 8 9 10] >> b: extract a 2 22 == 22 >> b: extract/index a 2 22 == [none none none none none] | |
But for what I'm doing I think extract will be fine since it is built in. Will save me a few lines of code in my script. | |
Henrik 22-Mar-2008 [9459] | I don't see a bug in any of those entries. |
[unknown: 5] 22-Mar-2008 [9460] | Probably not a bug but does we really want none to be returned? |
Henrik 22-Mar-2008 [9461] | yes, that's on purpose. in 2.7.6 you can define a different default value to be returned. |
[unknown: 5] 22-Mar-2008 [9462] | So how is it not a bug if you tell it to start at index 22 and there is no index 22 and it is returning none? |
Henrik 22-Mar-2008 [9463x4] | >> a/22 |
sorry | |
>> a/22 == none | |
in 2.7.6: >> b: extract a 2 == [1 3 5 7 9] >> b: extract/index a 2 22 == [none none none none none] >> b: extract/index/default a 2 22 'potato == [potato potato potato potato potato] | |
[unknown: 5] 22-Mar-2008 [9467] | I know that a/22 is none but shouldn' t it instead react like other REBOL entries in this regard and say "out of range"? |
Henrik 22-Mar-2008 [9468] | if it did that, we'd have hundreds of cases where we'd need extra error handling. in fact, R3 produces more cases where it returns none, than R2 does. it's just simpler. |
[unknown: 5] 22-Mar-2008 [9469] | Not a fan of how it returns values. |
Henrik 22-Mar-2008 [9470x2] | the error checking you could do, would be to check for the range first and then pick your value, if the index is in range. |
well, you'd have to write a lot more code, if it returned an error. | |
[unknown: 5] 22-Mar-2008 [9472x2] | I don't have to do none of that with skip+ |
>> a == [1 2 3 4 5 6 7 8 9 10] >> skip+ a 2 22 == none | |
older newer | first last |