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

[REBOL] Re: variable number of arguments

From: lmecir:mbox:vol:cz at: 26-Nov-2000 12:09

Hi,
> Ladislav Mecir wrote: > > Andrew Martin wrote: > > > Graham Chiu wrote: > > > > > Can a function have a variable number of arguments? > > > > No. But you can simulate it, by using 'any-type! function specifiers
and
> passing unset! as arguments. Better is to use refinements. > > > Yes, a function can have a variable number of arguments. Do is such a > function, as e.g. in: > >
take-n: func [n /local spec] [ spec: copy [] for i 1 n 1 [ append spec to word! append copy "a" to string! i ] func spec reduce [:reduce append reduce [to lit-word! append copy "take" to string! n] spec] ]
> > do take-n 4 1 2 3 4 > > == [take4 1 2 3 4] > > > > , where Do took 5 arguments. > > Actually, 'do took only one argument, the value returned from 'take-n
(which
> had the argument "4"), which happened to be a function that is evaluated
by
> 'do that could take the next four arguments "1 2 3 4". >
[snip] Think for the second time, please. Let's make sure, how many arguments we have to take: make-sure1: func [ { This function takes just one argument } f ] [ ; evaluate the argument f ] make-sure1 take-n 4 1 2 3 4 The result: ** Script Error: f is missing its a1 argument ** Where: make-sure1 ** Near: f make-sure2: func [ { This function takes five arguments } f a2 a3 a4 a5 ] [ ; evaluate f f a2 a3 a4 a5 ] make-sure2 take-n 4 1 2 3 4 The result: == [take4 1 2 3 4] Conclusion: Do had to take five arguments to yield the correct result. Best regards Ladislav