Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

[REBOL] Rebol/Core User's Guide Re:(4)

From: g:santilli:tiscalinet:it at: 12-Oct-2000 11:29

[joel--neely--fedex--com] wrote:
> I had expected that the argument type check would barf on my little > pathological case, but it didn't!!!!!
It doesn't for the simple reason that:
>> type? :b
== paren!
>> probe :b
(a: negate a) == (a: negate a)
>> type? b
== integer!
>> probe b
-1 == -1 So you're actually passing an integer, not a paren, to IFS.
> so you can imagine my surprise to obtain these results!
[...] You're still passing an integer, here. (You get "zero" because you have written IFS as: ifs: func [[throw] cexp pblk zblk nblk /local cval] [ ... notice PBLK ZBLK NBLK instead of PBLK NBLK ZBLK.)
> Well, it appears that do does NOT distribute over evaluation of its > argument!!!!!
It does, don't worry. :-) Anyway, let me partecipate with my own version:
>> sign: func [num [number!]] [either zero? num [0] [divide num abs num]] >> sign 2
== 1
>> sign -2
== -1
>> sign 0
== 0
>> ifs: func [
[ [throw] [ num [number!] [ if-pos [block!] [ if-zero [block!] [ if-neg [block!] [ ] [ [ do get pick [if-neg if-zero if-pos] add 2 sign num [ ]
>> ifs -2 ["positive"] ["zero"] ["negative"]
== "negative"
>> ifs 0 ["positive"] ["zero"] ["negative"]
== "zero"
>> ifs 2 ["positive"] ["zero"] ["negative"]
== "positive" Seems to work as expected. With B also:
>> ifs b ["positive"] ["zero"] ["negative"]
== "positive"
>> ifs b ["positive"] ["zero"] ["negative"]
== "negative"
>> ifs b ["positive"] ["zero"] ["negative"]
== "positive" Notice that:
>> ifs :b ["positive"] ["zero"] ["negative"]
** Script Error: ifs expected num argument of type: number. ** Where: ifs :b ["positive"] ["zero"] ["negative"] Different, Gabriele. -- Gabriele Santilli <[giesse--writeme--com]> - Amigan - REBOL programmer Amiga Group Italia sez. L'Aquila -- http://www.amyresource.it/AGI/