Hi Gerard,

I once use this little trick for handling a variable number of argument:

f: func [a [integer!] b [unset! integer!]][either value? 'b [a + b][a]]

>> f 1 2
== 3
>> f 1
== 1

Please remark that the type of the argument must be explicitely declared, otherwise:

f: func [a b][either value? 'b [a + b][a]]

>> f 5 6
== 11
>> f 8
** Script Error: f is missing its b argument
** Near: f 8

Could this be useful to you ?

gretz,

==christophe

> -----Original Message-----
> From: Gerard Cote [mailto:[EMAIL PROTECTED]
> Sent: lundi 5 avril 2004 23:36
> To: [EMAIL PROTECTED]
> Subject: [REBOL] [Function] with [Variable number of args]
> 
> 
> 
> Hi List,
> 
> while relaxing for a couple of days, I reread one of my old 
> APL books and wanted to try implement some useful mechanisms 
> for vector
> operations (a vector being a one dimensional array) using 
> simple REBOL scripts. some of these mechanisms are somewhat 
> similar to the
> higher-level functions Ladislav and other advanced REBOLers 
> have written in the past. I'll give you 2 simple examples below since
> this is where I found some questions about the way REBOL can 
> or not manage functions with a variable number of arguments.
> 
> One of the mechanisms I wanted to emulate is simply an 
> extension of the maths operators to take into account two 
> arguments that are
> not only single values but that also could be a block of 
> values, like in the use of my ++ function :
> 
> >>++ 1 2
> == 3
> 
> >>++ 1 [1 2 3 4 5]
> ==[2 3 4 5 6]
> 
> >>++ [6 7 8 9 10] 1
> ==[7 8 9 10 11]
> 
> >>++ [1 2 3] [4 5 6]
> ==[5 7 9]
> 
> All of this works well for now.
> 
> The problem is that I also wanted to include in the same 
> function another useful behaviour generally known as +/ in 
> APL, like in
> this example :
> 
> >>++ [1 2 3 4]        ; 1 + 2 + 3 + 4 == 10
> ==10
> 
> But I never was able to say REBOL to use only one argument - 
> leaving the second one optional when necessary - and to not take into
> account of the second one defined like this :
> ++: function [arg1 arg2][
>         ...
> 
> Can someone tell me if there is one simple way to do this 
> with REBOL or if I have to define another independant 
> function to do this.
> For now what I can do is check if the second arg is an empty 
> block or none but this is not as elegant as it could be.
> 
> I must admit that I didn't begin to look for an answer by 
> myself yet but I will do this tonight. I found this could be 
> interesting
> for other newbies too to know more about the subject.
> 
> Thanks,
> Gerard
> 
> -- 
> To unsubscribe from this list, just send an email to
> [EMAIL PROTECTED] with unsubscribe as the subject.
> 
> 

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

Reply via email to