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 />

>meter cerillas en caja<br />

cerilla: Hecho. cerilla: Hecho. cerilla:<br />

Hecho. cerilla: Hecho. cerilla: Hecho.<br />

cerilla: Hecho. cerilla: Hecho. cerilla:<br />

Hecho.<br />

>sacar cerillas <strong>de</strong> caja <strong>de</strong> cerillas / sacar<br />

cerillas <strong>de</strong> la caja <strong>de</strong> cerillas<br />

cerilla: Sacada. cerilla: Sacada. cerilla:<br />

Sacada. cerilla: Sacada. cerilla: Sacada.<br />

cerilla: Sacada. cerilla: Sacada. cerilla:<br />

Sacada.<br />

Ya, por fín, hemos enfrentado a las<br />

"cerillas <strong>de</strong> la caja" contra la "caja <strong>de</strong><br />

cerillas" en la misma frase. Y como<br />

vemos el parser <strong>de</strong>tecta correctamente a<br />

qué objeto nos referimos en cada una <strong>de</strong><br />

las partes.<br />

Alguien se podrá preguntar ahora... ¿Y<br />

qué pinta un jarrón ahí? Pues es para<br />

<strong>de</strong>mostrar que no hay trampa ni cartón.<br />

El jarrón es otro contenedor don<strong>de</strong> se<br />

pue<strong>de</strong>n meter las cerillas. Si la caja <strong>de</strong><br />

cerillas fuera el único contenedor<br />

presente, el parser no necesitaría<br />

<strong>de</strong>tectar que nos referimos a ese objeto,<br />

y con escribir "sacar cerillas" o "meter<br />

cerillas" actuaría directamente sobre él.<br />

Por tanto no podríamos comprobar que<br />

efectivamente se está enterando <strong>de</strong> que<br />

nos referimos a ese objeto.<br />

Es una más <strong>de</strong> esas características <strong>de</strong><br />

Inform don<strong>de</strong> el parser se hace el<br />

listillo...<br />

Pero aún no han terminado las<br />

comprobaciones. Vamos a volver a<br />

meter todas las cerillas en la caja y<br />

empezamos <strong>de</strong> nuevo:<br />

>coge cerilla<br />

Cogida.<br />

(Aunque el mensaje por <strong>de</strong>fecto -que<br />

po<strong>de</strong>mos mejorar- no lo muestre, la<br />

cerilla cogida proce<strong>de</strong> <strong>de</strong>l interior <strong>de</strong> la<br />

caja, que es don<strong>de</strong> están todas)<br />

>coge cerilla<br />

Ya tienes la cerilla.<br />

Obviamente ya tenemos la cerilla...<br />

aunque haya más <strong>de</strong>ntro <strong>de</strong> la caja. Pese<br />

a que resulte pesado, vuelvo a recordar<br />

que en caso <strong>de</strong> empate Inform prioriza<br />

los objetos que no están <strong>de</strong>ntro <strong>de</strong> otros,<br />

<strong>de</strong> modo que habiendo alguna cerilla<br />

fuera <strong>de</strong> la caja, ésta tendrá prioridad.<br />

¿Qué ocurriría si hubiera más <strong>de</strong> una<br />

cerilla fuera <strong>de</strong> la caja? ¿Nos lanzaría el<br />

parser un mensaje <strong>de</strong> <strong>de</strong>sambiguación<br />

para <strong>de</strong>terminar a cuál <strong>de</strong> ellas nos<br />

referimos? No. Las cerillas están<br />

<strong>de</strong>finidas como una clase, con las<br />

mismas propieda<strong>de</strong>s <strong>de</strong> nombre (en este<br />

caso con la rutina parse_name), por<br />

tanto son equivalentes y se escoge una al<br />

azar, sin preguntar al usuario. No<br />

ocurriría así si hubiéramos <strong>de</strong>finido<br />

alguna diferencia <strong>de</strong> vocabulario entre<br />

ellas, por ejemplo distintos colores. En<br />

ese caso el pasers nos preguntaría ¿A<br />

cuál te refieres, a la cerilla roja, a la<br />

cerilla azul, o a la cerilla ver<strong>de</strong>?<br />

Pero volvamos al tema:<br />

>coge cerilla <strong>de</strong> caja / saca cerilla <strong>de</strong><br />

caja<br />

Sacada.<br />

Si queremos coger las cerillas que están<br />

<strong>de</strong>ntro <strong>de</strong> la caja, lo especificamos y<br />

listo.<br />

>x cerilla<br />

Una cerilla normal y corriente.<br />

Ésta es la <strong>de</strong>scripción <strong>de</strong> una cerilla que<br />

está fuera <strong>de</strong> la caja.<br />

>x cerilla <strong>de</strong> caja<br />

Una cerilla que está <strong>de</strong>ntro <strong>de</strong> la caja <strong>de</strong><br />

cerillas.<br />

Ésta es la <strong>de</strong>scripción <strong>de</strong> una cerilla que<br />

está <strong>de</strong>ntro <strong>de</strong> la caja.<br />

>coge dos cerillas <strong>de</strong> la caja<br />

cerilla: Sacada. cerilla: Sacada.<br />

Esto también funciona.<br />

Desambiguando en Inform 6<br />

¿Queréis ver algo que no funcione?<br />

>mete en la caja <strong>de</strong> cerillas una cerilla<br />

No entendí esa frase.<br />

Pero esto no es un problema <strong>de</strong><br />

<strong>de</strong>sambiguación, sino <strong>de</strong> <strong>de</strong>finición <strong>de</strong><br />

gramática. Po<strong>de</strong>mos ver cómo está<br />

<strong>de</strong>finida la acción "meter" (siempre que<br />

hayamos compilado en modo <strong>de</strong>bug) <strong>de</strong><br />

la siguiente forma:<br />

>xverbo mete<br />

Verb 'coloca' 'echa' 'inserta' 'mete' 'pon'<br />

* multiexcept 'en' container -> Insert<br />

* multiexcept 'en' noun -> PutOn<br />

* multiexcept '<strong>de</strong>ntro' '<strong>de</strong>' noun -><br />

Insert<br />

* multiexcept 'sobre' noun -> PutOn<br />

* noun 'a' topic -> SetTo<br />

* 'a' creature 'en' container -> Insert<br />

* 'a' creature 'en' noun -> PutOn<br />

* 'a' creature '<strong>de</strong>ntro' '<strong>de</strong>' noun -> Insert<br />

* 'a' creature 'sobre' noun -> PutOn<br />

* multiexcept 'encima' '<strong>de</strong>' noun -><br />

PutOn<br />

* 'a' creature 'encima' '<strong>de</strong>' noun -><br />

PutOn<br />

* 'cerrojo' / 'pestillo' / 'cierre' 'a' noun<br />

-> Lock<br />

* 'el' 'cerrojo' / 'pestillo' / 'cierre' 'a'<br />

noun -> Lock<br />

* 'cerrojo' / 'pestillo' / 'cierre' 'a' noun<br />

'con' held -> Lock<br />

* 'el' 'cerrojo' / 'pestillo' / 'cierre' 'a'<br />

noun 'con' held -> Lock<br />

Como vemos, no aparece por ningún<br />

sitio ninguna plantilla tal que 'en'<br />

container multiexcept.<br />

Por tanto, si queremos que el parser<br />

entienda una or<strong>de</strong>n con el complemento<br />

circunstancial por <strong>de</strong>lante <strong>de</strong>l<br />

complemento directo, <strong>de</strong>bemos editar o<br />

ampliar esa gramática añadiendo las<br />

siguientes líneas:<br />

*'en' container multiexcept -> Insert reverse<br />

* '<strong>de</strong>ntro' '<strong>de</strong>' container multiexcept -><br />

Insert reverse<br />

Pero esto ya se sale <strong>de</strong>l tema <strong>de</strong> la<br />

<strong>de</strong>sambiguación y <strong>de</strong> la caja <strong>de</strong> cerillas.<br />

☞ Jarel<br />

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

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

Saved successfully!

Ooh no, something went wrong!