r3wp [groups: 83 posts: 189283]
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r3wp

[Core] Discuss core issues

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