MODVS VIVENDI - SPAC - Club de Aventuras AD
MODVS VIVENDI - SPAC - Club de Aventuras AD
MODVS VIVENDI - SPAC - Club de Aventuras AD
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