Some of the procedure arguments may have a default value, which is taken when the procedure is invoked with less arguments. The defaulted arguments must be the last ones:
% proc out {{a 1} {b 2} {c 3}} { puts "$a $b $c" } % out 1 2 3 % out 5 5 2 3 % out 5 8 5 8 3