CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 11 Dic 2017 03:22

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 9 mensajes ] 
Autor Mensaje
NotaPublicado: 17 Ene 2011 11:26 
Artículo publicado
-------------------

El artículo "Verbos-gramática VS objeto-acción" ha sido validado por
Jenesis.

** Verbos-gramática VS objeto-acción **
por Jenesis el Lunes 17 de enero de 2011

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 (...)

-} http://spac.caad.es/spip.php?article253


Arriba
  
 
NotaPublicado: 17 Ene 2011 13:07 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
He vuelto a tener que aprobar el mensaje, parece que el usuario SPAC sigue sin ser reconocido por el foro. Estaré alerta para aprobar futuros anuncios de publicaciones en el webzine, pero si alguien ve que su artículo no sale aquí anunciado, que me avise.

Saludos
Jenesis

_________________
Si la mentira tuviera color, todos seríamos daltónicos...


Arriba
 Perfil  
 
NotaPublicado: 17 Ene 2011 13:26 
Desconectado
Implementador
Implementador

Registrado: 13 Feb 2005 18:57
Mensajes: 1855
Muy bueno jenesis. Unos ejemplos excelentes para ilustrar un importante tema.


Arriba
 Perfil  
 
NotaPublicado: 19 Ene 2011 07:47 
Desconectado
Implementador
Implementador

Registrado: 13 Feb 2005 18:57
Mensajes: 1855
Pongo un pseudo-python para ilustrar un comentario. En spac no lo consigo darle formato.

Código:
class Caballo():
    def asociar_accion(contexto_parser):
        # llamada por el parser
        if (contexto_parser.str_verbo == 'montar'):
            # informamos de las acciones posibles para ese verbo
            # podremos usar el contexto que nos da el parser (CD, CI, etc.)
            if (contexto.tal == cual and ....):
                # hay contexto suficiente, una única UA
                UAs = (UA_poner_encima)
            (...)   
            else:
                # no hay contexto suficiente, informamos de todas las opciones
                UAs = (UA_poner_encima, UA_acto_sexual) #lista en python
            return UAs

    def acc_poner_encima(contexto_accion):
    # llamada por el parser
        (...)

    def acc_acto_sexual(contexto_accion):
        (...)


Arriba
 Perfil  
 
NotaPublicado: 19 Ene 2011 08:33 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
dddddd escribió:
Pongo un pseudo-python para ilustrar un comentario. En spac no lo consigo darle formato.


Sí, es otra de las florituras del SPIP.
El día que se me hinchen las narices os digo dónde va a ir a parar el SPIP y todas sus manías... aunque me cueste 6 meses pasar todo su contenido al nuevo CMS... :evil:

_________________
Si la mentira tuviera color, todos seríamos daltónicos...


Arriba
 Perfil  
 
NotaPublicado: 19 Ene 2011 09:45 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 23 Mar 2010 20:11
Mensajes: 1141
Ubicación: Valencia
Pues ya que estamos con el nuevo portal..... :roll:

_________________
El humor existe para recordarnos que por muy alto que sea el trono en el que uno se siente, todo el mundo usa su culo para sentarse.


Arriba
 Perfil  
 
NotaPublicado: 19 Ene 2011 13:06 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 24 Dic 2010 14:37
Mensajes: 891
dddddd escribió:
Pongo un pseudo-python para ilustrar un comentario. En spac no lo consigo darle formato.

Código:
class Caballo():
    def asociar_accion(contexto_parser):
        # llamada por el parser
        if (contexto_parser.str_verbo == 'montar'):
            # informamos de las acciones posibles para ese verbo
            # podremos usar el contexto que nos da el parser (CD, CI, etc.)
            if (contexto.tal == cual and ....):
                # hay contexto suficiente, una única UA
                UAs = (UA_poner_encima)
            (...)   
            else:
                # no hay contexto suficiente, informamos de todas las opciones
                UAs = (UA_poner_encima, UA_acto_sexual) #lista en python
            return UAs

    def acc_poner_encima(contexto_accion):
    # llamada por el parser
        (...)

    def acc_acto_sexual(contexto_accion):
        (...)


A mi esa alternativa me parece simplemente mal, en seudo-python (por manejarse igual) para mi debería ser algo como:

1. Los objetos sólo deberían interactuar entre ellos y con lo que has llamado 'acciones universales' (no sé porqué universales cuando lo puedes llamar simplemente 'evento' o 'acciones'), así aprox.:

Código:
class Caballo():

    def acc_poner_encima(contexto_accion):
    # llamada por el parser
        (...)

    def acc_acto_sexual(contexto_accion):
        (...)


2. pero.... esto es en realidad mala idea porque en muchas ocasiones no querrás 'interceptar' completamente la acción, así que yo lo veo más bien como:

Código:
class Caballo():

    before_acc_poner_encima = {fun1,fun2}
    before_acc_acto_sexual = {fun3}
    after_acc_poner_encima = {}
    after_acc_acto_sexual = {}

    def fun1(contexto_accion):
        (...retorna algo que indica si debe seguir o no...)

    def fun2(contexto_accion):
        (...)

    def fun3(contexto_accion):
        (...)


3. Si Caballo hereda de algo llamado 'Objeto' que tenga funcioncioncillas de esas predefinidas se simplifica así:

class Caballo(General.Objeto):

before_acc_poner_encima = {fun1,fun2}
before_acc_acto_sexual = {fun3}

def fun1(contexto_accion):
(...retorna algo que indica si debe seguir o no...)

def fun2(contexto_accion):
(...)

def fun3(contexto_accion):
(...)
[/code]

4. La sintaxis no debería estar 'incrustada' en el caballo, sino en el parser del jugador, así:

Código:
import gramatica from Gramatica.Jugador
import rules, actions from World;

class Parser.Jugador(General.Parser):

    def parser(input):
        (...separa el input, le aplica el vocabulario, sustituye pronombres, analiza sn...)
        return contexto_parser

    def asociar_accion(contexto_parser):
        matches = gramatica.match(contexto_parser)
        for( match in matches)
               # verificar objetos por unas reglas del mundo
               for( object in match.objects )
                      # marcamos que aún es válido
                      match.still(rules.visility(object))
                      match.still(rules.whatever(object))
                      (...)
                      # o incluso
                      for( rule in rules.toBeApplied )
                             match.still( rules( rule, object) )
                      (...)
              # Descartados matches de objetos no usables
              # Aplicamos otros descartes contextuales
              (...)
              # Aplicamos una priorización/desambiguación
              (...)

       # Aqui ya tenemos un 'match' seleccionado llamado 'match_selected'
       # Dejamos ahora que cada objeto opine sobre la acción
       for( object in match_selected.objects )
           if object.before( match_selected.action, match_selected.role(object) )
               (...esto puede interceptar la acción... hay que tratar los resultados, etc...)

        # Finalmente llamamos a la 'acción' definida en general
        if actions[match_selected.action].do( match_selected )
               (... de nuevo tratamiento de errores, etc...)

        # Ahora aplicar las reacciones y luego los afters
        for ( object in player.location.objects )
                object.react( match_selected )

        for ( object in match_selected.objects )
           if object.after( match_selected.action, match_selected.role(object) )
               (...esto puede interceptar la acción... hay que tratar los resultados, etc...)
        (...)


5. En la clase genérica 'Objeto' tendrías:

Código:
class Objeto():

    def before(action, role):
          (...invocación de la before_acc_adecuada...)

   
    def after(action, role):
          (...invocación de la before_acc_adecuada...)


Complicadillo, ¿no?

Pues la gracia es que si le añades un poco de 'azucar' sintático peculiar se llama Inform.

En mi blog, cuando pueda os completo la imagen de lo que le falta al Inform.


Arriba
 Perfil  
 
NotaPublicado: 19 Ene 2011 13:54 
Desconectado
Implementador
Implementador

Registrado: 13 Feb 2005 18:57
Mensajes: 1855
Johan Paz escribió:
lo que has llamado 'acciones universales' (no sé porqué universales cuando lo puedes llamar simplemente 'evento' o 'acciones')


Por distinguir claramente el concepto. Verbo, acción, evento... están demasiado sobrecargadas en el hilo.


Arriba
 Perfil  
 
NotaPublicado: 27 Ene 2011 17:36 
Desconectado
Implementador
Implementador

Registrado: 13 Feb 2005 18:57
Mensajes: 1855
Johan Paz escribió:
2. pero.... esto es en realidad mala idea porque en muchas ocasiones no querrás 'interceptar' completamente la acción, así que yo lo veo más bien como:


Era un ejemplo simplificado, centrado en el asunto del artículo, por eso no se desarrolla en ese sentido. Estamos de acuerdo: normalmente se necesitan "before", "after" o equivalentes...


Arriba
 Perfil  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 9 mensajes ] 

Todos los horarios son UTC + 1 hora


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro

Buscar:
Saltar a:  
cron
Desarrollado por phpBB® Forum Software © phpBB Group
Traducción al español por Huan Manwë para phpBB-Es.COM