Usuario:Sarganar/INFSP7

De WikiCAAD, la enciclopedia aventurera.

Contenido

INFSP 7 Cosas no resueltas Setiembre 2007

Inform 7 Build 4X60 - Setiembre 2007

La version BETA de Inform7 está pensada para el idioma inglés. Por ello algunas facilidades y caracteristica linguíticas sólo se aplican a dicho idioma y a veces es dificil (en este etapa) tratar de introducir las particularidades del español. Esta lista recoge alguna de ellas y serán enviadas al equipo de Inform 7 cuando este se avoque a las ampliaciones linguisticas de I7 (proyectadas para el final de su desarrollo).

A fines de setiembre de 2007, Emily Short posteó en la raif lo siguiente:

* "It's true that not much has changed (or at least, not for the better)
   about internationalization of Inform 7 over the last year. Partly this
   is because that issue has taken a back seat to adding other features
   that will affect a broader user base; partly it is because it's not
   clear how best to solve the problems that have been raised, especially
   given that the system is internally in a state of some flux.
   That doesn't mean that we've taken a decision to ignore these problems
   forever, though! We continue to be interested in hearing what
   stumbling blocks you run into, even if we're not able to be
   immediately responsive.
   Sorry for the frustration of waiting. I'm quite impressed by how much
   has already been done in I7 in other languages, honestly..." 

Asi que, a no desesperarse. Hay buenas posibilidades de que los actuales problemas desaparezcan en el futuro.

[1] El uso de sinónimos de diferentes géneros, a la manera de InformATE.

Puede hacerse con inclusiones antiesteticas. A veces entra en conflicto con los 'Understand' (cuando se usan adjetivos para describir objetos) y sus rutinas parse_name, por lo que no anda en esas ocasiones.

Por ejemplo:

	Size is a kind of value. The sizes are pequeño, mediano and grande. A thing has a size.
        A thing is usually pequeño.
	Understand the size property as describing a thing.

Esto hace que I7 genere la propiedad parse_name para la clase thing (y en I7 casi todo deriva de la clase 'thing'). Y entonces ya no funcionan los name_f, adejctives y demas. Tiene que ver con la forma en que el parser da prioridad a parse_name frente a ParserNoun().



[2] Las relaciones de posesión (be part of every). GENITIVO

I7 lo guarda internamente como name= 'poseedor's' 'objeto'. Hay que solucionar con Understands y renegar un rato. No puede aprovecharse toda la potencia.

[3] La generación automatica de superlativos y comparativos

Estan optimizadas para el ingles (sufijos 'est' y 'er'). Hay que usar construcciones no documentadas que aparecen en el log de la compilacion.

Ej:

	A weight is a kind of value. 10kg specifies a weight.
        Everything has a weight. A thing usually has weight 1kg. 
	Definition: A thing is light if its weight is 3kg or less.
	Definition: A thing is heavy if its weight is 10kg or more.
	To decide which object is mas pesado ( S - description ) : <<no documentada
		(- {-extremal>weight:S}  -) 
	When play begins:
		say "[the weight of the mas pesado man]";


[4] Respuesta del parser en el scope checking

>ir nieve

That noun did not make sense in this context.

(la respuesta está en inglés)

Ej:

Understand "ir [any room]" or "ir al [any room]" or "ir a [any room]" as MoverseDirecting.

Check MoverseDirecting: 
   if the noun is not a room, say "No puedes ir [al noun]." instead;
   if the noun is not adjacent, say "Fuera de contexto." instead.

Carry out MoverseDirecting:
      if the noun is adjacent
      begin;
         say "La compuerta que da [al noun] se abre con un leve suspiro hidráulico, se encienden las luces exteriores.
	En cuanto cruzas al otro lado se apagan las luces [del location], cuestión de ahorro de energía.";
            move player to the noun;
      otherwise if the noun is the location;
         say "Te encuentras un poco mareado, y piensas en ir a donde ya estás.";
      otherwise;   
         say "No puedes alcanzar ese lugar desde aquí.";
     end if.

After deciding the scope of player:
   repeat with hab running through adjacent rooms begin;
         place the hab in scope;
   end repeat;


Test is a room.Here is cesto.
Test2 is north from Test. Here is a planta.

Inform 7 crea nuevas rutinas filtro para el scope que se aplicaran en las lineas de gramatica de la accion MoverseDirecting. La consulta por el valor 3 seria cuando el parser se da por vencido y da la oportunidad a la rutina de que ella avise el fracaso.

Pero (un 'pero' pequeño?) I7 coloca el mismo esta frase: " That noun did not make sense in this context." en el codigo (al compilar).

No puede cambiarse a priori.

PATCH:

ubica parserm.h/linea 2281 y haz este cambio:

    if (etype == ASKSCOPE_PE) {
        scope_stage = 3;
-!        if (indirect(scope_error) == -1) { ! infsp debug
+        if (indirect(scope_errorSP) == -1) {
            best_etype = nextbest_etype;
            jump GiveError;
        }

agrega al final de parserm.h:

[ scope_errorSP; ! infsp debug
! activar una de las dos lineas siguientes:
  print "Esto no tiene mucho sentido en este contexto.";
!  return -1;
];

Aqui, si devuelves -1, el parser te responderá el tipico 'no veo eso que dices' (testeado)

(origen: foro CAAD)

[5] Definición de objetos usando CALLED no setea correctamente los artículos

La frase I7 del tipo:

A scroll called the battered scroll is in the Turret Roundhouse.

(utilizando el metodo del 'called the objeto') lo que se hace no es otra cosa que definir la propiedad i6 article con el articulo (INGLES: a/an/the/some únicamente) que indiques.

No es un bug de spanish, aunque sí una limitacion hispana del preprocesador i7.

Me explico:

Por ejemplo:

A scroll called the battered scroll is in the Turret Roundhouse.

Define un objeto i6: (extracto)

Object -> O191_battered_scroll ""
class K127_scroll
with name 'battered' 'scroll'
with initial SC_51
with article "the"
 with short_name "battered scroll"
;

¿Ves la propiedad article?


Claro que si no usas articulo:

A scroll called battered scroll is in the Turret Roundhouse.

Tendrás:

Object -> O191_battered_scroll ""
class K127_scroll
with name 'battered' 'scroll'
 has proper
with initial SC_51
 with short_name "battered scroll"
 with cap_short_name "Battered scroll"
;

Lo trata como NOMBRE PROPIO!!! (has proper)

ok, pruebo ahora agregando un articulo ESPAÑOL:

A scroll called el battered scroll is in the Turret Roundhouse.

En I6:

Object -> O191_el_battered_scroll ""
class K127_scroll
with name 'el' 'battered' 'scroll'
 has proper
with initial SC_51
 with short_name "el battered scroll"
 with cap_short_name "El battered scroll"
;

No solo no agregó la propiedad article, sino que lo sigue marcando como 'has proper'

¿Qué te parece?

Evidentemente tendrás que buscar otra forma de definirlo en el codigo I7 para que se comporte bien (ver más abajo). Esto es un problema (para los no-ingleses) del preprocesador I7 al estar ligado al idioma ingles.

De hecho, según miro en el BNF del preprocesador I7; esta definicion tiene la estructura:

physical-description:
  ::= [determiner] [article] core-description
  ::= [relative-phrase][( CALLED [article] WORDS )]

article
  ::= a/an/the/some

Es decir: SOLO PUEDES usar los articulos a/an/the/some en ese tipo de construccion i7. Toda otra particula (como nuestros articulos) será adosada al nombre del objeto, y entoces se lo tratará como nombre propio.

Algo parecido a lo que pasa al inicio de una oracion I7:

The pelota is here.

NO ES LO MISMO que poner:

La pelota is here.

Capiche?

SOLUCION:

Reescribe la oracion I7.

Por ejemplo, la oracion

A scroll called the battered scroll is in the Turret Roundhouse.

Reescribela como:

The battered scroll  is a scroll in the Turret Roundhouse.

Sigue ese patrón para todos los 'called' necesarios.

Saludos!

Problema Reportado por Urbatain.

Herramientas personales