07.05.2013 Views

MODVS VIVENDI - SPAC - Club de Aventuras AD

MODVS VIVENDI - SPAC - Club de Aventuras AD

MODVS VIVENDI - SPAC - Club de Aventuras AD

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

TUTORIAL<br />

"jarra <strong>de</strong> leche" <strong>de</strong>bido a que la "leche"<br />

está <strong>de</strong>ntro <strong>de</strong> la jarra (En caso <strong>de</strong><br />

empate el parser consi<strong>de</strong>ra más<br />

importantes los objetos que no están<br />

<strong>de</strong>ntro <strong>de</strong> otro, y toma su propia<br />

<strong>de</strong>cisión).<br />

Si moviéramos el objeto "leche" a la<br />

localidad, obtendríamos una pregunta<br />

<strong>de</strong> <strong>de</strong>sambiguación, al existir empate:<br />

¿Cuál concretamente, la jarra con leche<br />

o la leche <strong>de</strong> la jarra?<br />

>x leche<br />

Leche, la jarra está llena <strong>de</strong> leche.<br />

Correcto<br />

>x blanca<br />

Leche blanca, la jarra está llena <strong>de</strong><br />

leche.<br />

Nuevo problema: el sistema <strong>de</strong><br />

puntuación por <strong>de</strong>fecto valora los<br />

adjetivos aun ante la ausencia <strong>de</strong> un<br />

nombre, dando lugar a extrañezas como<br />

ésta. O incluso cosas peores, como que<br />

al escribir "EXAMINAR CONTIENE",<br />

el parser <strong>de</strong>tecte que nos referimos a<br />

alguna <strong>de</strong> las jarras:<br />

>x contiene<br />

¿Cuál concretamente, la jarra con leche<br />

o la jarra con agua?<br />

Ahora vamos a modificar el código <strong>de</strong>l<br />

ejemplo <strong>de</strong> arriba, <strong>de</strong>scomentando las<br />

siguientes líneas:<br />

Replace ParseNoun;<br />

Inclu<strong>de</strong> "IntnombreINFSP.h";<br />

Compilamos <strong>de</strong> nuevo, y algo ha<br />

cambiado en el parseado, vamos a ver:<br />

Pue<strong>de</strong>s ver una jarra con leche y una<br />

jarra con agua.<br />

>x blanca<br />

No veo eso que dices.<br />

Hemos arreglado lo <strong>de</strong> los adjetivos que<br />

querían tener <strong>de</strong>masiado protagonismo.<br />

>x leche blanca<br />

Leche blanca, la jarra está llena <strong>de</strong><br />

leche.<br />

Como vemos, los adjetivos funcionan<br />

sólo acompañados <strong>de</strong> alguno <strong>de</strong> sus<br />

nombres.<br />

>x jarra<br />

¿Cuál concretamente, la jarra con leche<br />

o la jarra con agua?<br />

>agua<br />

Es una jarra que contiene agua<br />

La pregunta <strong>de</strong> <strong>de</strong>sambiguación <strong>de</strong>l<br />

parser ante objetos con nombre idéntico<br />

sigue funcionando correctamente.<br />

>x jarra <strong>de</strong> leche<br />

Es una jarra que contiene leche<br />

Y si <strong>de</strong>sambiguamos nosotros<br />

directamente en la or<strong>de</strong>n, nos<br />

ahorramos la pregunta <strong>de</strong>l parser.<br />

>x leche <strong>de</strong> jarra<br />

Es una jarra que contiene leche<br />

Seguimos con el mismo problema <strong>de</strong><br />

antes. Ambos objetos tienen la misma<br />

puntuación, pero la leche está contenida<br />

<strong>de</strong>ntro <strong>de</strong> la jarra y sale perdiendo.<br />

En cualquier caso, el sacar la leche <strong>de</strong> la<br />

jarra no arreglaría el problema,<br />

entraríamos en un bucle <strong>de</strong> preguntas<br />

"leche <strong>de</strong> jarra" versus "jarra <strong>de</strong> leche"<br />

<strong>de</strong>l que sólo saldríamos aportando una<br />

palabra que esté contenida en el campo<br />

name o adjectives <strong>de</strong> uno <strong>de</strong> los objetos<br />

y no en el otro, por ejemplo:<br />

Con "x leche BLANCA <strong>de</strong> la jarra"<br />

ganaría la leche.<br />

Con "x jarra QUE CONTIENE leche"<br />

ganaría la jarra.<br />

Pero <strong>de</strong> todos modos, <strong>de</strong> la misma<br />

forma:<br />

Con "x jarra <strong>de</strong> la leche BLANCA"<br />

seguiría ganando la leche.<br />

Y con "x leche QUE CONTIENE la<br />

jarra" seguiría ganando la jarra.<br />

Desambiguando en Inform 6<br />

De modo que nuestro problema sigue<br />

ahí.<br />

Pero vamos a solucionarlo en seguida:<br />

Para empezar <strong>de</strong>scomentamos la línea<br />

que le otorga prioritario al objeto<br />

“leche<strong>de</strong>lajarra”:<br />

object leche<strong>de</strong>lajarra "leche <strong>de</strong> la jarra"<br />

habitacion<br />

with name 'leche',<br />

adjectives 'jarra' 'blanca',<br />

prioritario 3,<br />

<strong>de</strong>scription "Leche blanca, la jarra está llena<br />

<strong>de</strong> leche.",<br />

has female;<br />

De modo que a partir <strong>de</strong> ahora en caso<br />

<strong>de</strong> empate siempre ganará la leche sobre<br />

la jarra.<br />

Si el objeto tiene la propiedad<br />

prioritario, al elegir el objeto ganador,<br />

en caso <strong>de</strong> empate éste recibirá unos<br />

puntos extra, por enchufe.<br />

Según vemos en el código, en lugar <strong>de</strong><br />

un punto por coinci<strong>de</strong>ncia, recibiría el<br />

valor <strong>de</strong> su propiedad prioritario más<br />

otros dos, un total <strong>de</strong> 5 puntos.<br />

La función ChooseObjects se encarga <strong>de</strong><br />

eso: <strong>de</strong> adjudicar puntos entre todos los<br />

objetos en base a las coinci<strong>de</strong>ncias <strong>de</strong> su<br />

vocabulario con lo que ha escrito el<br />

jugador para <strong>de</strong>terminar cuál <strong>de</strong> ellos es<br />

el ganador.<br />

Sólo con esto, la leche ganaría siempre<br />

con sólo cumplir que el jugador haya<br />

escrito "leche", y tampoco es lo que<br />

queremos, pues sería elegida al escribir<br />

"jarra <strong>de</strong> leche".<br />

Vamos a plantear una regla sencilla tal<br />

que, si el jugador escribe jarra antes que<br />

leche, significará que se refiere a la jarra<br />

<strong>de</strong> leche; y si en cambio escribe leche<br />

antes que jarra, se referirá a la leche <strong>de</strong> la<br />

jarra.<br />

Añadiremos este código <strong>de</strong>trás <strong>de</strong> la<br />

función Initialise <strong>de</strong> nuestro listado<br />

(ojo, sólo funciona para compilar en<br />

Glulx, al final incluiré las pequeñas<br />

modificaciones para que compile en<br />

<strong>SPAC</strong> – Octubre 2010 / 41

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!