SPAC
Portada > Webzine > Sección objetiva > A. técnicos > Verbos-gramática VS objeto-acción

Verbos-gramática VS objeto-acción

Lunes 17 de enero de 2011, por Jenesis


Mi experiencia con AGE ha ido creciendo junto a mi aventura y ahora mismo mi código es un compendio de como hacer la misma cosa de varios modos diferentes, unas bastante más efectivas que otras. Pero aunque lo que voy a decir no sea muy consecuente con lo que realmente he hecho en AGE, espero que explique el concepto de objeto en AGE, tal como yo lo veo.

A pesar de que es algo que ya contemplan algunos parsers de hoy en día, me gustaría profundizar un poco en los conceptos "verbo" y "acción", tanto desde la perspectiva real, como de su aplicación en la programación de conversacionales.

En el lenguaje real, un verbo aplicado a diferentes objetos no siempre presupone la misma acción sobre ellos, del mismo modo que la misma acción en diferentes objetos no siempre presupone que sea consecuencia de un mismo verbo.
Eso para mí es primordial, tener claro que el uso de un verbo no es suficiente ya que aplicado a diferentes objetos no siempre desemboca en una misma acción.

No es lo mismo subir al monte, que subir al taburete, que subir al niño , y con estos ejemplos queda claro que en muchos casos las preposiciones tampoco son de ayuda; aquí la contracción «al» es del todo irrelevante ¿qué es lo relevante? ¡los objetos!

No es lógico subirnos encima del niño, del mismo modo que no podemos subir al monte con nuestros brazos por encima de nuestras cabezas. Está claro que la acción subir analizada gramaticalmente no sirve de mucho. En el primer caso sería un alias de "ir hacia arriba", en el segundo también, pero en el tercero sería un alias de "alzar" o "levantar", pero es que no es lo mismo levantar a un niño, que levantarse (levantar a uno mismo), por las mañanas, que levantar un muro de ladrillos.

Una bici se monta, pero también se monta un puzle, o una maqueta. En el primer caso sería alias de subirse a la bici, en los dos segundos sería alias de construir o armar, pero... no es lo mismo armar un puzle que armar a un ejercito, en el segundo caso sería un alias de "dar armas"... y así podríamos seguir haciendo comparaciones, porque además las formas de expresarse cambian con el tiempo y las modas, y nunca lo hacen alrededor de la gramática sino de los objetos.
Así pues, hay expresiones que hace unos años significaban unas cosa y ahora significan otra, y que si en el entorno de programación de una conversacional están relacionadas con un objeto, son fáciles de adaptar a la nueva moda o situación.

Por otro lado tenemos las acciones que están relacionadas con una localidad o circunstancia; hay muchas acciones que se aplican sin mencionar los objetos receptores de las mismas. Y hay otras que aparentemente no son capturadas por uno, oler sería un ejemplo, pero para esos casos está el objeto "localidad".

>oler manzana
Tiene un olor delicioso

>oler
Alguien está quemando leña no muy lejos de aquí, huele a humo...

Otro ejemplo relacionado con el objeto localidad.

>Llama a Carlos

Pueden darse dos casos, que Carlos esté en la localidad o que no. Si Carlos está en la localidad capturará esa acción, pero si no, será el propio objeto localidad quien lo capture.
Si hay un teléfono en la localidad desviaremos el verbo hacia el objeto teléfono y la orden quedará así:

>Llama por teléfono a Carlos.
Coges el teléfono y llamas a Carlos.

¿Os habéis fijado que para un teléfono fijo, el verbo coger no provoca la acción coger sino la de descolgar?

Y ahora imaginemos que ni Carlos ni el teléfono están en la localidad. Pues ahí entra el objeto mundo que es quien decide que hacer con un verbo en última instancia.

>Llamar a Carlos.
No te oye desde aquí.

La gramática es un medio, no un objetivo, y para dar realismo a una conversacional es primordial tener claro los objetivos y las acciones sobre cada objeto, el verbo o verbos que las puede desencadenar es algo secundario.
La gramática son sólo una serie de reglas que se aplican a la construcción de frases, pero que no tienen porqué encerrar un una acción concreta, o significado. Yo puedo construir una frase totalmente correcta, gramaticalmente hablando y que carezca de una utilidad aplicable dentro de una conversacional.

>Coge la indiferencia de quienes te rodean y derrámala sobre la ira de quienes te odian.

La única respuesta lógica en una conversacional no experimental, sería algo así como:

>Perdona... ¿qué has dicho que quieres coger?
>Perdona... ¿qué has dicho que quieres derramar?

Así que yo voto porque la gramática sea una propiedad de los objetos y no al revés, y por objeto entiéndase todo aquello físico o no, a lo que se le puede aplicar una acción física o no.

>Sube los precios
Subes los precios un 10%.

>Construye la frase
Ordenas las letras y formas la frase:
"¡Saludos!"

Jenesis

33 Comentarios

  • Verbos-gramática VS objeto-acción

    17 de enero 11:59, por Al-Khwarizmi
    Una muy buena y muy clara explicación. Precisamente por esos motivos que expones, entre otros, diseñé el sistema de asignación de acciones de AGE tal como lo hice. Digo lo de "entre otros" porque aparte de todo lo que mencionas, otra ventaja adicional que le veo a este enfoque orientado a objetos es que facilita la reutilización de objetos entre unas aventuras y otras.
    • Verbos-gramática VS objeto-acción 17 de enero 14:08, por Mel Hython

      Estáis confundiendo las cosas. No puedo objetar nada respecto a los ejemplos, pero puedo objetarlo todo frente a las conclusiones.

      Veamos, es evidente que no es la misma acción ’montarse en bicicleta’ que ’montar un puzzle’ pero eso es entre otras cosas porque ’montar + reflexivo + en’ fundamentalmente no es el mismo verbo que ’montar’, por mucho de que se use la misma palabra. Pero usemos un caso más ambiguo como el de ’coger el teléfono’ y ’coger la espada’. En ambos casos se trata exactamente de la misma estructura gramatical y el significado se detecta por contexto.

      La solución en Inform (en ambos, aunque escribo la sintaxis de I7 porque me resulta más familiar) es la siguiente:

      Understand "coger [a thing]" as taking. Understand "coger [a phone]" as picking up.

      Donde ’phone’ sería un subconjunto de las ’clases’ de cosas. O sea (de nuevo en I7):

      A phone is a kind of thing.

      Se puede, como se ve, tener una gramática tan fina como se quiera (o incluso contextualizada) sin tener que situar la asignación ’texto’ -> ’acción’ asociada a los objetos.

      En la aproximación de AGE (ahora la sintaxis es de seudocódigo) el equivalente sería:

      Mundo: parseCommand: if verbo.equals("coger") TODO EL CODIGO NECESARIO PARA COGER UN OBJETO Y PONERLO EN EL INVENTARIO end() if verbo.equals(...

      Clase Phone: parseCommand: if verbo.equals("coger") TODO EL CÓDIGO NECESARIO PARA DESCOLGAR UN TELÉFONO end()

      Esta aproximación tiene para mi varios problemas:

      1. El código de asignación texto —> acción está mezclado con cualquier otro código, relacionado con el modelo del mundo, por lo que para traspasar la gramática de una aventura hay que ser muy cuidadoso 2. El código de asignación está ’disperso’ en lugar de en una sección de gramática 3. El parser tiene que decidir qué objetos están potencialmente ’relacionados’ e invocar a todos los parseCommands, así si el jugador escribe:

      bulgo-bulgo puerta

      Hay que llamar a todas las puertas para ver si alguna de ellas puede ser ’tratada’ con ’bulgo-bulgo’ ya que no hay forma de saber si bulgo-bulgo es relativo a algo local o no... podría ser un hechizo de teleportación.

      • Verbos-gramática VS objeto-acción 17 de enero 14:14, por Al-Khwarizmi

        Para mí, los inconvenientes que has dado son más bien ventajas. Sí, hay que ser cuidadosos para traspasar una gramática, pero ¿para qué quieres traspasar una gramática? ¡Lo que interesa traspasar de una aventura a otra son los objetos!

        Si un teléfono cuando lo coges te da tono, ¿por qué para llevarme el teléfono a otra aventura tengo que copiar el propio teléfono (con el código que dice que si lo descuelgas, da tono) y además parte de la gramática global (que dice que coger un teléfono es descolgarlo)?

        Con el modelo tipo AGE, tienes encapsulada en el teléfono toda la información necesaria para usar el teléfono. No necesitas nada externo a él. No hay que ser cuidadoso, sino todo lo contrario.

        Lo de "¿y si quiero trasladar una gramática a otra aventura?" es una pregunta que no tiene sentido en AGE porque no existe la gramática tal y como la hay en otros sistemas.

        • Verbos-gramática VS objeto-acción 17 de enero 16:16, por Mel Hython

          Sí, hay que ser cuidadosos para traspasar una gramática, pero ¿para qué quieres traspasar una gramática? ¡Lo que interesa traspasar de una aventura a otra son los objetos! Si un teléfono cuando lo coges te da tono, ¿por qué para llevarme el teléfono a otra aventura tengo que copiar el propio teléfono (con el código que dice que si lo descuelgas, da tono) y además parte de la gramática global (que dice que coger un teléfono es descolgarlo)?

          No estoy de acuerdo Al-K, lo que quieres traspasar de una obra a otra no son los objetos, sino como muchos las clases. El ’telefono rojo que suena en la luna’ en una aventura espacial retro, no se va a parecer mucho en su comportamiento al ’teléfono móvil ultramoderno de una fantasía tipo matrix’. Tal vez un core de ’teléfono’ sea común entre ambas obras, pero casi todas las respuestas serán diferentes del uno al otro.

          Así ’golpear a XX con el teléfono’ en el primer caso puede llevar a un ataque contundente muy relevante, mientras que sería ridículo en el segundo caso. Si no hemos sido cuidadosos en separar el código ’correcto’ entre el core ’teléfono’ de la jerarquía y el objeo final tendremos problemas. Por ejemplo, si hemos hecho primero la obra de la luna tendremos:

          Telefono Rojo:

          parseCommand:

          if... cosas no relacionadas con golpear y sí con el core de teléfono...

          if verbo.equals("golpear")... tratamiento del golpear....

          if... otras cosas no relacionadas con golpear...

          Todo ello mezclado. Si queremos hacer ahora el teléfono ultramoderno tendremos que empezar de ’cero’ o ser muy muy cuidadosos en lo que nos llevamos y lo que no.

          • Verbos-gramática VS objeto-acción 17 de enero 20:12, por dddddd

            El problema del ejemplo, el reutilizar el teléfono entre "mundos", es un problema de modelado y jerarquia de clases. Ambos teléfonos deberian tener una clase madre común, con las características propias de todos los teléfonos, y a partir de ella crear los particulares.

            De esta forma hay que retocar, pero siempre se hará sobre "mínimos" y es más dificil que se escape algo incoherente por el camino.

            Dicho de otra manera, no reutilizarias el telefono retro, sino su clase madre.

          • Verbos-gramática VS objeto-acción 17 de enero 21:11, por Al-Khwarizmi

            Bueno, respecto al tema de las variantes del teléfono, yo nunca he dicho que copiar y pegar objetos sea una panacea y lo resuelva todo. Por supuesto, siempre habrá muchas cosas que hay que personalizar para una nueva aventura (¡si no, qué aventuras tan aburridas tendríamos!). Pero si fijamos una ambientación particular, por ejemplo, época actual... hay un montón de aventuras que tienen puertas, sillas, etc. que funcionan exactamente igual. Y otras cosas (como neveras, lavadoras y demás) no se suelen modelar porque dan trabajo; pero si hubiera una librería de objetos reutilizables, también se haría.

            Y para otras ambientaciones, como la ciencia-ficción, nada impide que exista también una librería de objetos reutilizables de ciencia-ficción. Esto iría en la línea de las "épocas" de pyphiverses :)

            Sobre el ejemplo que pones de golpear con el teléfono, en realidad en AGE existe herencia (es herencia directa de objeto a objeto, o sea, un objeto puede verse como una clase si se quiere) pero no suele hacer falta usarla para nada. De hecho, imagínate hasta qué punto no hace falta, que creo que todavía nadie la ha usado nunca en la práctica :D En su momento la metí, porque bueno, "tenía" que haber herencia; pero en realidad el diseño del sistema la hace superflua.

            Me explico, tú le pones al teléfono una propiedad "teléfono" que lo marca como un teléfono, defines un código para "llamar", "coger" o "colgar" que se aplique a los objetos que tienen esa propiedad, y no necesitas crear una clase ni tener herencia explícita.

            Después, el ejemplo que tú dices no podría ser más sencillo. Defines un código que determina qué sucede cuando golpeas a alguien con un objeto con la propiedad "contundente". Esto podrías definirlo en el mundo, si estás implementando un esquema general de combate, o tal vez en cada posible criatura golpeada si quieres que reaccionen de distintas maneras. Después, clickeas el teléfono en el IDE, vas a propiedades, le pones la propiedad "contundente" a true, y está hecho.

  • Verbos-gramática VS objeto-acción

    17 de enero 13:56, por mastodon

    Creo que esto viene de un hilo del foro que lamentablemente no he mirado mucho porque he estado algo descolgado últimamente, así que igual me repito o digo algo que ya se ha superado :)

    Para mí hay tres conceptos diferentes que el buen parser debe ser capaz de interrelacionar con el mínimo trabajo para el programador (recalco esto último porque las herramientas deben ser eso: herramientas). Hasta ahora ninguno de los que conozco lo ha hecho de forma óptima.

    (no son definiciones académicas, ¿ok? )

    Verbos: palabras que denotan una acción y cuyo significado varía con el contexto de la conversación (como bien has explicado).

    Sintaxis: elaboraciones más o menos complejas donde la acción del verbo se aplica sobre un objeto, persona o escenario (ma o meno) y que nos sirven para expresar el resultado concreto que queremos conseguir. Es la herramienta que nos da el parser para interactuar con el mundo de juego.

    Acciones: las intenciones del jugador, en concepto.

    La acción no depende del contexto ni de los objetos. La acción NO se explica sobre la base de un objeto, ya que es un concepto general que justifica su existencia sin necesidad de lenguaje. Así que antes de definir ni una sola palabra del diccionario en un parser podemos saber que,por ejemplo, hay una acción que se explica de la siguiente manera:

    "Desplazar un objeto del entorno cercano a nuestras manos (o al bolsillo)."

    o siguiendo los ejemplos de tu artículo:

    "Desplazar el propio cuerpo desde una posición inferior hasta una a una altura superior, ya sea caminando o encaramándose a otro objeto"

    "Alzar un objeto o persona por encima de mi cabeza"

    Insisto, no hemos empezado a definir cómo decirle al parser que queremos coger algo, sólo el concepto de coger (o ascender o alzar). Es evidente que asociado a esa acción están las comprobaciones como que el objeto sea visible (y que exista!), que no esté, qué se yo, pegado a la pared, o sea muy pesado. Implicaciones de cortesía como que lo tenga otro personaje, etc. Entonces ¿para qué necesito asociar ese "concepto-acción" a cada objeto individual o clase de objetos? ¿No son aplicables estas comprobaciones y la ejecución misma de la acción a todos los objetos del mundo?

    Luego viene el punto delicado, la sintaxis. Transformar ese concepto-idea en palabras. Aquí es donde el creador del parser debería facilitar lo mejor posible al programador el establecer esta relación. Vale que ahí el lenguaje empieza a hacer de las suyas, pero podemos quitarnos la mayor parte del curro definiendo las formas más comunes de sintaxis de cada acción y luego (y aquí sí estaría justificado), asociar las excepciones al objeto. Claro, hay excepciones bastante tochas pero para ello existen las clases (en Java-AGE, I6), los Kinds (I7), las propiedades (I6, I7), etc.

    El modelo de I6 e I7 se basa en esta filosofía, que me parece bastante válida dentro de la complejidad que supone transformar palabras en ideas para un ordenador, y además sinceramente, creo que es la que menos código necesita, que de eso se trata.

    Por cierto también puede haber ambigüedad dentro de la misma relación verbo-objeto: "coger un autobús" dependerá de si vamos al trabajo o estamos en la grúa de un desguace. :P

    • Verbos-gramática VS objeto-acción 17 de enero 14:09, por Al-Khwarizmi

      La distinción semántica que acabas de hacer es algo que estuvimos discutiendo presi y yo el otro día en el IRC y no llegamos a un acuerdo.

      Para mí personalmente, un verbo siempre ha sido una palabra. Es decir, por ejemplo, "montar" es un verbo, que puede significar varias cosas dependiendo del contexto.

      Una acción, por otra parte, para mí es algo que sucede en el mundo, o en términos de programación, un código que se invoca (en patrones de diseño, una acción es eso, un código que se invoca).

      O sea, para mí el esquema sería el siguiente: oración con un verbo -> asignador de acciones (este término fue acuñado por Mel ayer en el IRC) -> ejecución de una acción.

      Entiendo, por lo tanto, que lo que yo entiendo por "verbo" y "acción" coincide con lo que entiendes tú.

      Pero según me pareció entender a juzgar por la discusión con presi, en el mundo de inform la gente en general les llama acciones a lo que nosotros llamamos verbos. ¿O no es así? Por lo menos sé que tanto presi como jenesis llaman acciones a los verbos, porque he hablado muchas veces con ellos de estos temas :D

      También en muchas otras conversaciones que he tenido con gente diversa en el foro he visto que la gente les llama acciones a los verbos, con lo cual ya pensaba que yo era el único que llamaba verbo a la palabra u orden y acción a la cosa que sucede en el mundo, y a veces en las respuestas que doy a la gente también les llamo acciones a los verbos para no hacerme un lío comunicativo con ellos.

      La verdad es que tu comentario me alivia, se ve que no soy tan raro, que ya empezaba a pensarlo :D

      • Verbos-gramática VS objeto-acción 17 de enero 14:20, por mastodon
        Básicamente sí, salvo que en Inform el "verbo" carece de entidad por sí mismo. Lo que defines en inform son gramáticas aplicadas a acciones (la denominación de "Actions" es de Nelson y engloba todo el meollo de las sintaxis + las acciones + la definición de las funciones generales y de objetos asociadas a las acciones)
      • Verbos-gramática VS objeto-acción 17 de enero 15:56, por Mel Hython

        Creo que la distinción que ha hecho Mastodon es muy importante y creo que en AGE se pierde, pero a parte no entiendo porque ’el verbo’ es la parte más importante del análisis.

        Cuando estamos tratando del input del jugador, vale, supongo que es así, pero cuando tratamos con el input del PNJ no lo veo nada claro.

        >> decir a pepe "¿Dónde está el castillo?"

        >> decir a pepe "¿Por dónde el castillo?"

        >> decir a pepe "¿Me puedes señalar el castillo?"

        etc...

        • Verbos-gramática VS objeto-acción 17 de enero 16:56, por Al-Khwarizmi

          Me resulta curioso que digas que en AGE se pierde esa distinción cuando yo siempre la hago y es precisamente gente que viene de otros sistemas la que se opone a ella. En qué se basa esa afirmación?

          Para que los psi entiendan Lo que se les dice hay otros métodos que no dan especial importancia al verbo. Son problemas distintos con soluciones distintas.

          • Verbos-gramática VS objeto-acción 17 de enero 17:55, por Mel Hython

            Verbos: palabras que denotan una acción y cuyo significado varía con el contexto de la conversación (como bien has explicado).

            Sintaxis: elaboraciones más o menos complejas donde la acción del verbo se aplica sobre un objeto, persona o escenario (ma o meno) y que nos sirven para expresar el resultado concreto que queremos conseguir. Es la herramienta que nos da el parser para interactuar con el mundo de juego.

            Acciones: las intenciones del jugador, en concepto.

            Por que en AGE no veo las ’acciones’ por ninguna parte, solo veo ’if’ con los ’verbos’.

            • Verbos-gramática VS objeto-acción 17 de enero 18:19, por Eliuk Blau

              Pues que en el resto de otros lenguajes las "acciones" no son más que dulce azúcar sintáctica para ocultar una larga lista de Ifs... :)

              Debe entenderse que en AGE se ocupa la sintaxis de Java. Es lo parecido que ocurre con I6 vs. I7. I7 no es más que un compendio de azúcar sintáctica para ocultar construcciones mayores y más complejas de I6.

              • Verbos-gramática VS objeto-acción 17 de enero 18:56, por Mel Hython
                Pero eso que llamas ’azucar’ sintáctico para mi representa la diferencia entre que el autor se dedique a poner los sinónimos necesarios (y en este caso hablo de expresiones no de palabras sinónimas), los que ’pide la obra’ o que desista porque ’es demasiado esfuerzo’.
                • Verbos-gramática VS objeto-acción 17 de enero 21:30, por Al-Khwarizmi

                  Si realmente lo que te importa es escribir

                  if ( equals(verb,"mirar") )

                  en lugar de

                  mirar:

                  te invito a que escribas un preprocesador que convierta lo segundo en lo primero, y estaré encantado de integrarlo en AGE, que como sabes es software libre.

                  A mí es que, sinceramente, no me importan tanto esas cuestiones puramente estéticas como para darme el trabajo, sobre todo mientras haya mejoras que hacer que afectan al funcionamiento real del sistema. Es una cuestión de prioridades. Ocultar al programador que existen esos ifs y ahorrarle unas pulsaciones de teclas sería bonito; pero no es prioritario.

          • Verbos-gramática VS objeto-acción 17 de enero 20:41, por presi

            Para que los psi entiendan Lo que se les dice hay otros métodos que no dan especial importancia al verbo. Son problemas distintos con soluciones distintas.

            Lo que habíamos pensado para pyphiverses es que efectivamente el parser de conversaciones de los PSIs no tiene nada que ver con el parser de entrada. Serían módulos distintos especializados en tratar estructuras distintas, es más según el tipo de PSIs se podrían cargar parsers de conversación distintos para cada situación, pues por ejemplo no entendería lo mismo un robot, que una persona o que un niño. Por cierto no conozco ningún sistema actual que tenga un parser específico para esto más allá de alguna librería para reconocer palabras sueltas.

            En lo único en que podría interactuar un PSIs con el parser de entrada (o principal, como se quiera llamar) es en que en un sistema en el que el jugador es un PSI más, los PSIs no jugadores podrían emitir entradas para el parser, un PSI podría emitir coger palanca y se trataría exactamente igual que si lo hubiera emitido el jugador, de hecho creo que eso es posible en AGE.

            • Verbos-gramática VS objeto-acción 17 de enero 21:23, por Al-Khwarizmi

              Sí, en AGE por un lado puedes mandar que un personaje ejecute una orden, y por otro lado puedes decirle algo.

              Si le mandas que ejecute una orden, se analiza exactamente igual que se hace con las órdenes del jugador (y ahí es donde entra el concepto de verbo).

              Si le dices algo, no hay un comportamiento predefinido, de momento lo que se hace es que el programador tiene acceso al String que has dicho, y que con eso se apañe para programar la respuesta del PSI. A la hora de "apañarse" puede usar la API de Strings de Java, que incluye también expresiones regulares, etc.

              Por supuesto, se puede definir una solución de más alto nivel por encima de ese "que se apañe"; pero el problema es un poco lo que has dicho tú, que hay cien mil maneras distintas en las que se pueden querer implementar conversaciones con PSI’s. Mi idea es definir alguna librería para facilitar alguna de esas maneras, en versiones posteriores de AGE; pero como de momento a nadie le ha hecho falta no me he dado mucha prisa.

      • Verbos-gramática VS objeto-acción 17 de enero 20:27, por presi

        Pero según me pareció entender a juzgar por la discusión con presi, en el mundo de inform la gente en general les llama acciones a lo que nosotros llamamos verbos. ¿O no es así? Por lo menos sé que tanto presi como jenesis llaman acciones a los verbos, porque he hablado muchas veces con ellos de estos temas :D

        ¿Y realmente no será que tú llamas verbos a las acciones? ;) ¿Porque entonces como llamas a la palabra exacta que escribió el jugador en la entrada? ¿forma verbal? ó ¿sinónimo del verbo? No me convence, veo mucho más claro llamar verbo a la palabra y acción a lo que desencadena un conjunto de verbos.

        Sin embargo sí hay una cosa que no me convence de la denominación acción de Inform y es que como se ha dicho en este artículo y sus comentarios, la traslación entrada -> acción -> código varía en función de los objetos e incluso del contexto, y eso no lo puedes saber hasta que no se ha ejecutado toda la cadena de responsabilidad (o cómo se le llame en cada sistema), ¿o quizá no hay que darle tantas vueltas y acción es un ente genérico quizá más cercano al verbo como palabra, por ejemplo en coger teléfono y coger palanca son la misma acción coger a pesar de que el concepto sea distinto?

        • Verbos-gramática VS objeto-acción 19 de enero 16:34, por dddddd

          Sin embargo sí hay una cosa que no me convence de la denominación acción de Inform y es que como se ha dicho en este artículo y sus comentarios, la traslación entrada -> acción -> código varía en función de los objetos e incluso del contexto, y eso no lo puedes saber hasta que no se ha ejecutado toda la cadena de responsabilidad (o cómo se le llame en cada sistema),

          ¿Quieres decir que I6 no tiene equivalente a esa "cadena"? (En I7 parece que los Kinds contextualizan la regla).

          ¿o quizá no hay que darle tantas vueltas y acción es un ente genérico quizá más cercano al verbo como palabra, por ejemplo en coger teléfono y coger palanca son la misma acción coger a pesar de que el concepto sea distinto?

          La acción es un ente genérico, que puede tener representación verbal directa en un determinado lenguaje humano y necesitar algo compuesto en otro. Pero para determinar que accion es desencadenada por una frase creo que necesitamos todo el contexto (objetos, estructura gramatical, etc...) que nos sea posible.

          Pienso que obtener ese contexto es en lo que es bueno nuestro cerebro y malas nuestras máquinas.

  • Verbos-gramática VS objeto-acción

    17 de enero 19:56, por Jenesis
    Muchas gracias a todos por vuestra participación.
    Así da gusto publicar artículos. :D
  • Verbos-gramática VS objeto-acción

    18 de enero 09:52, por mastodon

    La discusión sobre el azúcar sintáctico daría para otro artículo.

    Respecto al tema de este:

    Para mí, los inconvenientes que has dado son más bien ventajas. Sí, hay que ser cuidadosos para traspasar una gramática, pero ¿para qué quieres traspasar una gramática? ¡Lo que interesa traspasar de una aventura a otra son los objetos!

    Esto ya lo ha ilustrado Mel. Lo que interesa es traspasar el modelo de mundo, incluyendo la gramática y algunos de los objetos. Entiendo que es lógico que el anillo de poder pase de la "Comunidad" a las "Dos torres", y de esta al "Retorno del Rey", pero no el anillo del nibelungo que para empezar habría que dotar con el poder de la invisibilidad. Lo que quiero decir es que los objetos está íntimamente relacionados con la historia y el mundo de juego, y este se traspasa como un todo. Si se programa con un mínimo orden esto es posible en cualquier lenguaje.

    Y para otras ambientaciones, como la ciencia-ficción, nada impide que exista también una librería de objetos reutilizables de ciencia-ficción. Esto iría en la línea de las "épocas" de pyphiverses :)

    Nuevamente, más interesante es reutilizar el modelo de mundo dentro de una coherencia, y este incluye las gramáticas. No le veo sentido traspasar el ansible del "Mundo de Rocannon" a "Cita con Rama" (a riesgo de despertar la ira de Clarke desde su tumba)

    En su momento la metí, porque bueno, "tenía" que haber herencia; pero en realidad el diseño del sistema la hace superflua.

    Tu mismo estás proponiendo una solución mejor, y desde luego nada superflua, al dar a entender que se podría asociar la interpretación de la gramática a algún tipo de clase base, incluso a un conjunto de métodos estáticos de clase, ya que esta aplica sobre todos los objetos del mundo menos las excepciones. Pero es fundamental separar el parseado de la sintaxis de la ejecución de la acción. Eso sí, yo veo el "action-dispatcher" más como una estructura aparte de la jerarquía de objetos de juego.

    • Verbos-gramática VS objeto-acción 18 de enero 13:37, por dddddd

      Y para otras ambientaciones, como la ciencia-ficción, nada impide que exista también una librería de objetos reutilizables de ciencia-ficción. Esto iría en la línea de las "épocas" de pyphiverses :)

      Nuevamente, más interesante es reutilizar el modelo de mundo dentro de una coherencia, y este incluye las gramáticas.

      Creo que aquí hablais practicamente de lo mismo. Mastodon, puedes echarle un ojo a la propuesta de pyphiverses, si no lo has hecho ya, y verás que la jerarquia propuesta encaja con lo de mantener la coherencia, utilizando las "capas" correctamente.

    • Verbos-gramática VS objeto-acción 18 de enero 13:45, por Al-Khwarizmi

      No digo que la herencia como concepto abstracto sea superflua. Digo que la herencia en el caso particular de AGE es superflua, porque las propiedades te hacen todo lo que hace la herencia, y de forma más flexible. Esto es por la forma en que está planteado AGE en particular.

      Sobre mover objetos contra mover gramáticas, creo que no llegaremos a un acuerdo sobre qué es lo más importante porque hay varias maneras diferentes de diseñar y plantear aventuras, y según qué manera aplique uno, le vendrá mejor un sistema u otro. AGE está planteado desde el principio de forma orientada a objetos pura, y puramente bottom-up (ir agregando pequeñas partes hasta formar el todo), porque es la forma en que me gusta diseñar a mí. A ti y a Mel, por los planteamientos que hacéis, me parece que os gusta más diseñar top-down, así que seguramente se os ajuste más un enfoque menos centrado en los objetos. No discutiré cuál es mejor, porque tal vez no haya uno "mejor". A mí personalmente mi enfoque me gusta más y me hace más fácil el desarrollo de aventuras.

      Sí que me gustaría detallar una cosa, y es que... dices que "los objetos están íntimamente relacionados con la historia y el mundo de juego". Bueno, para mí la aventura ideal siempre ha sido una en la que la gran mayoría de los objetos son irrelevantes, como en la vida real, así que no deberían estar relacionados con la historia. Y creo que en muchas aventuras no se modela más que lo estrictamente necesario entre otras cosas porque los sistemas tampoco facilitan hacer otra cosa. Si para que en la casa donde investigo un asesinato haya un piano que se pueda tocar (pero que no ayude a avanzar la historia) tengo que andar yendo a la gramática a definir un verbo, pues no lo pongo. Si voy a una librería "objetos de la época actual" y digo, anda, un piano, lo copio y lo pego en mi aventura y pongo una flechita con el PUCK para indicar dónde está, y el piano funciona sin más, a lo mejor lo pongo, y de paso añado un cuadro y unas cortinas :D

      Los hitos fundamentales de la historia al final los vas a tener que programar igual, y no te va a salvar ni copiar objetos ni copiar gramáticas. Pero a la hora de dotar de detalle al mundo, copiar objetos tiene muchas ventajas.

  • Verbos-gramática VS objeto-acción

    18 de enero 14:27, por dddddd

    Una cuestión importante, que no ha salido a relucir es...

    ¿Alguna de las alternativa que se proponen dificultan o facilitan la internacionalización/traducción de las obras? Un buen sistema debe proporcionar esa flexibilidad. Mi primera intuición es:

    Parece que la existencia de unas "acciones universales" crea una capa intermedia entre la gramática (o giros propios de una lengua) y lo que acaba ocurriendo en la ficción, facilitando la traducción.

    Por otra parte, utilizar cadenas de texto en los objetos, para comparar con verbos, provocaria tener que rehacer la lógica del objeto durante la traducción, ya que determinados sinónimos en una lengua no tendrian el mismo sentido en otra. Esto provoca dificultades de reutilización.

    Creo que sí debe existir, de alguna manera, el concepto de verbo/acción, separado de las cadenas de texto. El sistema de AGE, pero con comparaciones desligadas de la pura cadena de texto podria ser una alternativa viable.

    • Verbos-gramática VS objeto-acción 18 de enero 16:21, por Al-Khwarizmi

      El soporte de internacionalización de AGE no está hecho, pero está pensado desde hace tiempo. Es compatible con la comparación de cadenas. Sencillamente, igual que ahora mismo hay una lista de verbos que te permite pasar por ejemplo de imperativo a infinitivo, se usaría una lista así para traducir los verbos a un idioma. O sea, por así decirlo, los verbos en el idioma de la aventura serían considerados como "formas verbales" del verbo en el idioma del programador.

      En realidad creo que es más fácil que con el sistema de gramáticas, porque una vez hecho ese soporte de internacionalización el autor no necesitará traducir ningún verbo, ni siquiera una vez. Con que esté definido ese fichero de equivalencias verbales, ya estará.

      En un estado más avanzado, se podrían introducir descripciones de los objetos asociadas a distintos idiomas, de forma que por ejemplo si un alemán y un inglés se conectaran a un MUD hecho con AGE, el alemán vería las descripciones en alemán y el inglés en inglés. Pero a eso no sé si llegaré algún día :D

  • Entre azúcares y otras cosas nos hemos diluido un poco... Voy a centrar de nuevo el tema en la "acción".

    Al-Khwarizmi dijo:

    Una acción, por otra parte, para mí es algo que sucede en el mundo, o en términos de programación, un código que se invoca (en patrones de diseño, una acción es eso, un código que se invoca).

    Mel Hython dijo:

    en AGE no veo las ’acciones’ por ninguna parte, solo veo ’if’ con los ’verbos’.

    Yo (que no lo conozco a fondo) no he visto más acciones en AGE que las ligadas al modelo de mundo mínimo que tiene... en forma de eventos onGet, onPut y poco más. Creo que esto deberia abstraerse/generalizarse más, pero no incluyendo mas onXXX, sino eliminandolos todos para posteriormente incluir el concepto de acción y eventos asociados. Puede que esté totalmente equivocado y que AGE tenga un mecanismo para ésto, pero permitidme seguir.

    Me parece entender que para Al-Khwarizmi, las acciones están dentro de los if() si las definimos como "código que se invoca". Creo que eso no las convierte en "acción". Y lo digo porque el resto de los objetos del mundo no "ven" que ha sucedido una acción... pueden ver unas consecuencias, pero no tienen una "etiqueta" que les defina lo que acaba de pasar.

    Ahora voy a exponer unas ideas condensadas (me corregis, por favor) tras charlar por IRC con presi y Eliuk.

    Considero que esa platónica "etiqueta de la acción" (que llamaré "accion universal" [AU] y que mastodon ha definido como independiente del lenguaje) es sumamente importante.

    Hay una cierta recursión conceptual, ya que para definir una AU normalmente utilizamos verbos, pero hay que verlo como cosas distintas. Una vez determinada, la AU es no-ambigua. Esto viene a ser lo que expone jenesis en el artículo.

    Las AAUU existirán para que:

    — Los objetos del mundo puedan reaccionar consecuentemente con su entorno, sin tener que hacer parseado adicional (¡para eso está el parser!). Un personaje no jugador (PNJ), Zacarias, puede presenciar un "montar", pero solo el caballo o el puzle puede informar de lo que puede pasar o ha pasado. Zacarias puede querer darle la fusta al jockey que acaba de subirse al caballo. En el caso del puzle puede querer acercarse a ayudar. Programar en Zacarias estas reacciones en base a strings parece complejo. Es mucho más directo si puede saber directamente la AU. Si los eventos de AGE permiten esto genial.

    — El autor que maneja objetos creados (reutilización+personalización) pueda manejar conceptos más concretos que ambiguos verbos.

    El programador de un objeto diferenciará acepciones de un mismo verbo. En un caballo (como objeto directo) "montar" puede ser "AU_poner_encima" o "AU_acto_sexual".

    Ejemplo en el foro, aqui no lo sé formatear.

    El parser ha de obtener información [asociar_accion()] de los objetos, utilizar esa información y, posiblemente, volver a consultar a los objetos, dándoles más contexto para que puedan ofrecer información más precisa a su vez... hasta que por fin haya una AU que se pueda ejecutar (via acc_*) y provocar cambios directos en el mundo y reacciones indirectas en el entorno.

    ¿Este proceso puede ser a lo que se referia Mel Hython con "asignador de acciones"?

    ¿Os parece que tiene sentido ésto que salio del IRC?

    • Verbos-gramática VS objeto-acción (Acciones Universales) 19 de enero 10:03, por Al-Khwarizmi

      En AGE efectivamente para las acciones por defecto harías eso con los eventos, y para las acciones que creas tú hay varias maneras de hacerlo, una por ejemplo podría ser con el método update. Pones en el método de actualización de Zacarías que mire si ahora el jockey está en estado montado, y si lo está, haces cosas. Alternativamente, también se pueden "escuchar" mensajes que suceden en la sala, es una manera sencilla de mirar si pasa algo utilizando una expresión regular.

      A mí es que no me gusta crear capas abstractas por el medio, porque quiero un modelo de mundo simple y flexible, en el que tenga claro que se puede hacer de todo con facilidad; y que esté directamente en contacto directo con el texto que para mí es el corazón de un juego de texto y con lo que debe trabajar (en cuanto se crean muchas abstracciones por el medio, se corre el peligro de acabar como en Inform donde apenas ni puedes manipular la cadena de entrada). Pero vamos, es una cuestión puramente subjetiva. Tu modelo también parece coherente, y mejor que haya diversidad...

      • Pones en el método de actualización de Zacarías que mire si ahora el jockey está en estado montado

        Ahá! Ahí aparece por fin la consecuencia de la acción. Entiendo. El estado indicado por la propiedad.

        Alternativamente, también se pueden "escuchar" mensajes que suceden en la sala, es una manera sencilla de mirar si pasa algo utilizando una expresión regular.

        Esto es a lo que me refieron con tener que volver a parsear, posiblemente sin el contexto suficiente.

    • No sé qué es el asignador de acciones porque no estoy en el IRC, pero a mi todo esto me suena que ya está contemplado por inform. ¿O cuál es la mejora cualitativa que se pretende sobre los sistemas actuales?

      Los objetos del mundo puedan reaccionar consecuentemente con su entorno, sin tener que hacer parseado adicional (¡para eso está el parser!).

      Eso es porque los objetos reaccionan a la acción, en el 99% de los casos, y no a la entrada.

      Zacarias, puede presenciar un "montar", pero solo el caballo o el puzle puede informar de lo que puede pasar o ha pasado

      Idem de lo anterior.

      El autor que maneja objetos creados (reutilización+personalización) pueda manejar conceptos más concretos que ambiguos verbos.

      Si se considera interesante tener, como opina Al-K, objetos simples para reutilizar, evidentemente.

      El parser ha de obtener información [asociar_accion()] de los objetos, utilizar esa información y, posiblemente, volver a consultar a los objetos, dándoles más contexto para que puedan ofrecer información más precisa a su vez... hasta que por fin haya una AU que se pueda ejecutar (via acc_*) y provocar cambios directos en el mundo y reacciones indirectas en el entorno.

      No entiendo el algoritmo, lo siento. Tampoco que haya que llamar varias veces al objeto. Supongo que está relacionado con que el objeto solo no puede tener el conocimiento de "lo que hay fuera" y se trata de un trabajo conjunto para determinar lo que has llamado la AU.

      En I7 haces algo como:

      Instead of riding a person, try making love with it.

      O, si se quiere afinar sobre uno de los sinónimos concretos:

      Understand "montar [a person]" as making love with it.

      Comentando la respuesta de Al-k:

      Pones en el método de actualización de Zacarías que mire si ahora el jockey está en estado montado, y si lo está, haces cosas.

      Sí, si quieres permitir que se monte. Pero también podrías querer:

      Before Zacarias trying riding the horse, say "Cuidado, forastero, ese es mi caballo" instead.

      A mí es que no me gusta crear capas abstractas por el medio, porque quiero un modelo de mundo simple y flexible, en el que tenga claro que se puede hacer de todo con facilidad; y que esté directamente en contacto directo con el texto que para mí es el corazón de un juego de texto y con lo que debe trabajar (en cuanto se crean muchas abstracciones por el medio, se corre el peligro de acabar como en Inform donde apenas ni puedes manipular la cadena de entrada).

      Bueno, es que el modelo orientado a objetos va de abstracción. Para mí abstracción es sinónimo de simpleza y flexibilidad.

      Por cierto aclaro que en inform sí es posible tratar la entrada del jugador, con o sin expresiones regulares, ya sea para redirigir la acción o como simple consulta para casos excepcionales donde necesitemos saber qué palabra exacta se ha tecleado.

      No pretendo ser un paladín de inform, nada más lejos, aunque lo parezca ;) Simplemente me da la impresión de que se están planteando cosas que ya están superadas o que se pueden hacer sin necesidad de partir de cero.

      • No puedo estar más de acuerdo con Mastodon. En lo que he escrito en el foro pretendía mostrar lo mismo que tirando del hilo de estas reflexiones al final te encuentras con una I muy gorda.

        Y sé que no os gusta nada I7, pero hay muchísimas respuestas ya en él.

        No todas, no, intentaré hacer una entrada en mi blog este fin de semana o el siguiente explicando lo que me parece que le falta y porqué creo que le falta y sería muy difícil dárselo.

        Por otra parte no voy a deciros que no lo hagáis, ya lo he hecho antes y me arreciaron las críticas, pero si lo váis a hacer desde cero, por favor, por favor, por favor, leeros detalladamente las referencias, todo lo que se ha hecho en el pasado por aquí, lo que se intentó y lo que ya incluye I7.

      • ¿O cuál es la mejora cualitativa que se pretende sobre los sistemas actuales?

        Independencia del parser (analizador gramatical).

        Pones en el método de actualización de Zacarías que mire si ahora el jockey está en estado montado, y si lo está, haces cosas.

        Sí, si quieres permitir que se monte.

        En el ejemplo Zacarías no queria montarse, queria reaccionar cuando alguien se monte en el caballo.

  • Verbos-gramática VS objeto-acción

    28 de enero 20:27, por jarel

    Me parece muy interesante esta filosofía de gramáticas orientadas a objetos concretos, y si a esto le sumamos una enorme librería de objetos tipo concienzuda y detalladamente programados con las acciones que pueden recibir y generar... Me estoy imaginando un IDE con una pestaña de diccionario en la que buscas el tipo de objeto que tienes pensado crear, por ejemplo un "tablón", y te aparece el objeto más parecido posible de la librería, en este caso una tabla. Entonces creas tu objeto como: clase_tabla tablon "tablon"; con lo que heredaríamos todas las acciones y características de la tabla, así sin más. En el mismo IDE consultamos el código de la tabla, y reemplazamos o ampliamos en nuestro código los detalles que necesitemos.

    Si este es el modelo mundo de AGE, ya digo que me parece una gran idea. Aunque más trabajosa que las gramáticas orientadas a acciones de Inform.


Seguir la vida del sitio  RSS 2.0: Artículos, Comentarios | Mapa del sitio | SPIP
CC Some rights reserved El contenido está disponible bajo los términos de Atribuir - Compartir bajo la misma licencia 3.0 ó 2.5 de Creative Commons.