beginning_of_program define_new_instruction turnright as iterate 3 times turnleft; define_new_instruction mover as {if front_is_clear then {move;} else busca_puerta;} define_new_instruction zig_zag as {if front_is_clear then {turnleft; mover; turnright;} {if front_is_clear then mover;} {if front_is_clear then {turnright; mover; turnleft; mover; zig_zag;}} else turnleft; define_new_instruction busca_puerta as {if right_is_clear then {turnright; move; busca_puerta;} else {if front_is_clear then {move; busca_puerta;} else {turnleft; busca_puerta;}}} beginning_of_execution busca_puerta; busca_puerta; turnoff; end_of_execution end_of_program