[REBOL] Refining functions.

2000-08-22 Thread bhandley

I've finally got paths working on functions. So you can call a refined
function fairly easily. Other may know this, but it was new on me.

In the following example f1 will called a refined version of f2. The nice
thing is how it just calls existing functions. Also, it leaves the argument
passing to the caller.

to-refined-function: function [
"Refines a function with the specified refinements."
'f
refinements [any-block!]
] [p] [
p: to-path head insert/only head copy refinements f
:p
]

f1: function [
x y
] [a-func refines] [
refines: [r2 r3]
a-func: to-refined-function f2 refines
a-func x y
]

f2: func [
x
/r1
/r2 y
/r3
] [
print ["Function f2 was called with parameter" mold x]
if r1 [ print "Refinement r1 was called." ]
if r2 [ print ["Refinement r2 was called with parameter" mold y] ]
if r3 [ print "Refinement r3 was called." ]
]

Now the test.

>> f1 "test" "2nd-param"
Function f2 was called with parameter "test"
Refinement r2 was called with parameter "2nd-param"
Refinement r3 was called.

Brett.

--
>> my-rebol-stuff
== http://www.zipworld.com.au/~bhandley/rebol






[REBOL] recent experimental core builds Re:

2000-08-22 Thread ptretter

Will these enhancements be posted somewhere consolidated or perhaps a new
user guide.  For those of us that bought the book we may want to get a
better more concise view of the changes since alot of us are new to REBOL.

Paul Tretter

-Original Message-
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]
Sent: Tuesday, August 22, 2000 6:52 PM
To: [EMAIL PROTECTED]
Subject: [REBOL] recent experimental core builds





  Brief notes on items found in the latest experimental
  versions:

  Serial port support under windows and unix (others are being
  added as we go along..)

  Tcp ports are now asynchronous.  If you want the "old"
  behavior, you need to do OPEN/wait, ie:

tcp-port:  open/lines/wait tcp://example.com:80

  (Jim said he'll come along and say more about some changes
   to ports...)

  LOAD has a new refinement: /ALL -- this will ignore REBOL
  headers when loading.

  The current and previous experimental versions use the new
  command line argument passing scheme.

  There have been a number of bug fixes here and there as
  well.  See if *your* favorite bug is still in there! :-)

  For lack of any better current documentation on these new
  features, below are our REPs for the new serial ports, the
  change in command line passing, and the new LOAD/all
  refinement.

  I did not make them into attachments. Hope you all don't
  mind.

  -jeff

--


REBOL SERIAL PORT SPECIFICATION

REBOL Enhancement Proposal: REP004
Version: 1.0.1
Author: Jim Goodnow II

===PURPOSE

This specification describes the creation and operation of serial
communication
ports within REBOL.

===CREATION

Serial ports are created in the same manner as other ports within REBOL.
The scheme name for serial ports is "serial:".
The specification of a serial port may include the device number, the
communication
speed, the number of data bits, the parity and number of stop bits.
The specification information can be specified directly by setting the
appropriate fields within the port specification object or by creating a URL
which contains the same information.
Any field not specified will be given a default value.
The default values are:

device: port1
speed:  9600
data bits:  8
parity: none
stop bits:  1

URL's are encoded with the different fields separated by slashes. For
example,

serial://port1/9600/8/none/1

The order of fields is not significant, as the type of field can be
determined
by the content.

Within a port specification, the various parameters are stored in the
following
object fields:

host:   device
speed:  speed
data-bits:  data bits
parity: parity
stop-bits:  stop bits

The portN specification is an indirect reference to the communication
device.
It refers to the Nth device defined in the System/ports/serial block.
This block is initialized by default depending on the system being used and
can be modified in user.r to reflect any local requirements.

For example, on Windows the block might be defined as:

System/ports/serial: [ com1 com2 ]

or if COM1 is being used by the mouse, it might just be:

System/ports/serial: [ com2 ]

On unix-style systems, the block might be defined as:

System/ports/serial: [ ttyS0 ttyS1 ]

or if the first device should correspond to COM2:

System/ports/serial: [ ttyS1 ttyS0 ]

Thus, the ports can be specified in a machine indpendent manner while the
machine specific definition can be controlled using the serial definition
block in System/ports/serial.

===OPERATION

Serial ports are always opened as direct ports in much the same way as
console and network ports.
They may be opened as either /STRING or /BINARY with the default being
/STRING.
They are opened by default as asynchronous, but may be made synchronous
by using the /WAIT refinement.
When operating asynchronously, any attempts to copy data from the port
will return NONE if no data is present. When operating synchronously,
the copy will block until data is available.

Data can be written to the port using the INSERT native. Data can be read
from the port using the PICK, FIRST or COPY natives with the usual
ramifications. As usual with direct ports, the REMOVE, CLEAR, CHANGE and
FIND functions are not supported.

The UPDATE function can be used to change port parameters. For example,
to change the speed after an initial connection has been established, you
could
just do:

ser-port: open serial://9600
ser-port/speed: 2400
update ser-port

Changing the device number or the System/ports/serial and calling UPDATE
will have
no effect. Once the port has been opened with a particular device, the
device
can't be changed.

There are two additional port fields that can't be set with a URL, but can
be set in a port specification block or by manually changing them.
The RTS-CTS field specifies whether hardware handshaking should be used on
the por

[REBOL] context of a function Re:(4)

2000-08-22 Thread rebol

Hi Frank,

>> Re 1: 
>> You can easily determine which words are bound to the context of a function
>> by retrieving the first or third block of a function.
>
>No, thats not possible. Example:
>   >> f: func [a] [a]
>   >> make object! [a: none insert second :f 'a]

You are taking issue with the terminilogy here, not with factual statement.
I tend to think of words and instances of words. 

I tend to say: 
It is simple to determine which words are bound to the context of a
function. We must do a little more work to determine whether an instance of
the word a is bound to the context of the object or to the context of the
function.

You may prefer to use the terms symbol and word or token and word where I
use word and instance. Then the problem could be formulated as:
It is simple to determine which symbols are bound to the context of a
function. We must do a little more to determine whether the word a is bound
to the context of the object or to the context of the function.

Or
It is simple to determine which tokens are bound to the context of a
function. We must do a little more to determine whether the word a is bound
to the context of the object or to the context of the function.

In any event, it is simple to determine which words (symbols or tokens) are
bound to the context of a function, i.e. to generate a block that lists
those words (symbols or tokens).

It takes a little more effort to determine whether a specific instance of a
word (or a word) is bound to a specific context.


>
>There is no way to find out, which of the a's is the one, which is bound
>to functions context now.
>
>> With exception of /local all of these words are bound to the function's
>> context, as soon as the function is constructed.
>
>Local (as a word) is, too.

Factually yes (see Brian's email and my response to him). Conceptually that
is irrelevant, since the purpose of /local is to distinguish between words
that are intended to be used locally, and words that are exposed globally
(i.e. that receive an argument.) I think it would be very bad style to use
/local and words declared after /local for any other purpose. 

>
>> Re 2: 
>> You can easily bind the words in the function's first or third block to the
>> function's context:
>> 
>> >> bind fblock first second :f
>> == [a ref b]
>
>Not possible here:
>
>   f: func [a] []

That is why I introduced the cfunc function.

>
>No word example -> no way to say bind. That s why we need in for
>functions.

I pointed that out in my first email in this thread, where I argued that
the cfunc function would take care of that, by ensuring that there was a
local word self defined, which would always be the first word in the
function's body.

>
>> Re 3:
>> You can now easily determine which values the words are associated with in
>> the function's context:
>
>Same problem as above.

That was solved.

>
>> Conclusion:
>> This approach only works if there is at least one word that is local to the
>> function's context available at a known index in the function's body. In
>> this example it was the word "a" in the first position in the function's
body.
>
>You could overwrite func, but I think, REBOL should support this. Its the
>same as in objects.

I don't think it's one (REBOL should) versus the other (REBOL can support
that now, if you want). I think it's a good idea that REBOL should support
this. At the same time I think that the combination of cfunc,
get-context-block and in-func permit you to already do that now, without
modifying func, even though you could probably modify func, if you want to
take it to that extreme.

>
>To serialize functions like shown above (the one with the two a's), you
>need a way to find out, which of the a's are bound to functions body and
>which not. I would like to use "in" for that, which would be the same
>sollution as for objects.

I presented the in-func function which does just that. 

Regards,



;- Elan [ : - ) ]
author of REBOL: THE OFFICIAL GUIDE
REBOL Press: The Official Source for REBOL Books
http://www.REBOLpress.com
visit me at http://www.TechScribe.com





[REBOL] recent experimental core builds

2000-08-22 Thread jeff




  Brief notes on items found in the latest experimental
  versions:

  Serial port support under windows and unix (others are being
  added as we go along..)

  Tcp ports are now asynchronous.  If you want the "old"
  behavior, you need to do OPEN/wait, ie:

tcp-port:  open/lines/wait tcp://example.com:80

  (Jim said he'll come along and say more about some changes
   to ports...)

  LOAD has a new refinement: /ALL -- this will ignore REBOL
  headers when loading.  

  The current and previous experimental versions use the new
  command line argument passing scheme. 

  There have been a number of bug fixes here and there as
  well.  See if *your* favorite bug is still in there! :-)

  For lack of any better current documentation on these new
  features, below are our REPs for the new serial ports, the
  change in command line passing, and the new LOAD/all
  refinement.

  I did not make them into attachments. Hope you all don't
  mind.

  -jeff

--


REBOL SERIAL PORT SPECIFICATION

REBOL Enhancement Proposal: REP004
Version: 1.0.1
Author: Jim Goodnow II

===PURPOSE

This specification describes the creation and operation of serial communication
ports within REBOL.

===CREATION

Serial ports are created in the same manner as other ports within REBOL.
The scheme name for serial ports is "serial:".
The specification of a serial port may include the device number, the communication
speed, the number of data bits, the parity and number of stop bits.
The specification information can be specified directly by setting the
appropriate fields within the port specification object or by creating a URL
which contains the same information.
Any field not specified will be given a default value.
The default values are:

device: port1
speed:  9600
data bits:  8
parity: none
stop bits:  1

URL's are encoded with the different fields separated by slashes. For example,

serial://port1/9600/8/none/1

The order of fields is not significant, as the type of field can be determined
by the content.

Within a port specification, the various parameters are stored in the following
object fields:

host:   device
speed:  speed
data-bits:  data bits
parity: parity
stop-bits:  stop bits

The portN specification is an indirect reference to the communication device.
It refers to the Nth device defined in the System/ports/serial block.
This block is initialized by default depending on the system being used and
can be modified in user.r to reflect any local requirements.

For example, on Windows the block might be defined as:

System/ports/serial: [ com1 com2 ]

or if COM1 is being used by the mouse, it might just be:

System/ports/serial: [ com2 ]

On unix-style systems, the block might be defined as:

System/ports/serial: [ ttyS0 ttyS1 ]

or if the first device should correspond to COM2:

System/ports/serial: [ ttyS1 ttyS0 ]

Thus, the ports can be specified in a machine indpendent manner while the
machine specific definition can be controlled using the serial definition
block in System/ports/serial.

===OPERATION

Serial ports are always opened as direct ports in much the same way as
console and network ports.
They may be opened as either /STRING or /BINARY with the default being
/STRING.
They are opened by default as asynchronous, but may be made synchronous
by using the /WAIT refinement.
When operating asynchronously, any attempts to copy data from the port
will return NONE if no data is present. When operating synchronously,
the copy will block until data is available.

Data can be written to the port using the INSERT native. Data can be read
from the port using the PICK, FIRST or COPY natives with the usual
ramifications. As usual with direct ports, the REMOVE, CLEAR, CHANGE and
FIND functions are not supported.

The UPDATE function can be used to change port parameters. For example,
to change the speed after an initial connection has been established, you could
just do:

ser-port: open serial://9600
ser-port/speed: 2400
update ser-port

Changing the device number or the System/ports/serial and calling UPDATE will have
no effect. Once the port has been opened with a particular device, the device
can't be changed.

There are two additional port fields that can't be set with a URL, but can
be set in a port specification block or by manually changing them.
The RTS-CTS field specifies whether hardware handshaking should be used on
the port. The default is ON. To change the default, do:

ser-port/rts-cts: off
update ser-port

A timeout value can be specified by modifying the timeout field in the port
structure. The timeout value only applies to serial ports that are opened
with the /wait refinement. When the timeout expires, a serial port timeout
error will be generated. To set the timeout value do:

ser-port/timeout: 10; 10 second t

[REBOL] context of a function Re:(5)

2000-08-22 Thread galtbarber

Brian, /local revelation!  Thanks!

So, you really can see that when invoked,
/local is normally set to none, and 
all "optional switch params" following it,
up to the next /switch if any, are set to none also.

Somehow I never realized that MULTIPLE parameters 
can follow a /switch in the function definition
so I thought that /local was doing something special 
allowing multiples, and that it had to come last.

So, you could use any [parma parmb /local x /morefrickinlocals s t u]
and s t u are locals that are just every bit as good as /local,
and it doesn't even matter if /local is the last switch, right?
The only limit is that all real params have to come 
before the first /switch.

What did this save RT?  Did they get to avoid having 
to use 'use inside the function to create a separate 
context frame with the locals local?  Since they 
had to support the /switches anyway and they had 
a mechanism for that, why not bag the extra 'use 
and stick the locals as "unused" switch parms?
was their thinking, I suppose.

The one change they had to make to accept this 
is that /local unused switch params (local vars) are set to 
none like any other unused switch parms
(since /local itself is not usually invoked)

This is different than simply returning false when queried 
with value? which is how a 'use context works
and how you treat global variables as well.

So then locals became initialized to none rather 
than simply being unset values.

This is kind of amusing:

>> g: func [][probe local ]
>> g
** Script Error: local has no value.
** Where: probe local

>> g: function [][][probe local ]
>> g
none
== none
>>


-Galt

p.s. Andrew, do you think of the 
processor for make object! [ a: blah b: blahblah ]
as another dialect?  That argument seems a teensy 
bit stronger than function-as-dialect, but 
what do I know?

-
>
>Actually, the word local is bound to the function as well.
>/local is just another refinement - it's just treated in a
>special way by the help function. The evaluator doesn't
>treat it in a special way. You can preset locals like this:
>
> >> f: func [a /local b] [add a any [b 1]]
> >> f/local 1 3
>== 4
>
>I don't know about you, but I found this quite amusing. All
>those earnest REBOL programmers thinking /local is special,
>when it's really just a quick, elegant hack.
>
>I love this language :-)
>
>Brian Hawley




[REBOL] Re: Objects

2000-08-22 Thread alex . pini

>- Open Your Mind -<



Quoting from [EMAIL PROTECTED]'s message (20-Aug-00 23:05:13).

p> What benefit is there to make object!.  I have not discovered the usefulness
p> of this yet unless its just to access, thru refinements, the individual
p> values within.  Is there a bigger picture that I am missing?

Encapsulation/protection in a private context?




Alessandro Pini ([EMAIL PROTECTED])

"Such as?.." "I don't know, I'm not a tailor." (Garak & Quark)




[REBOL] Re: Enhancement Request - Range! datatype Re:(7)

2000-08-22 Thread alex . pini

>- Open Your Mind -<



Quoting from [EMAIL PROTECTED]'s message (21-Aug-00 09:58:38).

A>> The "to" has won me.
A> 
A> Me too. :-D
A> 
A> Does anyone know if "to" in languages other than English, means something
A> different from "to" in English? How about in:
A> Italian
A> German
A> Gaelic
A> German
A> Greek
A> Spanish
A> Geek ;-)

As for Italian, "TO" was short for "Torino" (the city of Turin) on car plates until 
some years ago; it is un-commonly used as "take this" when you give something (a dish, 
a slap on the face); finally, it is an interjection of surprise, spelled "to'" or 
"toh", used for example when you see someone you didn't expect to see or you haven't 
seen for a long time.

Yeah, I think 11to149 is OK for Italians, too. :-)))




Alessandro Pini ([EMAIL PROTECTED])

"Use the Force, Luke!" SOCK! "OW! No..." POW! "OFF! Not like thif!!" KICK! "YOW! Ftop 
it!!" BRAMMM! "OOOUCH! Cut it! Now!!!" CRACK!




[REBOL] Re: Enhancement Request - Range! datatype Re:(7)

2000-08-22 Thread alex . pini

>- Open Your Mind -<



Quoting from [EMAIL PROTECTED]'s message (21-Aug-00 16:15:16).

p> I dont think we need a range datatype.  Ranges can be quite complex for
p> different and complex values inviting more and more source manipulation for
p> every new type of value.  Besides it seems evident that REBOL is more than
p> powerful enough will little code to get the results desired.

Very true. But then again we don't need the url! datatype either. (-:




Alessandro Pini ([EMAIL PROTECTED])

(strike)




[REBOL] Re: Enhancement Request - Range! datatype Re:(6)

2000-08-22 Thread alex . pini

>- Open Your Mind -<



Quoting from [EMAIL PROTECTED]'s message (21-Aug-00 09:23:20).

I like the range! idea. My two cents follow...


A>> I like the use of "-" but I feel it will cause confusion if a negative is
A> used in the range.
A>> 
A>> -1--10
A> 
A> Actually, the lesser value should be first. So this should be:
A> 
A>-10--1

I dissent. There could be situations needing inverted ranges, for example scientific 
calculation/simulation.
Now that I mention that, the /delta refinement immediately springs to mind.

>> r1: 6-15.6
== 6-15.6

>> r1/delta
== 9.6

>> r2: 4--100
== 4--100

>> r2/delta
== -104




Alessandro Pini ([EMAIL PROTECTED])

"Fasten your seatbelt. I'm gonna try something." (Solo)




[REBOL] context of a function - Enhancement request Re:(3)

2000-08-22 Thread rebol

Hi Frank,

Aha, you wish to determine the equivalence of the BINDed word to the word
the same word IN the object's body. You then must know the index of the
local word you are comparing to in the object body i.e. your expression
first second second o

you wrote:
>>> o: make object! [sth: [a] a: 9]
>>> same? first second second o bind 'a in o 'self
>== true

The equivalent also works with my in-func:

>> f: cfunc [a] [a]
>> same? second second :f in-func :f 'a 
== true

I trust that the in-func function I proposed in my previous email, together
with cfunc and get-context-block help solve your serialization problem? Or
is there something I have overlooked?

Take Care,


At 02:21 PM 8/22/00 +0200, you wrote:
>
>
>On Mon, 21 Aug 2000 [EMAIL PROTECTED] wrote:
>
>> BTW
>> 
>> >same? first second :f in :f 'a
>> >== true
>> 
>> does not work for objects:
>> 
>> >> o: make object! [a: none b: none]
>> >> second first :o
>> == a
>> >> in :o 'a
>> == a
>> >> same? (second first :o) (in :o 'a)
>> == false
>> 
>> so I wouldn't expect it to work for functions either.
>
>second :f functions body. So I woulc expect, that same? would
>return true. Equivalent to object would be:
>
>>> o: make object! [sth: [a] a: 9]
>>> same? first second second o bind 'a in o 'self
>== true
>
>CU,
>Frank
>
>
>

;- Elan [ : - ) ]
author of REBOL: THE OFFICIAL GUIDE
REBOL Press: The Official Source for REBOL Books
http://www.REBOLpress.com
visit me at http://www.TechScribe.com





[REBOL] context of a function Re:(4)

2000-08-22 Thread fsievert



On Mon, 21 Aug 2000 [EMAIL PROTECTED] wrote:

> Hi Frank,
> 
> I think you are speaking about three distinct, albeit related tasks:
> 
> 1. Determining which words are bound to the context of a function.
> 2. Binding words that are bound in the context of a function to that context.
> 3. Determining which values these words are associated with.

Thats absolutely right.

> Re 1: 
> You can easily determine which words are bound to the context of a function
> by retrieving the first or third block of a function.

No, thats not possible. Example:
   >> f: func [a] [a]
   >> make object! [a: none insert second :f 'a]

There is no way to find out, which of the a's is the one, which is bound
to functions context now.

> With exception of /local all of these words are bound to the function's
> context, as soon as the function is constructed.

Local (as a word) is, too.

> Re 2: 
> You can easily bind the words in the function's first or third block to the
> function's context:
> 
> >> bind fblock first second :f
> == [a ref b]

Not possible here:

   f: func [a] []

No word example -> no way to say bind. That s why we need in for
functions.

> Re 3:
> You can now easily determine which values the words are associated with in
> the function's context:

Same problem as above.

> Conclusion:
> This approach only works if there is at least one word that is local to the
> function's context available at a known index in the function's body. In
> this example it was the word "a" in the first position in the function's body.

You could overwrite func, but I think, REBOL should support this. Its the
same as in objects.

To serialize functions like shown above (the one with the two a's), you
need a way to find out, which of the a's are bound to functions body and
which not. I would like to use "in" for that, which would be the same
sollution as for objects.

Greetings,
Frank




[REBOL] REBOL: The Official Guide review

2000-08-22 Thread danny

Thanks for your support of REBOL: THE OFFICIAL GUIDE. May we ask your
help?

If you purchased it from REBOL Press Online, please send your comments
and review of the book emailed to [EMAIL PROTECTED]

If you purchased it from Amazon, please submit your review at
http://www.amazon.com/exec/obidos/flex-sign-in/104-8209679-6496701?opt=n&page=community/review-sign-in-secure.html&response=tg/book-customer-review-form/-/007212279X&method=GET&cont-page=cm/signed-in-continue&cont-type=add-rev&return-url-code=4&from-url-code=6

If you purchased it from Barnes & Noble Online, please submit your
review at
http://shop.barnesandnoble.com/reviews/reviews.asp?mscssid=EUSDFQLAF0S92LKG00CGND08MXASE3H8&isbn=007212279X&userType=U

If you purchased it from Fatbrain, please submit your review at
http://www1.fatbrain.com/asp/Reviews/ReviewsPost.asp?isbn=007212279X&return=infoPage

Thanks again!

--
Danny Ramsey, Publisher, REBOL Press
The Official Source for REBOL Books
http://www.REBOLpress.com




[REBOL] context of a function Re:(4)

2000-08-22 Thread galtbarber

Elan, excellent demonstration of words/contexts in functions!

Thank you very much!!

-Galt

it's starting to make a lot of sense!


>= Original Message From [EMAIL PROTECTED] =
>Hi Frank,
>
>I think you are speaking about three distinct, albeit related tasks:
>
>1. Determining which words are bound to the context of a function.
>2. Binding words that are bound in the context of a function to that context.
>3. Determining which values these words are associated with.
>
>Re 1:
>You can easily determine which words are bound to the context of a function
>by retrieving the first or third block of a function.
>
>>> f: func [a /ref /local b] [ a ]
>>> first :f
>== [a /ref /local b]
>>> third :f
>== [a /ref /local b]
>
>With exception of /local all of these words are bound to the function's
>context, as soon as the function is constructed.
>
>>> fblock: foreach word first :f [
>  if word <> /local [
>append [] to word! word
>  ]
>]
>== [a ref b]
>
>Re 2:
>You can easily bind the words in the function's first or third block to the
>function's context:
>
>>> bind fblock first second :f
>== [a ref b]
>
>Re 3:
>You can now easily determine which values the words are associated with in
>the function's context:
>
>Becase the function has not been evaluated yet:
>
>>> reduce fblock
>** Script Error: a has no value.
>** Where: a ref b
>
>Once the function is evaluated with some argument:
>
>>> f "this is some arg"
>== "this is some arg"
>
>The new value binding for a is reflected in the fblock
>
>>> reduce fblock
>== ["this is some arg" none none]
>
>Conclusion:
>This approach only works if there is at least one word that is local to the
>function's context available at a known index in the function's body. In
>this example it was the word "a" in the first position in the function's 
body.
>
>>> source f
>f: func [a /ref /local b][a]
>
>My previous proposal to provide an enhanced function constructor was
>intended to provide a uniform word, that is known to be local to the
>function and is guaranteed to be available at a known, predefined location.
>To refresh your memory
>
>cfunc: func [spec body] [
>"Defines a user function with given spec and body and adds the word 
self."
>[catch]
>spec [block!] {Help string (opt) followed by arg words (and opt type
>and string)}
>body [block!] "The body block of the function"
>  either found? find spec /local [
>insert tail spec 'self
>  ][
>insert tail spec [/local self]
>  ]
>  insert body 'self
>  throw-on-error [make function! spec body]
>]
>
>A few convenience functions:
>
>get-context-block: func ['f /local block] [
>  either all [
>  function? get :f
>  (pick second get :f 1) = 'self
> ]
>  [
>fblock: make block! length? first get :f
>foreach word first get :f [
>  if not :word = /local [
>append fblock to word! word
>  ]
>]
>return bind fblock first second get :f
>  ][
>return none
>  ]
>]
>
>Now, given the cfunc
>
>>> cf: cfunc [arg /ref /local local-word] []
>
>I can say:
>
>>> cb: get-context-block f
>== [arg ref local-word self]
>
>The words are already bound to the context, but because the function has
>not been evaluated the have not been assigned any values yet. Therefore
>trying to get their values fails with an error:
>
>>> reduce cb
>** Script Error: arg has no value.
>** Where: arg ref local-word self
>
>However, if the function is evaluated with some argument:
>
>>> cf "this is an argument passed to cf."
>== none
>
>we can determine which values have been associated with the words:
>
>>> reduce cb
>== ["this is an argument passed to cf." none none none]
>
>Hope this helps
>
>At 11:21 AM 8/21/00 +0200, you wrote:
>>On Fri, 18 Aug 2000 [EMAIL PROTECTED] wrote:
>>
>>> Frank Sievert ([EMAIL PROTECTED]) wrote:
>>> >Is there a way to get the words of the context of a function?
>>>
>>> Not directly.
>>>
>>> >Example:
>>> >f: func [a] []
>>> >g: func [a] [print a]
>>> >
>>> >Does anyone know a way to change function f AFTER its definition
>>> >in that way, that it will work like function g?
>>>
>>> f: :g
>>
>>;)
>>
>>> The contexts of functions are not properly persistent. While
>>> REBOL does save a context for each function, it only does so
>>> for the purpose of reuse. The values of the words in that
>>> context are trounced with every call to the function.
>>
>>I don't want to get the context, Or the value of the word. I want to get
>>a word bound to the context of the function. That is a difference.
>>
>>   make-fun: func [/local a] [
>>  f: func [a] [a]
>>  append second :f 'a
>>   ]
>>
>>   >> make-fun
>>   >> probe :f
>>   func [a] [a a]
>>
>>To serialize function "f" I must have a chance to find out, which of
>>the words are bound to function "f"s context and which not.
>>
>>This binding must be persistent. I think it would be a good idea, if
>>make function! would bind the third and first of the function to functions
>>context.
>>
>>Gree

[REBOL] Ordering REBOL: THE OFFICIAL GUIDE from South America

2000-08-22 Thread ralph

To our South American friends: For your convenience in ordering REBOL: THE
OFFICIAL GUIDE, we have added the South American postal rates to the secure
order form at https://abooks.safeserver.com/orders/rog.html. For your
information, surface mail to countries in South America for this book is $14
and Air Mail is only $15. Please enjoy the REBOL revolution and long live
REBOL!

Em português: Para nosso Sul os amigos americanos: Para sua conveniência
ordenando REBOL: O GUIA OFICIAL, nós acrescentamos o Sul taxas postais
americanas ao impresso para encomendas seguro a
https://abooks.safeserver.com/orders/rog.html. Para sua informação, correio
de superfície para países na América do Sul para este livro é $14 e correio
aéreo é só $15. Por favor desfrute a revolução de REBOL e REBOL ao vivo
longo!

En español: A nuestros amigos americanos Sur: Para su conveniencia pidiendo
REBOL: ¡LA GUÍA OFICIAL, nosotros hemos agregado la postal americana Sur
tasa a la forma del orden segura a
https://abooks.safeserver.com/orders/rog.html. Para su información, el
correo de la superficie a los países en América del Sur para este libro es
$14 y correo aéreo es sólo $15. Por favor disfrute la revolución de REBOL y
REBOL vivo largo!

--Ralph Roberts
--
Ralph Roberts, CEO
Alexander Books / Creativity, Inc.
65 Macedonia Road
Alexander, NC 28701
1-800-472-0438 voice & fax tollfree U.S. & Canada
1-828-255-8719 voice & fax overseas
http://abooks.com

!!$5 BLOWOUT!! on STAN VEIT'S HISTORY OF THE PC ...
click here>> http://1-b.net/historypc.html





[REBOL] command/mySQL Re:(4)

2000-08-22 Thread warp

what about valentina ??

http://www.paradigmasoft.com/benchmarks.html

have a nice day

Will




[REBOL] Selma hits 250'000, let's party! Q's Re:(2)

2000-08-22 Thread doug . vos

Also.. do you have to reboot each day (each week) to clean up memory??
I have not had success keeping things running with other scripts that
  use forever [] (or similar continous loops.) 
 

-Original Message-
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]
Sent: Tuesday, August 22, 2000 5:48 AM
To: [EMAIL PROTECTED]
Subject: [REBOL] Selma hits 250'000, let's party! Q's Re:


Way behind as always, I came across this:

- Original Message -
> Anyone happen to notice that little Selma REBOL (the script that runs
this  mailing list) has passed the
> 25 incoming messages mark?  I think she deserves a party...
>
> Good job, Selma!  You're The Babe.
>
> -Carl

How many times did the rebol list come down in these 250,000 messages? I
can remember 2 distinct occassions. How long has it been running without
crashing? And what kind of Rebol version is it, on what OS/Machine spec?

This sounds real impressive...

Regards,
Rachid




[REBOL] Selma hits 250'000, let's party! Q's Re:

2000-08-22 Thread mailinglists

Way behind as always, I came across this:

- Original Message -
> Anyone happen to notice that little Selma REBOL (the script that runs
this  mailing list) has passed the
> 25 incoming messages mark?  I think she deserves a party...
>
> Good job, Selma!  You're The Babe.
>
> -Carl

How many times did the rebol list come down in these 250,000 messages? I
can remember 2 distinct occassions. How long has it been running without
crashing? And what kind of Rebol version is it, on what OS/Machine spec?

This sounds real impressive...

Regards,
Rachid




[REBOL] command/mySQL Re:(3)

2000-08-22 Thread ralph

yep, a lot of us see the need for REBOL >> mySQL >> REBOL.

--Ralph Roberts

>
>Me too.
>
>Is this turning into a petition ? 
>
>I do think that Carl and the Gang (sounds quite catchy doesn't it 
>:-)
>will put this into "Command", so there's probably no need to worry.
>
>Lance.
>
>
>
>>*** REPLY SEPARATOR  ***
>
>8/16/00 10:00:00 AM, [EMAIL PROTECTED] wrote:
>
>>VERY much agree. 
>>
>>I would feel much more comfortable with building serious 
>applications
>>in REBOL given a real MySQL API. 
>>
>>-Ted.
>>
>>*** REPLY SEPARATOR  ***
>>
>>I, and probably more people with me would consider talking 
>directly to 
>>MySQL from rebol as something rather important.
>>While MySQL might, perhaps,  be seen as the 'beer' among the Open
>>Source 
>>Databases (postgresql--> vintage port?)
>>but, as is the case with beer, MySQL is hugely popular and free
>>(available 
>>at least).
>>
>>
>>
>>
>




[REBOL] Going home ... :-)

2000-08-22 Thread Petr . Krenzelok

Hi,

sooo, monday's gone, tuesday's slowly turning into its last third, and
new beauty to "/view"'s still not here :-) I hope it's gonna be out
soon, as it's always nice to play with the new stuff  but right now
... I am going home 

Cheers,
-pekr-




[REBOL] Strange chars in the password Re:

2000-08-22 Thread allen


- Original Message -
From: <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Wednesday, August 23, 2000 12:00 AM
Subject: [REBOL] Strange chars in the password


> HI all,
>
> I need to connect to a FTP server but the password contains strange chars
like #"@" #"\" #"#"
>
> I tried to url-encode the password, but it does not work.
> I'm sure it was already discussed but I cannot find it.
>
> thanx for advice
> oldes
>
>

Hi Oldes,

This allows you to avoid that..

read [
scheme: 'ftp
 user: "user-name"
 pass: "password"
 host: "ftp.securesite.com"
 path: "private/"
 target: "file.dat"
]



So that you don't have to construct that all the time, you could do use the
following code..


;---
config: make object! [pass: "password" user: "username"]

authenticate: func [
{Returns a filled scheme block complete with password}
url [url!] {The url to parse}
/local url-value url-obj
][
url-obj: make net-utils/url-parser []
set url-obj/vars none
url-value: url

parse/all url url-obj/url-rules
;---Return Url data set
compose [
scheme: (to-lit-word url-obj/scheme)
user: (config/user)
pass: (config/pass)
host: (url-obj/host)
path: (url-obj/path)
target: (url-obj/target)
]
]

;e.g usage
; read authenticate ftp://ftp.securesite.com/private/file.dat
; read authenticate http://www.securesite.com/private/file.dat

;--

Cheers,

Allen K






[REBOL] Strange chars in the password

2000-08-22 Thread reboldes

HI all,

I need to connect to a FTP server but the password contains strange chars like #"@" 
#"\" #"#"

I tried to url-encode the password, but it does not work.
I'm sure it was already discussed but I cannot find it.

thanx for advice
oldes




[REBOL] context of a function - Enhancement request Re:(2)

2000-08-22 Thread fsievert



On Mon, 21 Aug 2000 [EMAIL PROTECTED] wrote:

> BTW
> 
> >same? first second :f in :f 'a
> >== true
> 
> does not work for objects:
> 
> >> o: make object! [a: none b: none]
> >> second first :o
> == a
> >> in :o 'a
> == a
> >> same? (second first :o) (in :o 'a)
> == false
> 
> so I wouldn't expect it to work for functions either.

second :f functions body. So I woulc expect, that same? would
return true. Equivalent to object would be:

>> o: make object! [sth: [a] a: 9]
>> same? first second second o bind 'a in o 'self
== true

CU,
Frank




[REBOL] English Syntax Re:

2000-08-22 Thread lance . edusei


But if languages get too dynamic they fracture and cannot be 
understood by others. Standardisation is needed to get cross-
platform compatibility. If anyone knows this surely its computer 
people.

Lance.




>*** REPLY SEPARATOR  ***



8/16/00 10:08:00 AM, [EMAIL PROTECTED] wrote:

>>>The following is a literal string that contains two double 
quotes
>>>
>>>>> print {He said "hi".}
>>>He said "hi".
>>>
>>
>>Well, to be grammatically correct, it should be:
>>
>> >> print {He said "hi."}
>> He said "hi."
>>
>>Sorry, can't resist a correction. As an author, editor, and 
publisher AND
>>programmer, this is one of my pet peeves. Punctuation goes inside 
the
>quote.
>>Syntax counts in English as well as REBOL.
>>
>>--Ralph
>>
>


>*** REPLY SEPARATOR  ***


>The English language has changed its grammar rules in the past, 
based on
>popular usage. This is what makes English (American version, at 
least) a
>"dynamic" language as opposed to something like French which has a 
rigid
>definition which does not change.
>
>IMO the "period inside the quotes" rule will change, based on 
popular
>usage. I think the only people who write according to the current 
rule are
>authors, editors, and english professors.
>
>- Michael Jelinek
>
>
>






[REBOL] command/mySQL Re:(2)

2000-08-22 Thread lance . edusei

Me too.

Is this turning into a petition ? 

I do think that Carl and the Gang (sounds quite catchy doesn't it 
:-)
will put this into "Command", so there's probably no need to worry.

Lance.



>*** REPLY SEPARATOR  ***

8/16/00 10:00:00 AM, [EMAIL PROTECTED] wrote:

>VERY much agree. 
>
>I would feel much more comfortable with building serious 
applications
>in REBOL given a real MySQL API. 
>
>-Ted.
>
>*** REPLY SEPARATOR  ***
>
>I, and probably more people with me would consider talking 
directly to 
>MySQL from rebol as something rather important.
>While MySQL might, perhaps,  be seen as the 'beer' among the Open
>Source 
>Databases (postgresql--> vintage port?)
>but, as is the case with beer, MySQL is hugely popular and free
>(available 
>at least).
>
>
>
>






[REBOL] "REBOL: The Official Guide" Re:

2000-08-22 Thread lance . edusei

8/15/00 9:00:17 PM, [EMAIL PROTECTED] wrote:

Hi Phil,

Finally, a question I can answer, because its completely non-
technical. I strolled into Blackwell's last week and there it was
sitting an the shelf. Surely it can't be that easy, I thought, but 
it was. Its about £27 - not bad considering that its pretty hefty.

Hope that helps :-)

Lance.


>Hi Guys,
>
>Anyone have any idea about what is th easiest (and/or cheapest) 
way to get
>"REBOL: The Official Guide" over here in the UK ??
>
>Cheers PHil







[REBOL] context of a function Re:(5)

2000-08-22 Thread rebol

Hi Brian,


Indeed it is. I didn't investigate that throughly enough. The
implementation is not exactly consistent with its intended use. I wonder
whether that's a good thing ... guess it's not likely to cause any harm.

With respect to the function context binding I think it makes sense to skip
/local. That is consistent with the intended use of /local.
 
>>With exception of /local all of these words are bound to the function's
>>context, as soon as the function is constructed.
>>
>> >> fblock: foreach word first :f [
>>   if word <> /local [
>> append [] to word! word
>>   ]
>>]
>>== [a ref b]
>
>Actually, the word local is bound to the function as well.
>/local is just another refinement - it's just treated in a
>special way by the help function. 
>The evaluator doesn't
>treat it in a special way. You can preset locals like this:
>
> >> f: func [a /local b] [add a any [b 1]]
> >> f/local 1 3
>== 4
>
>I don't know about you, but I found this quite amusing. All
>those earnest REBOL programmers thinking /local is special,
>when it's really just a quick, elegant hack.
>
>I love this language :-)
>
>Brian Hawley
>
>
>

;- Elan [ : - ) ]
author of REBOL: THE OFFICIAL GUIDE
REBOL Press: The Official Source for REBOL Books
http://www.REBOLpress.com
visit me at http://www.TechScribe.com