Volker Nitsch napsal(a):

>On 9/3/05, Ladislav Mecir <[EMAIL PROTECTED]> wrote:
>  
>
>>=20
>>I was curious what is a more expected precedence for unbiased people,
>>and it looks, that the expression:
>>=20
>>    abs -4 + -5
>>=20
>>is rather expected to yield -1 than 9.
>>=20
>>Moreover, the evaluation order in Rebol can be called exception-based,
>>because in case:
>>=20
>>    abs -4 + -5
>>=20
>>the operator + takes precedence, while in case
>>=20
>>    -4 + abs -5
>>=20
>>the function ABS is evaluated as first. These aren't all the evaluation
>>exceptions in Rebol, the quantity of evaluation exceptions is quite high.
>>=20
>>    
>>
>
>To me the number of exceptions is quite low:
>Rebol looks at the next two values at the same time.
>If you have a value followed by an operator,
>it is evaluated first. If it is followed by another value+operator,
>these are evaluated left to right.
>Else it uses the next value, as we are used too.
>
>  abs -4 + -5
>rebol sees "abs -4". No op, so takes "abs".
>Then "-4 +". Operator.
>Now it introduces a paren (so to speak).
>That gives "abs ( -4 +"
>First thing is closing that paren with the -5:
> "abs ( -4 + (-5) )"
>and that gives 9.
>
>   -4 + abs -5
>rebol sees "-4 +". introducing paren:
>"(-4 +". The right side has no more operators, so rebol sees only "abs".=20
>Normal evaluation. "Abs" needs one arg.=20
>There is "-5 end-of-block". No operator.
>So "abs -5". That is "joined":
>"( -4 + (abs - 5) )"
>
>As a result, an operator can "steal" an argument from the left
>function. Thus with
>  abs -4 + -5
>the "+" can steal the -4. with
>  -4 + abs -5
>there is nothing which can be stolen from.
>
>That is why rebol-conditions sometimes looks "reversed",
>  if "volker" =3D ask "your name?" [..]
>instead of
>  if ask "your name?" =3D "volker" [..]
>The "=3D" cant steal in the second case.=20
>Thus we need to write
>  if (ask "your name?") =3D "volker" [..]
>and since we are lazy we save that paren. :)
>
>  
>
>>-L
>>=20
>>--
>>To unsubscribe from the list, just send an email to
>>lists at rebol.com with unsubscribe as the subject.
>>=20
>>=20
>>    
>>
>
>
>--=20
>-Volker
>
>"Any problem in computer science can be solved with another layer of
>indirection. But that usually will create another problem." David
>Wheeler
>  
>
As I said, there *are* exceptions:

    abc: func [:x] [abs x]
    abc -4 + -5 ; == -1

-L
-- 
To unsubscribe from the list, just send an email to 
lists at rebol.com with unsubscribe as the subject.

Reply via email to