[REBOL] Re: variable number of arguments
From: lmecir:mbox:vol:cz at: 26-Nov-2000 3:08
Hi,
> Graham 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.
>
> Andrew Martin
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. I call such functions VNA functions. The
problem is, that there is currently no possibility to define VNA functions
in Rebol, which is a pity, because it would allow us to create some nice
dialects in Rebol (a message-passing dialect me and Elan tried to define
some time ago can serve as an example).
Fortunately, there is a way, how to emulate that. A function taking a block
as its argument can behave as if the elements of the block were the
arguments. As an example you can have a look at Any and All functions, or a
lot of other nice examples.
Regards
Ladislav