[REBOL] Re: frustrating pairs...

2004-05-07 Thread Carl Read

I think it's best to just treat them as you would a number.  For
instance, when wanting to convert a number to its square-root, this
won't work...

>> a: 9
== 9
>> square-root a
== 3
>> a
== 9

so we use this approach...

>> a: 9
== 9
>> a: square-root a
== 3
>> a
== 3

So a zero-x function would be used like this...

>> zero-x: func [arg][arg/x: 0 arg] 
>> xy: 1x2 
== 1x2
>> xy: zero-x xy
== 0x2
>> xy
== 0x2

Not sure if that helps with your scroll function though.  My head's a
bit wolly at the moment... :-)

On 08-May-04, Alain Goyé wrote:
> ; pairs are not numbers, not series, not objects... too bad !
> ; If we set:

> toto: 5x5

> ; all this (and more...) is wrong!:

> set toto/x 3; toto/x is not a word
> set 'toto/x 3   ; 'toto/x is not a word
> in toto 'x; toto is not an object
> change toto 3; toto is not a series...

> ; So what ?
> ; Well, I am frustrated while trying to touch only x or y of a pair
> in a function. This makes no problem:

> zero-pair: func ['arg] [set arg 0x0]
> zero-pair toto
> toto; OK

> ; But now if I want a function to set the pair's x value to 0, all
> this is wrong again:

> zero-x: func [arg] [arg/x: 0] ; argument goes by reference zero-x:
> func ['arg] [arg/x: 0] ; Cannot use path on word! value zero-x: func
> ['arg] [set arg/x 0] ; toto/x is not a word ; etc.

> ; Of course this for example works:

> zero-x: func ['arg] [
>p: get arg
>set arg as-pair 0 p/y
> ] 

> ; or in that special case:

> zero-x: func ['arg] [set arg 0x1 * get arg]

> ; Is there a simpler way ?

> ; And what if I would like to pass an argument to specify whether to
> affect x or y in the function ? ; this is short nice:

> test-print: func [p [pair!] 'd [word!]] [print p/:d]
> test-print toto x

> ; but this isn't that an ugly "usine à gaz" ("gas factory" in
> French) ? :

> test-change: func [
>'arg [word!]"the pair to affect"
>'d [word!]  "the direction to change: x or y"
>val [integer!]  "the value to set"
> ] [
>p: get arg
>either d = 'x [
>set arg as-pair val p/y
>] [
>set arg as-pair p/x val
>]
> ]
> test-change toto x 10

> ; ...while one would like so much just to write something like :

> arg/:d: val; wrong of course...

> ; did I miss something please ? ; of course the above examples are
> useless, but here is the real one: ; a function to scroll a box's
> pane using a horizontal OR vertical slider:

> scroll: func [bx "box" sf "slider" 'd "direction: x or y" /local
> tmp][
>if none? bx/pane [exit]
>if 0 < tmp: bx/pane/size/:d - bx/size/:d [
>either d = 'x [ bx/pane/offset/x: - tmp * sf/data ] [ ; how
> to improve that ?
>  bx/pane/offset/y: - tmp * sf/data ]
>show bx 
>] 
> ]

> ; Alain.





-- 
Carl Read


-- 
To unsubscribe from this list, just send an email to
[EMAIL PROTECTED] with unsubscribe as the subject.



[REBOL] Re: frustrating pairs...

2004-05-07 Thread Maxim Olivier-Adlhoch

> -Original Message-
> From: Alain Goyé [mailto:[EMAIL PROTECTED]
> Sent: Friday, May 07, 2004 1:13 PM
> To: [EMAIL PROTECTED]
> Subject: [REBOL] frustrating pairs...
> 
> 
> ; pairs are not numbers, not series, not objects... too bad !
> ; If we set:

(that's why they are called pairs  ;-) 

remember that you can use first second /1 and /2 

a: 1x5

a/1
a/x
first a

are all equivalent...

I know this does not answer your question... but since we are talking about pairs... 
its a good time for the reminder...


-MAx
 

-- 
To unsubscribe from this list, just send an email to
[EMAIL PROTECTED] with unsubscribe as the subject.