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

World: r3wp

[Rebol School] Rebol School

PatrickP61
25-Feb-2009
[2412]
It is not in r3, alpha 35
[unknown: 5]
25-Feb-2009
[2413]
I think it was supposed to be a winexecute type of function.
kib2
25-Feb-2009
[2414]
ok, it's clearer now.
Henrik
25-Feb-2009
[2415]
I think RUN is extensively used in IOS, but I can't be certain.
Geomol
25-Feb-2009
[2416x4]
Try

source does


and you see, DOES simply makes a function. So instead of using DOES, 
you could also have written:

run: func [] [do %script.r]

, but of course DOES is easier and shorter in this case.
And now you're at it, try

source func

and see how similar to DOES it is.
And the last one in this group of function-defining functions, try

? has
source has
I use FUNC, DOES and HAS a lot in my scripts.
PatrickP61
25-Feb-2009
[2420]
Good to know -- Thank you
Geomol
25-Feb-2009
[2421x2]
welcome
A little tutorial on HAS, functions and objects. Let's say, I wanted 
to make a function with a local variable, that works like a counter, 
so 1 is added to it every time, I call my function. This doesn't 
work:

>> f: has [a] [a: 0 a: a + 1]
>> f
== 1
>> f
== 1


because a has to be defined (given a value and by that a datatype), 
before I can use it, and I need to use it, when I add 1. So I can 
use an object:

>> o: make object! [a: 0 f: does [a: a + 1]]
>> o/f
== 1
>> o/f
== 2


But there is a trick to do the same thing with HAS and without making 
an object:

>> f: has [a] [a: [0] a/1: a/1 + 1]
>> f
== 1
>> f
== 2


The thing is, that a is giving a block with zero inside the first 
time. The second time, I call f, a is just the same block (part of 
memory), and the value inside isn't touched (it is 1 now), so it 
works. I can see the block inside my function with:

>> source f
f: func [/local a][a: [2] a/1: a/1 + 1]


and we see, a is a block with 2 inside, because I've called my function 
2 times.
PatrickP61
25-Feb-2009
[2423x2]
If you used a: [0], doesn't this assign a zero to the block for a?
I gotta play around with that
Geomol
25-Feb-2009
[2425x4]
a: [0] simply mean, a become this block with zero inside, if a isn't 
already this block. If a already is this same block, this same part 
of memory, it has no effect. To always make a block with zero inside, 
you need to use COPY or REDUCE.
I was often confused by this, I remember.
When you get used to it, it's pretty smart.
This is only within functions. If you write a: [0] at the console 
prompt, a become a new block with zero inside (you typed a new block, 
so it isn't the same, and it kinda makes sense). :-)
kib2
25-Feb-2009
[2429]
>> print abc
** Script Error: abc has no value
Ok, no problem I understand

>> print <abc>
<abc>
Why does this work ?
Geomol
25-Feb-2009
[2430x2]
abc is seen as a word, and it doens't have a value. <abc> is a tag! 
datatype, like "abc" is a string datatype:
>> type? <abc>
== tag!
and it also is a series, like strings are series:
>> second <abc>
== #"b"
kib2
25-Feb-2009
[2432]
Geomol: I wasn't aware there was a tag type !
Henrik
25-Feb-2009
[2433x2]
kib2:

build-tag [img src dot.gif]
kib2, to see all types:

? datatype!
kib2
25-Feb-2009
[2435]
Really useful : thanks !
Geomol
25-Feb-2009
[2436]
I've forgot, what a symbol! datatype is!?
kib2
25-Feb-2009
[2437]
s there any 'Challenge' channel for submitting a problem ?
Geomol
25-Feb-2009
[2438]
Puzzles
kib2
25-Feb-2009
[2439]
Geomol: ok, thanks.
Geomol
25-Feb-2009
[2440x2]
And answers go to Puzzle Answers
And people expect rewards. ;-)
kib2
25-Feb-2009
[2442x2]
All my gratitude !
I already solved it, but it's not nice (and maybe faulty)
PatrickP61
25-Feb-2009
[2444x5]
Another question:  How do you setup Rebol code to be performed when 
a button is pressed?

Lets say I want a VID to show a list of websites to open to, and 
I set the default to HULU.
I have the following to setup the correct url:
 k-prefix:	[http://www.]
k-suffix:	[.com]
txt-site:	[hulu]
url-site:	to-url ajoin [k-prefix txt-site k-suffix]
OK, that works when I do a browse url-site
But when I put it after a button like this:
    group [

        button "Open"	browse url-site    <-- this code works only if it is 
        done before the VIEW  
        button "Reset" 	reset 
        button "Cancel"	close
I tried to replace the browse url-site with
browse to-url ajoin [k-prefix txt-site k-suffix]   to no avail.

Is there a way to "predefine" the code above the VIEW so that when 
the button is pressed, it will perform the desired task like

button "Open"    format-and-browse-site    <-- where this has been 
set to do the url-site assignment and browse funtions?
I'm guessing this may have something to do with the DO , DOES, REDUCE, 
or other such functions
Henrik
25-Feb-2009
[2449]
Is this R2 or R3?
PatrickP61
25-Feb-2009
[2450]
R3
Henrik
25-Feb-2009
[2451]
button "Open" do [browse url-site]

I think.
PatrickP61
25-Feb-2009
[2452]
Hi Henrik,

This issue is not when to do the browse, that works, but when the 
url-site is properly assigned.
Henrik
25-Feb-2009
[2453]
I'm not sure what you mean.
PatrickP61
25-Feb-2009
[2454x4]
Try this:
REBOL []
; Assignments ------------------------------------
k-prefix:	[http://www.]
k-suffix:	[.com]
txt-site:	[hulu]
url-site:	to-url ajoin [k-prefix txt-site k-suffix]

; Main-procedure ---------------------------------
load-gui
view [
    title "WebSite Selector" 
    text "Please choose a website you would like to open" 
    panel 2 [
        label "URL:" 
        txt-site: field "Hulu"
        label "WebSites:" 
        area 
    ] 
    group [
        button "Open"	browse url-site 
        button "Reset" 	reset 
        button "Cancel"	close 
]	]
When you press Open, it will open the browser to Hulu.com
But I need to modify the code so that I can change the HULU to another 
site like GOOGLE
So, I need to replace button "Open" browse url-site with something 
that will evaluate the url-site AT THAT TIME, rather than what I 
have it defaulted to
Henrik
25-Feb-2009
[2458]
As I said, you need a DO block (I think you missed that). Then you 
create a function to create the URL-SITE url. Then you use that as 
input with BROWSE and that will work.
PatrickP61
25-Feb-2009
[2459]
Thanks Henrik, I'll give it a try
Henrik
25-Feb-2009
[2460]
inspiration:

view [group [f: field] group [button do [probe get-face f]]]
PatrickP61
25-Feb-2009
[2461]
Henrik,  I added the following code:

    eval-url-site:	does [to-url ajoin [k-prefix txt-site k-suffix]]
and then after the button "open" i have:
    button "Open"	browse eval-url-site