iniciar-programa
   define-nueva-instruccion gira-derecha como inicio
     gira-izquierda;
     gira-izquierda;
     gira-izquierda;
   fin;
   define-nueva-instruccion media-vuelta como inicio
     gira-izquierda;
     gira-izquierda;
   fin;
   define-nueva-instruccion as(z) como inicio
        si si-es-cero(z) entonces inicio
          apagate;
        fin;

         si frente-bloqueado entonces inicio
           si orientado-al-oeste entonces inicio
             gira-derecha;
             si frente-libre entonces inicio
               avanza;
               gira-derecha;
               as(precede(z));
             fin;
           fin
           sino inicio
             gira-izquierda;
             si frente-libre entonces inicio
               avanza;
               gira-izquierda;
               as(precede(z));
             fin;
           fin;
         fin;
        si frente-bloqueado y orientado-al-norte entonces inicio
            mientras no-orientado-al-este hacer inicio
              gira-izquierda;
            fin;
            mientras frente-libre hacer inicio
              avanza;
            fin;
            gira-derecha;
            mientras frente-libre hacer inicio
              avanza;
            fin;
            media-vuelta;
            avanza;
            gira-izquierda;
            as(precede(z));
         fin;
        si frente-libre entonces inicio
          avanza;
          as(precede(z));
        fin;
   fin;
   define-nueva-instruccion ru(n) como inicio
     si junto-a-zumbador entonces inicio
       coge-zumbador;
       ru(sucede(n));
       gira-izquierda;
       avanza;
       gira-izquierda;
       as(precede(n));
     fin;
   fin;
   define-nueva-instruccion rd(x) como inicio
     si junto-a-zumbador entonces inicio
       coge-zumbador;
       rd(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(sucede(x)))))))))));
       avanza;
       ru(sucede(x));
       gira-izquierda;
       avanza;
       gira-izquierda;
       as(precede(x));
     fin;
   fin;
    inicia-ejecucion
    mientras no-orientado-al-este hacer inicio
      gira-izquierda;
    fin;
    mientras frente-libre hacer inicio
      avanza;
    fin;
    media-vuelta;
    avanza;
    media-vuelta;
    rd(10);
    avanza;
    ru(1);
        apagate;
    termina-ejecucion
finalizar-programa
