iniciar-programa
define-nueva-instruccion recu como
    inicio
     si junto-a-zumbador entonces
         inicio
         coge-zumbador;
         recu;
         deja-zumbador;
         sal-de-instruccion;
         fin;
      si no-junto-a-zumbador entonces
          inicio
           si frente-libre entonces avanza;
            si no-junto-a-zumbador  entonces
                inicio
                gira-izquierda;
                avanza;
                gira-izquierda;
                mientras junto-a-zumbador hacer avanza;
                repetir 2 veces gira-izquierda;
                avanza;
                repetir 2 veces gira-izquierda;
                fin
                sino
                recu;
                avanza;
          fin;
    fin;
define-nueva-instruccion recur como
    inicio
     si junto-a-zumbador entonces
         inicio
         coge-zumbador;
         recur;
         deja-zumbador;
         sal-de-instruccion;
         fin;
        si no-junto-a-zumbador entonces
            inicio
            avanza;
             si no-junto-a-zumbador entonces
                 inicio
                 mientras no-junto-a-zumbador y frente-libre hacer avanza;
                 fin
                 sino
            recur;
           si frente-libre entonces
               inicio
               si orientado-al-oeste entonces repetir 2 veces gira-izquierda;
            avanza;
            fin
            sino
                inicio
                repetir 2 veces gira-izquierda;
                fin;
    fin;
    fin;
define-nueva-instruccion cu(n) como
    inicio
     si junto-a-zumbador entonces
         inicio
          coge-zumbador;
          cu(sucede(n));
          sal-de-instruccion;
         fin;
    repetir 3 veces gira-izquierda;
    avanza;
    repetir n veces deja-zumbador;
    repetir 2 veces gira-izquierda;
    avanza;
    repetir 3 veces gira-izquierda;
    fin;
define-nueva-instruccion cuenta(n) como
    inicio
      si junto-a-zumbador entonces
      inicio
      coge-zumbador;
      cuenta(sucede(n));
      sal-de-instruccion;
      fin;
     gira-izquierda;
     avanza;
     gira-izquierda;
     repetir n veces avanza;
     repetir 2 veces gira-izquierda;
    fin;
define-nueva-instruccion tor(n) como
    inicio
     si junto-a-zumbador entonces
         inicio
         coge-zumbador;
         tor(sucede(n));
         fin;
      avanza;
     coge-zumbador;
     cuenta(0);
     repetir n veces
         inicio
         avanza;
         cu(0);
         fin;
     repetir 2 veces gira-izquierda;
     mientras no-junto-a-zumbador y frente-libre hacer avanza;
     mientras junto-a-zumbador y frente-libre hacer avanza;
     repetir 2 veces gira-izquierda;
     si no-junto-a-zumbador entonces avanza;
     recur;
     gira-izquierda;
     avanza;
     si junto-a-zumbador entonces
         inicio
         repetir 3 veces gira-izquierda;
     mientras junto-a-zumbador hacer avanza;
     repetir 2 veces gira-izquierda;
     avanza;
      fin
      sino
       inicio
       gira-izquierda;
       mientras no-junto-a-zumbador hacer avanza;
       fin;
      recu;
     apagate;
    fin;
    inicia-ejecucion
     mientras no-orientado-al-norte hacer gira-izquierda;
     avanza;
     repetir 3 veces gira-izquierda;
     avanza;
     repetir 2 veces gira-izquierda;
     tor(0);
        apagate;
    termina-ejecucion
finalizar-programa
