Module("strategy/iteration",[Imports([Import("strategy/conditional")]),Strategies([SDef("repeat",[DefaultVarDec("s")],Call(SVar("try"),[Seq(CallNoArgs(SVar("s")),Call(SVar("repeat"),[CallNoArgs(SVar("s"))]))])),SDef("repeat",[DefaultVarDec("s"),DefaultVarDec("c")],LChoice(Seq(CallNoArgs(SVar("s")),Call(SVar("repeat"),[CallNoArgs(SVar("s")),CallNoArgs(SVar("c"))])),CallNoArgs(SVar("c")))),SDef("repeat1",[DefaultVarDec("s"),DefaultVarDec("c")],Seq(CallNoArgs(SVar("s")),LChoice(Call(SVar("repeat1"),[CallNoArgs(SVar("s")),CallNoArgs(SVar("c"))]),CallNoArgs(SVar("c"))))),SDef("repeat1",[DefaultVarDec("s")],Call(SVar("repeat1"),[CallNoArgs(SVar("s")),Id])),SDef("repeat-until",[DefaultVarDec("s"),DefaultVarDec("c")],Seq(CallNoArgs(SVar("s")),LChoice(CallNoArgs(SVar("c")),Call(SVar("repeat-until"),[CallNoArgs(SVar("s")),CallNoArgs(SVar("c"))])))),SDefT("repeat",[DefaultVarDec("s")],[DefaultVarDec("n")],CondChoice(BA(CallNoArgs(SVar("eq")),NoAnnoList(Tuple([Var("n"),NoAnnoList(Int("0"))]))),Id,Seq(CallNoArgs(SVar("s")),CallT(SVar("repeat"),[CallNoArgs(SVar("s"))],[App(CallNoArgs(SVar("dec")),Var("n"))])))),SDef("while",[DefaultVarDec("c"),DefaultVarDec("s")],Call(SVar("try"),[Seq(CallNoArgs(SVar("c")),Seq(CallNoArgs(SVar("s")),Call(SVar("while"),[CallNoArgs(SVar("c")),CallNoArgs(SVar("s"))])))])),SDef("while-not",[DefaultVarDec("c"),DefaultVarDec("s")],LChoice(CallNoArgs(SVar("c")),Seq(CallNoArgs(SVar("s")),Call(SVar("while-not"),[CallNoArgs(SVar("c")),CallNoArgs(SVar("s"))])))),SDef("do-while",[DefaultVarDec("s"),DefaultVarDec("c")],Seq(CallNoArgs(SVar("s")),Call(SVar("while"),[CallNoArgs(SVar("c")),CallNoArgs(SVar("s"))]))),SDef("for",[DefaultVarDec("i"),DefaultVarDec("c"),DefaultVarDec("s")],Seq(CallNoArgs(SVar("i")),Call(SVar("while-not"),[CallNoArgs(SVar("c")),CallNoArgs(SVar("s"))]))),SDefT("for",[VarDec("s",FunType([ConstType(SortNoArgs("Int")),ConstType(SortVar("a"))],ConstType(SortVar("a"))))],[DefaultVarDec("low"),DefaultVarDec("up")],IfThen(BA(CallNoArgs(SVar("leq")),NoAnnoList(Tuple([Var("low"),Var("up")]))),Seq(CallT(SVar("s"),[],[Var("low")]),CallT(SVar("for"),[CallNoArgs(SVar("s"))],[App(CallNoArgs(SVar("inc")),Var("low")),Var("up")]))))])])
