code: public RValue[] execute(QualifiedName name, Type.Callable signature, CallStack frame, RValue... args) {
  		Decl.Callable lambda = frame.getCallable(name, signature);
  		if (lambda == null) {
  			throw new IllegalArgumentException("no function or method found: " + name + ", " + signature);
  		} else if (lambda.getParameters().size() != args.length) {
  			throw new IllegalArgumentException(
  					"incorrect number of arguments: " + lambda.getName() + ", " + lambda.getType());
  		}
  		// Fourth, construct the stack frame for execution
  		frame = frame.enter(lambda);
  		extractParameters(frame,args,lambda);
  		// Check the precondition
  		if(lambda instanceof Decl.FunctionOrMethod) {
  			Decl.FunctionOrMethod fm = (Decl.FunctionOrMethod) lambda;
  			checkInvariants(frame,fm.getRequires());
  			// check function or method body exists
  			if (fm.getBody() == null) {
  				// FIXME: Add support for native functions or methods. That is,
  				// allow native functions to be implemented and called from the
  				// interpreter.
  				throw new IllegalArgumentException("no function or method body found: " + name + ", " + signature);
  			}
  			// Execute the method or function body
  			executeBlock(fm.getBody(), frame, new FunctionOrMethodScope(fm));
  			// Extra the return values
  			RValue[] returns = packReturns(frame,lambda);
  			// Restore original parameter values
  			extractParameters(frame,args,lambda);
  			// Check the postcondition holds
  			checkInvariants(frame, fm.getEnsures());
  			return returns;
  		} else {
  			// Properties always return true (provided their preconditions hold)
  			return new RValue[]{RValue.True};
  		}
  		//
  	}
docs: Execute a function or method identified by a name and type signature with
  the given arguments, producing a return value or null (if none). If the
  function or method cannot be found, or the number of arguments is
  incorrect then an exception is thrown.
  
  @param nid
  The fully qualified identifier of the function or method
  @param signature
  The exact type signature identifying the method.
  @param args
  The supplied arguments
  @return