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

World: r3wp

[Core] Discuss core issues

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
Pavel
8-Feb-2008
[9046x2]
TCP should be functional, but for the curious guy How to put valid 
event into system port (not to mesh with other system events) and 
how to wait for it?
Is it possible to build own class of events in system port? To easy 
ignore other plenty of events.
Oldes
8-Feb-2008
[9048]
I never used system port so I don't know
btiffin
8-Feb-2008
[9049x3]
insert-event-func  ??
But, R2 doesn't allow event insertion though, only monitoring.
afaik
Pavel
8-Feb-2008
[9052]
Does anybody built an event marshaller (in Amiga words broker) for 
interprocess comuncation? Any coments welcome.
Robert
9-Feb-2008
[9053]
IIRC I posted this topic once but there was no real good solution 
to it. I often face the following problem:


My app performs a bunch of calculations based on user input. Now, 
if a user hacks in extremly big numbers, the app crashes because 
of "math overflow".


The hard part is that it's mostly impossible to predict at which 
calculation step this will happen. Making code "division by zero" 
proof is not problem, but how do I make my code "math overflow" proof?
Graham
9-Feb-2008
[9054]
Trapping the error is not good enough?
Gregg
9-Feb-2008
[9055x2]
Pavel, I've done various things for IPC. There is no standard REBOL 
solution I know of though. How best to do it depends on the rest 
of your app, it's design, and what you mean by "event marshaller". 
Simple TCP has worked well for me in the past.
I'm still hoping for ARexx type support built in to REBOL.