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

World: r3wp

[Core] Discuss core issues

[unknown: 5]
13-Jan-2008
[8996]
but could B be used if needed
Henrik
13-Jan-2008
[8997x2]
inside the function?
I haven't tested, but perhaps you can test for 'value?
[unknown: 5]
13-Jan-2008
[8999x3]
yes
that might work Henrick, I'm trying a few things now.
Yep that will work.  Thanks Henrik
Henrik
13-Jan-2008
[9002]
no problem
amacleod
13-Jan-2008
[9003]
Thanks, Anton. I think it is just what I'm looking for.
Anton
13-Jan-2008
[9004]
no worries.
Oldes
14-Jan-2008
[9005x2]
Is there any script which can convert for example -1.8E-5 to -0.000018 
?
formDecimal: func[
	number [decimal!]
	digits [integer!]
	/local negative? p result
][
	if digits <= 0 [return form to-integer 0.5 + number]
	if negative?: number < 0 [number: - number]
	p: power 10 digits
	result: form to-integer number * p + 0.5
	if number < 1 [
		insert/dup result "0" (1 + digits - length? result)
	]
	if negative? [ insert result "-" ]
	head insert skip tail result negate digits #"."
]
Graham
14-Jan-2008
[9007]
should have a native that does this
Gregg
15-Jan-2008
[9008]
There was an old one from Eric Long, that might be in REBOL.org. 
I don't think I ever tackled that with my FORMAT function.
Gabriele
16-Jan-2008
[9009]
i have one i've used for a long time too... also adds ' every three 
digits... i added support for scientific notation recently (because 
form always gives sci notation on Wine)
Henrik
24-Jan-2008
[9010]
how is it again that I can rebind a function to a different context?
Anton
25-Jan-2008
[9011]
>> c1: context [var: "orig" f: func [][print var]]
>> c1/f
orig
>> c2: context [var: "hello"]
>> bind second get in c1 'f c2
== [print var]
>> c1/f
hello
Henrik
25-Jan-2008
[9012x4]
it seems not to work, if the function starts out as global
>> a: does [print b] 
>> c: make object! [b: 4]
>> a

** Script Error: b has no value
** Where: a
** Near: print b
>> bind second :a 'c

== [print b]
>> a
** Script Error: b has no value
** Where: a

** Near: print b
solved with:

bind second :a c
thanks, Anton
[unknown: 5]
25-Jan-2008
[9016]
Can someone explain the reason why bind would work but bind/copy 
wouldn't?
BrianH
25-Jan-2008
[9017x2]
You don't rebind the function, you rebind its code block - not quite 
the same thing. Bind/copy wouldn't work because it creates a copy 
rather than rebinding the original block. You can alter the contents 
of the code block of a (R2) function, but you can't change the function's 
reference to that block to point to another block.
If you can create a new function, you can use bind/copy. It is occasionally 
possible to arrange your algorithm so that it is possible to replace 
a function without worrying about aliased references, but usually 
not.
[unknown: 5]
25-Jan-2008
[9019]
yeah I understand that but why would bind/copy ever fail where bind 
itself worked?
Anton
25-Jan-2008
[9020]
bind/copy goes deep.
[unknown: 5]
25-Jan-2008
[9021x2]
yeah
shouldn't it still work regardless
Anton
25-Jan-2008
[9023]
I think I remember, bind/copy is just a short equivalent to bind 
copy/deep.
[unknown: 5]
25-Jan-2008
[9024]
but if bind works and then you try the same code with bind/copy should 
it cause an error?
Anton
25-Jan-2008
[9025]
Just used when you don't want to modify the bindings of the original.
[unknown: 5]
25-Jan-2008
[9026]
yeah that is the way I understand it also which is why it suprised 
me in my code that bind works but when I simply add bind/copy in 
then it breaks the code.
Anton
25-Jan-2008
[9027x2]
Well, probably no error straight after binding, but if some other 
code rebinds it perhaps causes error later.
It depends on the situation. What is the situation you are in ?
[unknown: 5]
25-Jan-2008
[9029]
yeah that might be it
btiffin
30-Jan-2008
[9030]
What is the deal with mod and modulo?   What should   mod 10 3   
 mod 10 -3    mod -10 3   mod -10 -3   return?  Not what REBOL returns 
... what's the math of it supposed to be.


I accept  1 and 2, but -4 (mod -10 -3) freaks me out.  I don't use 
mod very often (and never with negative divisors or dividends), but 
it came up in a conversation with some student programmers (and I'm 
trying to convince them to give REBOL a try).
Anton
31-Jan-2008
[9031x2]
http://en.wikipedia.org/wiki/Modulo_operation
There is no single definition.
Tomc
31-Jan-2008
[9033]
I do not have a mental model of what a modulo < 2 could be never 
mind less than zero.  until is has an accepted definition in mathematics 
programming languages ought steer clear
btiffin
31-Jan-2008
[9034]
Thanks.  I just needed to source mod to see where it was coming from. 
 REBOL's mod does make mathematical sense, just needed to get my 
head round it.    Things like  mod -10 -11 being -21.


And Tom, yep.  :)  But I think I've grown to like REBOL's definition. 
  And I would expect anyone that needs negative divisors for a modulo 
calculation will understand the implications.
Oldes
31-Jan-2008
[9035x3]
>> ?? mod
mod: func [
    "Compute a nonnegative remainder of A divided by B."
    [catch]
    a [number! money! time!]
    b [number! money! time!] "Must be nonzero."
    /local r
][
    all [negative? r: a // b r: r + b]
    a: abs a
    either all [a + r = (a + b) positive? r + r - b] [r - b] [r]
]
>> ?? modulo
modulo: func [

    {Wrapper for MOD that handles errors like REMAINDER. Negligible
^-^-values (compared to A and B) are rounded to zero.}
    [catch]
    a [number! money! time!]
    b [number! money! time!] "Absolute value will be used"
    /local r
][
    throw-on-error [
        any [number? a b: make a b]
        r: mod a abs b
        either any [a - r = a r + b = b] [make r 0] [r]
    ]
]
? //
USAGE:
    value1 // value2

DESCRIPTION:
     Returns the remainder of first value divided by second.
     // is an op value.

ARGUMENTS:
     value1 -- (Type: number pair char money time tuple)
     value2 -- (Type: number pair char money time tuple)

so:
-10 // -3 == -1
the // is same like the mod(a, n) = a - n * floor(a / n) (from the 
Wiki page above)
Gregg
31-Jan-2008
[9038]
Ladislav spent a lot of time, and much discussion was had, on those 
functions.
btiffin
31-Jan-2008
[9039]
Yeah, I've grown to like the REBOL definitions since yesterday.  
:)
Pavel
8-Feb-2008
[9040x3]
To Oldes, any way to create general event (not gui) port? And create 
on demand events (fire and receive). Can such a port be global accesible 
to independent rebol processes? Can some scheme solve this?
Must this be a TCP port?
Or can it be memory to memory somehow?
Oldes
8-Feb-2008
[9043x2]
I don't think it can be memory to memory between independent processes.
Maybe the system port could be used, but I'm not sure.
Henrik
8-Feb-2008
[9045]
the easiest way is via TCP or a file, I think