[REBOL] Refining functions.
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:
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)
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
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)
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
>- 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)
>- 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)
>- 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)
>- 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)
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)
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
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)
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
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)
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)
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:
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)
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 ... :-)
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:
- 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
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)
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:
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)
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:
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)
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