octave: Variable-length Argument Lists

 
 11.4 Variable-length Argument Lists
 ===================================
 
 Sometimes the number of input arguments is not known when the function
 is defined.  As an example think of a function that returns the smallest
 of all its input arguments.  For example:
 
      a = smallest (1, 2, 3);
      b = smallest (1, 2, 3, 4);
 
 In this example both ‘a’ and ‘b’ would be 1.  One way to write the
 ‘smallest’ function is
 
      function val = smallest (arg1, arg2, arg3, arg4, arg5)
        BODY
      endfunction
 
 and then use the value of ‘nargin’ to determine which of the input
 arguments should be considered.  The problem with this approach is that
 it can only handle a limited number of input arguments.
 
    If the special parameter name ‘varargin’ appears at the end of a
 function parameter list it indicates that the function takes a variable
 number of input arguments.  Using ‘varargin’ the function looks like
 this
 
      function val = smallest (varargin)
        BODY
      endfunction
 
 In the function body the input arguments can be accessed through the
 variable ‘varargin’.  This variable is a cell array containing all the
 input arguments.  SeeCell Arrays, for details on working with cell
 arrays.  The ‘smallest’ function can now be defined like this
 
      function val = smallest (varargin)
        val = min ([varargin{:}]);
      endfunction
 
 This implementation handles any number of input arguments, but it’s also
 a very simple solution to the problem.
 
    A slightly more complex example of ‘varargin’ is a function
 ‘print_arguments’ that prints all input arguments.  Such a function can
 be defined like this
 
      function print_arguments (varargin)
        for i = 1:length (varargin)
          printf ("Input argument %d: ", i);
          disp (varargin{i});
        endfor
      endfunction
 
 This function produces output like this
 
      print_arguments (1, "two", 3);
           ⊣ Input argument 1:  1
           ⊣ Input argument 2: two
           ⊣ Input argument 3:  3
 
  -- : [REG, PROP] = parseparams (PARAMS)
  -- : [REG, VAR1, ...] = parseparams (PARAMS, NAME1, DEFAULT1, ...)
      Return in REG the cell elements of PARAM up to the first string
      element and in PROP all remaining elements beginning with the first
      string element.
 
      For example:
 
           [reg, prop] = parseparams ({1, 2, "linewidth", 10})
           reg =
           {
             [1,1] = 1
             [1,2] = 2
           }
           prop =
           {
             [1,1] = linewidth
             [1,2] = 10
           }
 
      The parseparams function may be used to separate regular numeric
      arguments from additional arguments given as property/value pairs
      of the VARARGIN cell array.
 
      In the second form of the call, available options are specified
      directly with their default values given as name-value pairs.  If
      PARAMS do not form name-value pairs, or if an option occurs that
      does not match any of the available options, an error occurs.
 
      When called from an m-file function, the error is prefixed with the
      name of the caller function.
 
      The matching of options is case-insensitive.
 
DONTPRINTYET       See also: Seevarargin XREFvarargin, *noteinputParser:
DONTPRINTYET       See also: Seevarargin XREFvarargin, SeeinputParser

      XREFinputParser.