Foros del Web » Programación para mayores de 30 ;) » Programación General »

Problema Prolog Cuadrado Romano - Latino

Estas en el tema de Problema Prolog Cuadrado Romano - Latino en el foro de Programación General en Foros del Web. Hola a todos y gracias por adelantado por cualquier ayuda Tengo que crear un programa de Prolog CSP para un cuadrado romano, que consiste en ...
  #1 (permalink)  
Antiguo 30/12/2012, 07:07
 
Fecha de Ingreso: diciembre-2012
Mensajes: 1
Antigüedad: 11 años, 10 meses
Puntos: 0
Problema Prolog Cuadrado Romano - Latino

Hola a todos y gracias por adelantado por cualquier ayuda

Tengo que crear un programa de Prolog CSP para un cuadrado romano, que consiste en un cuadrado de N filas y columnas, consistentes de de grupos de números desde el 1 al N que están dispuestos de tal manera que ninguna fila o columna contiene el mismo número dos veces. For ejemplo, el cuadrado del orden de dos nos da dos cuadrados

1 2
2 1

2 1
2 1


Tengo que escribir un programa en Prolog que nos de todas las posibilidades de número de cuadradados romanos del orden N sea. He adaptado el programa de SUDOKU que está en la documentación de SWI http://www.swi-prolog.org/man/clpfd.html


Aquí está el código que tengo finalizado por el momento:


%------------------------------------------------------------------------------------------

:- use_module(library(clpfd)).

cuadrado_romano(Numero, Cuenta):-

findall(_, solucion(_Soln, Numero), Sa),
length(Sa, Cuenta).

solucion(Matriz, Numero):-
Suma #= abs((1 + Numero)*(Numero / 2)),
length(Cuadrado, Numero), maplist(longitud(Numero), Cuadrado), append(Cuadrado, Singlelist),
Singlelist ins 1..Numero,
maplist(all_distinct, Cuadrado), maplist(suma(Suma), Cuadrado),
transpose(Cuadrado, Columnas), maplist(all_distinct, Columnas), maplist(suma(Suma), Columnas),
label(Matriz).

%-----------------------------------------------------------------------------
% "Mi predicado para checar la longitud"
longitud(N, Lista):-
length(Lista, N).

%-----------------------------------------------------------------------------
% "Mi predicado para checar la suma"
suma(N, Lista):-
sum_list(Lista, N).

%------------------------------------------------------------------------------------------

Por el momento he conseguido realizar este codigo, pero cada vez que llamo al predicado

?-cuadrado_romano(3, Cuenta).

Recibo este error:
| .
ERROR: is/2: Arguments are not sufficiently instantiated
^ Exception: (10) setup_call_catcher_cleanup('$bags':'$new_findall_b ag', '$bags':findall_loop(_G19, user:solucion(_G13, 3), _G21, []), _G3542, '$bags':'$destroy_findall_bag') ?


Cuando llamo al predicado
?-solucion(Matriz, 3).

SWI me da este mensaje

ERROR: is/2: Arguments are not sufficiently instantiated


Llevo días atascado con ello y no doy con la raiz del problema, ¿alguien puede ayudarme por favor? Un saludo y feliz 2013!

Etiquetas: cuadrado, latino, programa, prolog
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:08.