functions with 'named' arguments

Dupuis Pascal.Dupuis at worldonline.be
Thu Apr 3 13:52:21 CDT 2008




John W. Eaton wrote:
> 
> 
> 
> Does R provide the equivalent of a nargin function?  If not, maybe
> this is the reason?  If it does, then how does it work, and would it
> be compatible with what Octave and Matlab currently do?
> 
> 

Hello John,
sorry for the delay -- a few days of vacation.

I analysed R internals, more specifically the function src/bind.c which
provides the implementation of the c(...) function, a general-purpose
constructor for vectors. The only input argument is the "dotdotdot"
operator, and it returns a vector. Basically similar to "[". 

It works as follows: the internal engine receives a list built the Lipsy
way: a set of nodes, each node made of a header and data. The header
contains:
- a type indicator (float, complex, expression (formula), closure,
environment, ...)
- an optional tag (the intended variable name, the left part of the =
operator)
- pointers to previous and next element
The data is an union of the various types

This list ends with a special node serving as end-of-list marker. The
iteration is quite simple, process the actual node, then its CDR, until the
special marker is encountered. 

With this approach, there is no (or better: I didn't find evidence of)
nargin function, because the list is just processed linearly. The drawback
is that the list length is not known in advance.

As I understand,  with a function like
function RP(x=r*cos(theta), y=r*sin(theta), r=sqrt(x*x+y*y), theta=
atan2(x,y)) {
  return c(x, y, r, theta)
}

Examples of this function calls:
- RP(3, 5) : there are data for two arguments (positional matching), then r
and theta are evaluated.
- RP(r = 1, theta= pi/3) : r and theta are initialised from the elements
with corresponding tags, then x and y are evaluated. 
What is called 'lazy loading' is just delayed evaluation of expressions,
permitting a very concise approach in this case at the level of definition
and default values for the arguments.

Regards

Pascal  

-- 
View this message in context: http://www.nabble.com/functions-with-%27named%27-arguments-tp16095584p16468634.html
Sent from the Octave - Maintainers mailing list archive at Nabble.com.



More information about the Octave-maintainers mailing list