@Operadores y funciones
:no
%    no nmero

         devuelve el valor 1 si "nmero" es distinto de cero, y 0 si
         es cero.

%    Ej: b60 := no b36;


         Ver tambin: ~y~  ~o~  ~Expresiones~
:y
%    nmero1 y nmero2

         devuelve 1 si sus dos operandos son ambos distintos de cero.

%    Ej: si (b37 = 1 y b38 = 0)
             b50 := b50 + 1;


         Ver tambin: ~no~  ~o~  ~Expresiones~
:o
%    nmero1 o nmero2

         devuelve 1 si alguno de sus dos operandos es distinto de cero.

%    Ej: si (b37 = 1 o b37 = 0)
             b50 := b50 + 1;


         Ver tambin: ~no~  ~y~  ~Expresiones~
:Prioridades
     En la siguiente tabla se exponen las prioridades de los distintos
 operadores. El primer nivel es el ms prioritario, y el ltimo el menos
 prioritario. Todos los operadores que se encuentren al mismo nivel
 tienen la misma prioridad.

    no

    *  /

    +  -

    <  <=  >  >=

    =  <>

    y

    o


 Puede observarse que los operadores unarios tienen la mxima prioridad, y a
 partir de ellos se va bajando hasta el operador or, el de menor prioridad.
 Adems, los operadores relacionales son ms prioritarios que los lgicos;
 esto hace que, en las condiciones, no sean necesarios tantos parntesis.
 Hablando de ellos, se usan de la forma habitual, es decir, aumentando la
 prioridad de aquello a lo que encierran. Todos los operadores son
 asociativos por la izquierda.

:esta?
%    esta?(localidad)

         devuelve 1 si el jugador est en la localidad "localidad". (Es
         decir, comprueba si el valor de la bandera 38 es igual a
         "localidad".)

%    Ej: si (esta?(5))
%            "Estas en un bosque";


         Ver tambin: ~Bandera 38~  ~estamay?~  ~estamen?~  ~Expresiones~
                      ~Banderas~  ~Localidades~
:estamay?
%    estamay?(localidad)

         devuelve 1 si el jugador est en una localidad mayor que
         "localidad". (O sea, si b38 > "localidad".)

%    Ej: si (estamay?(5))
%            "Ya no estas en la isla";


         Ver tambin: ~Bandera 38~  ~esta?~  ~estamen?~  ~Expresiones~
                      ~Banderas~  ~Localidades~
:estamen?
%    estamen?(localidad)

         devuelve 1 si el jugador est en una localidad menor que
         "localidad". (O sea, si b38 < "localidad".)

%    Ej: si (estamay?(5))
%            "Todava estas en la isla";


         Ver tambin: ~Bandera 38~  ~esta?~  ~estamay?~  ~Expresiones~
                      ~Banderas~  ~Localidades~
:presente?
%    presente?(objeto)

         devuelve 1 si el objeto "objeto" est siendo llevado en el
         inventario, se lleva puesto encima o se encuentra en la
         localidad actual.

%    Ej: si (presente?(DIAMANTE))
%            "El ogro se asusta del brillo del diamante";


         Ver tambin: ~ausente?~  ~Expresiones~  ~Objetos~  ~Localidades~
:ausente?
%    ausente?(objeto)

         devuelve 1 si el objeto "objeto" no est siendo llevado en el
         inventario, ni se lleva puesto encima ni se encuentra en la
         localidad actual.

%    Ej: si (ausente?(ESPADA))
%            "El ogro te arranca la cabeza de un mordisco";


         Ver tambin: ~presente?~  ~Expresiones~  ~Objetos~  ~Localidades~
:puesto?
%    puesto?(objeto)

         devuelve 1 si el objeto "objeto" est siendo llevado puesto.

%    Ej: si (no puesto?(ESCAFANDRA))
%            "Tus ojos se salen de las orbitas por la enorme presin";


         Ver tambin: ~encima~  ~llevado?~  ~Expresiones~
:llevado?
%    llevado?(objeto)

         devuelve 1 si el objeto "objeto" est siendo llevado en el
         inventario.

%    Ej: si (llevado?(PISTOLA))
%            "GUARDA: \"Qu tienes en los bolsillos?\"";


         Ver tambin: ~llevado~  ~puesto?~  ~Expresiones~
                      ~Cdigos especiales~
:estaen?
%    estaen?(objeto, localidad)

         devuelve 1 si el objeto "objeto" se encuentra en la localidad
         "localidad", y 0 en caso contrario.

%    Ej: si (estaen?(LLAVE, no_creado))
%            "La llave todava no existe en el juego";


         Ver tambin: ~Expresiones~  ~Objetos~  ~Localidades~
:verbo?
%    verbo?(palabra)

         devuelve 1 si la palabra "palabra" es el verbo de la
         sentencia actual.

%    Ej: si (verbo?(COGER))
%            "Intentas coger algo... pero no puedes";


         Ver tambin: ~nombre1?~  ~adjetivo1?~  ~adverbio?~  ~nombre2?~
                      ~adjetivo2?~  ~preposicion?~  ~Expresiones~
                      ~Vocabulario~  ~Intrprete~
:nombre1?
%    nombre1?(palabra)

         devuelve 1 si la palabra "palabra" es el primer nombre de la
         sentencia actual.

%    Ej: si (nombre1?(LLAVE))
%            "A qu llave te refieres?";


         Ver tambin: ~verbo?~  ~adjetivo1?~  ~adverbio?~  ~nombre2?~
                      ~adjetivo2?~  ~preposicion?~  ~Expresiones~
                      ~Vocabulario~  ~Intrprete~
:adjetivo1?
%    adjetivo1?(palabra)

         devuelve 1 si la palabra "palabra" es el adjetivo del primer
         nombre de la sentencia actual.

%    Ej: si (adjetivo1?(BLANCO))
%            "Coges el libro blanco";


         Ver tambin: ~verbo?~  ~nombre1?~  ~adverbio?~  ~nombre2?~
                      ~adjetivo2?~  ~preposicion?~  ~Expresiones~
                      ~Vocabulario~  ~Intrprete~
:adverbio?
%    adverbio?(palabra)

         devuelve 1 si la palabra "palabra" es el adverbio de la
         sentencia actual.

%    Ej: si (adverbio?(RAPIDAMENTE))
%            "Saltas con rapidez y te salvas por los pelos";


         Ver tambin: ~verbo?~  ~nombre1?~  ~adjetivo1?~  ~nombre2?~
                      ~adjetivo2?~  ~preposicion?~  ~Expresiones~
                      ~Vocabulario~  ~Intrprete~
:nombre2?
%    nombre2?(palabra)

         devuelve 1 si la palabra "palabra" es el segundo nombre de la
         sentencia actual.

%    Ej: si (nombre2?(LLAVE))
%            "A qu llave te refieres?";


         Ver tambin: ~verbo?~  ~nombre1?~  ~adjetivo1?~  ~adverbio?~
                      ~adjetivo2?~  ~preposicion?~  ~Expresiones~
                      ~Vocabulario~  ~Intrprete~
:adjetivo2?
%    adjetivo2?(palabra)

         devuelve 1 si la palabra "palabra" es el adjetivo del segundo
         nombre de la sentencia actual.

%    Ej: si (adjetivo2?(ROJO)) {
%            "Metes la llave en el bolso rojo";
%            meter(LLAVE, BOLSO ROJO);
%        }


         Ver tambin: ~verbo?~  ~nombre1?~  ~adjetivo1?~  ~adverbio?~
                      ~nombre2?~  ~preposicion?~  ~Expresiones~
                      ~Vocabulario~  ~Intrprete~
:preposicion?
%    preposicion?(palabra)

         devuelve 1 si la palabra "palabra" es la preposicin de la
         sentencia actual.

%    Ej: si (preposicion?(EN)) {
%            "Miras DENTRO del bolso, y encuentras una llave";
%            crear(LLAVE);
%        }


         Ver tambin: ~verbo?~  ~nombre1?~  ~adjetivo1?~  ~adverbio?~
                      ~nombre2?~  ~adjetivo2?~  ~Expresiones~
                      ~Vocabulario~  ~Intrprete~
:acabar?
%    acabar?

         hace imprimir el mensaje del sistema n 12 ("Estas seguro?")
         y llama a la rutina de input. Devuelve 1 si el jugador teclea
         la primera letra del mensaje del sistema n 30 ("S"),
         indicando con ello que desea acabar la partida.

%    Ej: si (acabar?)
%            acabar


         Ver tambin: ~Expresiones~  ~Mensajes sistema~
:analiza?
%    analiza?

         se utiliza para facilitar los dilogos entre los personajes
         del juego. Sustituye cualquier cadena entre comillas por la
         sentencia actual, de forma que la sentencia DECIR PEPE "HOLA"
         se transformar en HOLA. Devuelve 1 si la cadena entre
         comillas es sintcticamente correcta, y en tal caso almacena en
         las banderas 48, 49 y 50 las palabras usadas en la frase entre
         comillas.

%    Ej: DECIR GUARDA {
%            si (analiza?)
%                llama(Subrutina_habla_guarda);
%            sino
%                "El guarda no te entiende";
%        }


         Ver tambin: ~Expresiones~  ~Vocabulario~  ~Intrprete~
                      ~Bandera 48~  ~Bandera 49~  ~Bandera 50~
:objeto
%    objeto(nombre, adjetivo)

         es una funcin que, dados un nombre y un adjetivo (en realidad,
         el cdigo del nombre y el del adjetivo) devuelve el cdigo del
         objeto correspondiente. Se usa sobre todo cuando necesitamos el
         cdigo de un objeto, pero no sabemos el lexema de su nombre,
         aunque el cdigo de dicho nombre en banderas. Si no existe ningn
         objeto con dicho nombre, devuelve -1.

         Es posible incluso no incluir ningn parmetro. En tal caso, el
         nombre y el adjetivo se tomarn directamente del nombre y el adje-
         tivo que haya escrito el jugador en su ltima frase.

         Adems modifica convenientemente las banderas 54 a 58.

%    Ej: b50 := objeto(b70, b71);
%        b80 := objeto();          // Toma el nombre de b33 y b34.

         Ver tambin: ~Expresiones~  ~Objetos~  ~Vocabulario~
                      ~Bandera 33~  ~Bandera 34~  ~Bandera 54~
                      ~Bandera 55~  ~Bandera 56~  ~Bandera 57~
                      ~Bandera 58~
:local
%    local(objeto)

         devuelve el nmero de localidad en la que se encuentra el
         objeto "objeto".

%    Ej: si (local(LLAVE) = b38)
%            "La llave est delante tuya";


         Ver tambin: ~Expresiones~  ~Objetos~  ~Localidades~
                      ~Bandera 38~
:posx:posy
%    posx(), posy()

         devuelven la posicin actual (en coordenadas X e Y, respectivamente)
         del cursor de texto en la pantalla.

%    Ej: b60 := posx(); b61 := posy();
%        cursor(20, 12);
%        "HOLA A TODOS";
%        cursor(b60, b61);


         Ver tambin: ~cursor~  ~Expresiones~
:caminar
%    caminar(localidad, verbo)

         hace el efecto de mover al jugador (u otro personaje) de una loca-
         lidad a otra. Para ello, se indica tanto la localidad actual como
         el verbo que indica la direccin de movimiento. Si ste es el n -1,
         se indica que se escoja uno aleatoriamente (pudiendo darse el caso
         de que no se tome ninguno). Devuelve el n de la localidad a la que
         se llega desde esa localidad con esa direccin, y en la bandera 51
         almacena la direccin que ha tomado.

%    Ej: subrutina Mueve_guarda {
%            b60 := caminar(b60, -1);
%            evaluar (b51) {
%                caso NORTE: "El guarda se va al norte";
%                caso SUR:   "El guarda tira p'al sur";
%                caso -1:    "El guarda se queda quieto";
%                defecto:    "El guarda se va... a alguna parte";
%            }
%        }


         Ver tambin: ~Expresiones~  ~Vocabulario~  ~Localidades~
                      ~Banderas~  ~Bandera 51~
:aleatorio
%    aleatorio(nmero)

         devuelve un nmero escogido aleatoriamente entre 0 y "nmero"

%    Ej: b60 := aleatorio(5);


         Ver tambin: ~Expresiones~
:primero
%    primero(localidad)

         considerando los objetos de una localidad como elementos de una
         lista, devuelve el primer objeto de la lista correspondiente a
         "localidad". Hay que tener en cuenta que la ordenacin de los
         objetos en la lista es arbitraria.

%    Ej: COGER TODO {
%            b28 := primero(b38);
%
%            si (b28 = -1)
%                "No hay nada que coger.";
%            sino
%                mientras (b28 <> -1) {
%                    coger(b28);
%
%                    b28 := siguiente(b38);
%
%                    si (b28 <> -1)
%                        saltolinea;
%                }
%
%            hecho;
%        }


         Ver tambin: ~siguiente~  ~Expresiones~  ~Objetos~  ~Localidades~
:siguiente
%    siguiente(localidad)

         considerando los objetos de una localidad como elementos de una
         lista, devuelve el siguiente objeto (de la lista correspondiente a
         "localidad") al ltimo objeto procesado por "~primero~" o
         "siguiente". Cuando encuentra el fin de la lista, devuelve -1.
         Hay que tener en cuenta que la ordenacin de los objetos en la
         lista es arbitraria.

%    Ej: DEJAR TODO {
%            b28 := primero(llevado);
%
%            si (b28 = -1)
%                "No hay nada que dejar.";
%            sino
%                mientras (b28 <> -1) {
%                    dejar(b28);
%
%                    b28 := siguiente(llevado);
%
%                    si (b28 <> -1)
%                        saltolinea;
%                }
%
%            hecho;
%        }


         Ver tambin: ~primero~  ~Expresiones~  ~Objetos~  ~Localidades~
:peso
%    peso(objeto)

         devuelve el peso de un objeto.

%    Ej: b70 := peso(LLAVE);

         Ver tambin: ~Objetos~  ~Expresiones~
:contenedor?
%    contenedor?(objeto)

         devuelve 1 si el objeto "objeto" es un contenedor; 0 en caso
         contrario.

%    Ej: si (contenedor?(CAMISA))
%            "La camisa tiene bolsillos";


         Ver tambin: ~ropa~  ~Objetos~  ~Expresiones~
:ropa?
%    ropa?(objeto)

         devuelve 1 si el objeto "objeto" es de tipo "ropa"; 0 en caso
         contrario.

%    Ej: si (ropa?(BOLSA))
%            "Puedes llevar la bolsa a la espalda";


         Ver tambin: ~contenedor~  ~Objetos~  ~Expresiones~
:direccion?
%    direccion?(palabra)

         devuelve 1 si la palabra "palabra" es de tipo "direccion"; 0 en caso
         contrario.

%    Ej: si (direccion?(SUBIR))
%            "No puedes subir por ah";


         Ver tambin: ~direccion~  ~Vocabulario~  ~Expresiones~
:llevado
%    llevado

         es una constante que hace referencia a la localidad en la que se
         almacenan los objetos que el jugador tiene en su inventario.
         Puede ser usada como cualquier otro nmero vlido de localidad.

%    Ej: DEJAR TODO {
%            b28 := primero(llevado);
%            b27 := objeto(b44, b45);
%
%            si (b28 = -1)
%                "No hay nada que dejar.";
%            sino
%                mientras (b28 <> -1) {
%                    si (b27 = -1 o b27 <> b28)
%                        dejar(b28);
%
%                    b28 := siguiente(llevado);
%
%                    si (b28 <> -1)
%                        saltolinea;
%                }
%
%            hecho;
%        }


         Ver tambin: ~encima~  ~no_creado~  ~Localidades~  ~Expresiones~
                      ~Objetos~
:encima
%    encima

         es una constante que hace referencia a la localidad en la que se
         almacenan los objetos que el jugador lleva puesto encima.
         Puede ser usada como cualquier otro nmero vlido de localidad.

%    Ej: si (local(CAMISA) = encima)
%            "Tienes la camisa puesta";


         Ver tambin: ~llevado~  ~no_creado~  ~Localidades ~  ~Expresiones~
                      ~Objetos~
:no_creado
%    no_creado

         es una constante que hace referencia a la localidad en la que se
         almacenan los objetos que todava no han sido creados (es decir,
         que no tienen asignado ninguna localidad actual).
         Puede ser usada como cualquier otro nmero vlido de localidad.

%    Ej: colocar(LLAVE, no_creado);   // Hace desaparecer la llave


         Ver tambin: ~llevado~  ~encima~  ~Localidades ~  ~Expresiones~
                      ~crear~  ~destruir~  ~Objetos~
:Ejemplos
^    Ejemplos de expresiones podran ser:

%    local(LLAVE) y no estaen?(MANZANA, llevado)

         que valdr 1 si la localidad actual del objeto LLAVE es
         distinto de cero y la MANZANA est siendo llevada por el
         jugador. La subexpresin estaen?(MANZANA, llevado) sera
         equivalente a llevado?(MANZANA).

%    verbo?(COGER) o verbo?(DEJAR)

         valdr 1 si el verbo de la sentencia actual es COGER o DEJAR.

%    LLAVE AMARILLA

         devuelve el cdigo interno del objeto con ese nombre y ese adjetivo.

%    b15 >= objeto(b34, b35) y (b15 <= 0 o adverbio?(RAPIDAMENTE))

         aunque un poco liado, es fcil de entender.


     Ver tambin: ~Expresiones~
