$c+
module test17_1 {factorial
 -- test of parameters and recursion in  GCL }
private
 integer inArg, result;
 
 tuple [procedure nFac (value integer n; reference integer result)] fac;
 
 	procedure fac@nFac 
 	begin
		if 	n <= 0 -> 
				result := 1;
		[] 	n > 0 -> 
				fac!nFac(n-1, result); 
				result :=  n * result;
		fi;
	end;
	
begin
read inArg; { use 4}
fac!nFac(inArg, result);
write inArg, ' factorial is ', result;
end.  {output: 24}
