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

World: r3wp

[Core] Discuss core issues

Chris
17-Jan-2007
[6748x6]
uses: func [args [block!] spec [block!][
    args: context args
    func [options [block!] compose/only [
        options: make (args) options
        do bind (spec) in options 'self
    ]
]
Usage:
>> f: uses [x: y: 1][print y]
>> f []
1
>> f [y: 2]
2
Although arguments for any 'uses based functions must be contained 
in a block, it does allow for optional arguments with preset values.
Any suggestions/bugs?
Hmm, lost a close bracket in a VNC post...
uses: func [args [block!] spec [block!]][
    args: context args
    func [options [block!]] compose/only [
        options: make (args) options
        do bind (spec) in options 'self
    ]
]
Ladislav
17-Jan-2007
[6754]
does anybody know if there is any difference between negate bitset 
and complement bitset ?
Gabriele
17-Jan-2007
[6755]
i think they are the same.
Anton
17-Jan-2007
[6756]
That looks pretty good, Chris. Can you post any examples where you 
used it ?
Volker
17-Jan-2007
[6757]
how  about  locals too? then you have closures. And itdoes not work 
recursively, how about copying the  body when binding?
Anton
17-Jan-2007
[6758]
Locals ? You can have as many locals as you want in the args block.
Volker
17-Jan-2007
[6759]
true, everything is  optional. late here^^
Maxim
17-Jan-2007
[6760]
a part for a little bit of excentricity on your part... do the trailing 
^^ you add on most/all post mean something I have been missing?
Chris
17-Jan-2007
[6761x4]
Anton, I don't have any good samples at the moment -- it's part of 
an unfinished project.  I'll try and come up with some based on the 
usage requirements I have.
I see it mostly as an alterate way of writing functions that would 
otherwise require many refinements.  The benefit being neater presentation.
print-cgi: uses [
    status: 200
    type: 'text/plain
    content: ""
    location: %/
][
    print switch status [
        200 [rejoin ["Content-Type: " type "^/^/" content]]
        302 [join "Status: 302^/Location: " location]
    ]
]

print-cgi [content: "Text"]
print-cgi [type: 'text/html content: "<html>Text</html>"]
print-cgi [status: 302 location: http://www.rebol.net/]
A quickie example, but illustrates the flexibility and readability.
Anton
18-Jan-2007
[6765]
Nice one.
PeterWood
18-Jan-2007
[6766x3]
Ladislav: -16:00 to +15:45 is more than enough according to Wikipedia


Because the earliest and latest time zones are 26 hours apart, any 
given calendar date exists at some point on the globe for 50 hours. 
For example, April 11 begins in time zone UTC+14 at 10:00 UTC April 
10, and ends in time zone UTC-12 at 12:00 UTC April 12.

Full story at http://en.wikipedia.org/wiki/Timezones
And a list of all the current (and a few old ones) at http://en.wikipedia.org/wiki/UTC%2B0
UTC-0:25 was used in Ireland as Dublin Mean Time. In 1916 the time 
was changed to GMT. (Thankfully!)
Ladislav
18-Jan-2007
[6769]
:-D
Oldes
19-Jan-2007
[6770]
I have a question, I have this code:

>> b: "1234str" ri: func[b /local i][i: copy/part b 4 b: skip b 4 
i] probe ri b probe b
1234
1234str
Why the b string is not "str" ?
Cyphre
19-Jan-2007
[6771]
Here is the explanation:
>> a: "1234"
== "1234"
>> b: a
== "1234"
>> b: skip b 2
== "34"
>> a
== "1234"
>> b
== "34"
>>
Ladislav
19-Jan-2007
[6772x3]
...because the index attribute of REBOL series is not volatile.
Cyphre - I doubt this explains it
correction : the index attribute of REBOL any-blocks and any-strings 
is not volatile
Oldes
19-Jan-2007
[6775]
Ok, so how should I write the code, which will eat the 4 chars and 
change the position if I don't want to return the new b from the 
function
Ladislav
19-Jan-2007
[6776]
as I said: you cannot change the index of a series, so the only possibility 
is to share the variable
Cyphre
19-Jan-2007
[6777]
Ladislav, I though the 'b in function 'ri is different from the 'b 
in global context so that's why the index differs.
Ladislav
19-Jan-2007
[6778]
actually the error lies in the fact, that many users think, that 
SKIP changes the index of a series. It actually doesn't:

b: "1234"
index? skip b 2 ; == 3
index? b ; == 1
Oldes
19-Jan-2007
[6779]
but than it's quite useless... I wanted to do a function read-integer 
buffer and etc. and make it universal:( 

I know, I can set buffer as global variable (or in the context) and 
do just read-integer etc.
Ladislav
19-Jan-2007
[6780x3]
you don't have to, the following works too:
ri: func [b [word!] /local i] [i: copy/part get b 4 set b skip get 
b 4 i]
b: "1234str" probe ri 'b
Oldes
19-Jan-2007
[6783]
yes, that's it, thanks:-)
Ladislav
19-Jan-2007
[6784]
sorry, Cyphre, it looks that my explanation is exactly the same as 
yours :-)
Oldes
19-Jan-2007
[6785x2]
anyway, it looks, it would be better to use some version with the 
buffer as variable in the context:(
isn't it too many operations to just get a string?
read-str: func[b [word!] /local s nb][
	s: none
	nb: get b
	error? try [
		i: index? nb
		s: copy/part nb i: (index? find nb #{00}) - i
		set b skip nb (i + 1)
	]
	s
]
PeterWood
19-Jan-2007
[6787x2]
If by '"eat " you mean permanently remove then :

b: remove/part b 4
As a function:

>> b: "1234str"
== "1234str"
>> ri: func[b] [b: remove/part b 4]
>> probe ri b
str
== "str"
>> probe head b
str
Oldes
19-Jan-2007
[6789]
rather not to remove, just skip:-)
Anton
19-Jan-2007
[6790]
Oldes, you don't need to 
	s: none

S is a local and locals are automatically set to NONE for you. (Unless 
you are using a very old rebol.)
Oldes
19-Jan-2007
[6791]
that's true:-)
Anton
19-Jan-2007
[6792x3]
This is how I would do it.
read-str: func[buf [word!] /local result pos][
	if pos: find get buf #{00} [
		result: copy/part get buf pos
		set buf next pos
	]
	result
]
>> my-string: #{11221122003344334400}
== #{11221122003344334400}
>> print mold read-str 'my-string
#{11221122}
>> print mold my-string
#{3344334400}
>> print mold read-str 'my-string
#{33443344}
>> print mold my-string
#{}
Oldes
19-Jan-2007
[6795]
That looks much more better, thanks:-)
Ladislav
20-Jan-2007
[6796]
add 0.0.1 0.0.255 ; == 0.0.255 looks rather surprising to me. any 
opinions?
Volker
20-Jan-2007
[6797]
makes  sense when used with colors