Task

Demonstrate the different syntax and semantics provided for calling a function.



This may include:

   Calling a function that requires no arguments
   Calling a function with a fixed number of arguments
   Calling a function with optional arguments
   Calling a function with a variable number of arguments
   Calling a function with named arguments
   Using a function in statement context
   Using a function in first-class context within an expression
   Obtaining the return value of a function
   Distinguishing built-in functions and user-defined functions
   Distinguishing subroutines and functions
   Stating whether arguments are passed by value or by reference
   Is partial application possible and how


This task is not about defining functions.




 
    % Calling a function that requires no arguments
       function a=foo(); 
         a=4;
       end;
       x = foo(); 
    % Calling a function with a fixed number of arguments
       function foo(a,b,c); 
         %% function definition;
       end;
       foo(x,y,z); 
    % Calling a function with optional arguments
       function foo(a,b,c); 
	if nargin<2, b=0; end;
	if nargin<3, c=0; end;
         %% function definition;
       end;
       foo(x,y); 
    % Calling a function with a variable number of arguments
       function foo(varargin); 
	  for k=1:length(varargin)
            arg{k} = varargin{k};	
       end;
       foo(x,y); 
    % Calling a function with named arguments
	%% does not apply
    % Using a function in statement context
	%% does not apply
    % Using a function in first-class context within an expression
    % Obtaining the return value of a function
       function [a,b]=foo(); 
         a=4;
         b='result string';
       end;
       [x,y] = foo(); 
    % Distinguishing built-in functions and user-defined functions
	fun = 'foo';	
	if (exist(fun,'builtin'))
 		printf('function %s is a builtin\n');
        elseif (exist(fun,'file'))
 		printf('function %s is user-defined\n');
        elseif (exist(fun,'var'))
 		printf('function %s is a variable\n');
        else 
 		printf('%s is not a function or variable.\n');
        end
    % Distinguishing subroutines and functions
        % there are only scripts and functions, any function declaration starts with the keyword function, otherwise it is a script that runs in the workspace
    % Stating whether arguments are passed by value or by reference 
      % arguments are passed by value, however Matlab has delayed evaluation, such that a copy of large data structures are done only when an element is written to.  
 