SetAttributes[{Step, stepIterative, stepTrace}, HoldAllComplete];
Options[Step] = {"Attributes" -> False};
Default[Step, 2] = HoldComplete;
Step[code_, (wrapper : Except[_?OptionQ]) // Optional,
OptionsPattern[]] :=
stepTrace[code, wrapper] /; OptionValue["Attributes"];
Step[code_, wrapper : Except[_?OptionQ] // Optional,
OptionsPattern[]] :=
stepIterative[code, wrapper];
(* MrWizard *) (* Ojo que así como está aplica el wrapper cuando no \
hubo iteraciones *)
stepTrace[expr_, wrapper_] :=