• Sábado 21 de Septiembre de 2024, 21:53

Autor Tema:  Java+prolog  (Leído 2705 veces)

neostereo

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Java+prolog
« en: Martes 4 de Diciembre de 2007, 04:58 »
0
Hola, tengo un crucigrama en prolog. Tengo la interfaz hecha en java, desde donde consulto por este programa en prolog, que me tira los reusltados correctos (si lo pruebo desde prolog) pero cuando lo intento pasar a java no me muestra los reulsultados bien instanciados:

Crucigrama en prolog:

% Palabras del Diccionario. %

:-dynamic p/1.
:-dynamic slot/2.

p([h,o,l,a]).
p([d,a,r,d,o]).
p([d,i,e,g,o]).
p([d,i,e,z]).
p([m,e,s,a]).
p([a,u,t,o]).
p([p,u,e,r,t,a]).
p([g,a,t,o]).
p([p,e,r,r,o]).
p([t,i,o]).
p([t,i,z,a]).


% Representacion de los slots verticales y horizontales. %

% slot(vertical,[[1,1],[2,1],[3,1],[4,1],[5,1]]). %   diego
%slot(vertical,[[2,3],[3,3],[4,3],[5,3]]).        %   auto
% slot(vertical,[[0,5],[1,5],[2,5],[3,5]]).        %   hola

% slot(horizontal,[[1,1],[1,2],[1,3],[1,4],[1,5]]). %   dardo
%slot(horizontal,[[2,0],[2,1],[2,2],[2,3]]).       % tiza.
% slot(horizontal,[[4,3],[4,4],[4,5]]).            % tio


Esos serian los datos digamos. Desde java, tengo una interfaz la cual le permite al usuario seleccionar las casillas negras. Entonces las que quedan blancas seran los slots. Estos slots son assertados dinamicamente desde java hacia prolog. Las palabras posibles son las que estan arriba con p([p,a,l,a,b,r,a]).

Este es el fragmento de codigo de java que llamo a prolog:


3 ?- Grilla = [[[2,0],Letra20],[[2,1],Letra21],[[2,2],Letra22],[[2,3],Letra23],[[2,3],Letra23],[[3,3],Letra33],[[4,3],Letra43],[[5,3],Letra53]], nombreSignificativo([[[2,0],Letra20],[[2,1],Letra21],[[2,2],Letra22],[[2,3],Letra23],[[2,3],Letra23],[[3,3],Letra33],[[4,3],Letra43],[[5,3],Letra53]]).

Grilla = [[[2, 0], h], [[2, 1], o], [[2, 2], l], [[2, 3], a], [[2, 3], a], [[3, 3], u], [[4|...], t], [[...|...]|...]],
Letra20 = h,
Letra21 = o,
Letra22 = l,
Letra23 = a,
Letra33 = u,
Letra43 = t,
Letra53 = o ;

Osea, esta perfecto. Es la solución mas feliz de todas! El tema es que cuando hago esa consulta desde java, no se mapea tan felizmente. Ahora te voy a mostrar el procedimientito que rehice nuevamente para hacer la consulta a prolog desde java:
(Ah, ya checkie que los asserts los este haciendo bien, osea, los slots los esta assertando perfectamente, lo probe para ir acotando los posibles errores que pueden ser).

private void prueba(String GS){


                            String t4 = "Grilla = " + GS + ", nombreSignificativo(Grilla)";
                            Query q4 = new Query(t4);


                               if ( q4.hasSolution()) {

                                        Hashtable Solucion = q4.oneSolution();                                      // Aca entra perfectamente y esto lo hace bien.
                                         System.out.println("Solucion query = " + Solucion.toString());    
 
                                        String GrillaSucia = Solucion.get("Grilla").toString();                  
                                        System.out.println("Grilla = " + GrillaSucia);                               // Impresion 2
                                         System.out.println("letra00 = " + Solucion.get("Letra00"));            // Impresion 3

                                      MostrarSolucion(GrillaSucia);

                           }
}



Impresion 2: Grilla = '.'('.'('.'(0, '.'(0, [])), '.'( _15, [])), '.'('.'('.'(0, '.'( 1, [])), '.'(_16, [])), '.'('.'('.'(0, '.'(2, [])), '.'(_17, [])), '.'('.'('.'(0, '.'(3, [])), '.'(_18, [])), '.'('.'('.'(1, '.'(3, [])), '.'(_19, [])), '.'('.'('.'(2, '.'(3, [])),                      '.'(_20, [])), '.'('.'('.'(3, '.'(3, [])), '.'(_21, [])), [])))))))

Y aca surge el problema! No me esta instanciando las variables de las letras (Ej: LetraXY) que estan "dentro" de Grilla. Si te fijas detayadamente, aparecen las coordenadas [0,0] con la letra _15, las coordenadas [0,1], con la letra que seria la instanciacion de Letra01 = _16, y asi siguiendo.. Osea, no me esta tirando las letras instanciadas (a,g,r,etc), sino como si fueran referencias a las letras esperadas. Cosas de la forma: _numero representando a las letras de las palabras.


Deberia mostrarme cosas ya instanciadas!! Y me hace eso. Digamos que dentro de Grilla que es un string la cual yo consulto a prolog desde java tiene variables (palabras con mayuscula) que prolog debe instanciar. Si hago la consulta manualmente desde prolog (mas haya de cual sea la consulta) anda barbaro. Pero si lo hago desde java, como acabo de motrar me tira eso con _numero. Si podria hacer que me tire cosas diferentes a _numero listo,pero nose por que hace eso.


Gracias y hasta luego



PD: la fotito se las debo por que: Aún no dispones de suficientes permisos para incluir links (enlaces) en tus mensajes

...