
Ayuda
Publicado por alemon (1 intervención) el 15/11/2005 22:35:15
alguien me puede decir donde meti mal los dedos ????
Hice el sig programa en visual prolog 5.2
un rompecabezas, una matriz de 3 x3 con 8 numeros desordenados, y un casillero libre para mover y ordenar estos numeros.
Use el metod de produccion con reglas y estrategia de control, use primero en profundidad. En la estrategia le paso el estado inicial del la matriz y el estado final.
al hacer TEST GOAL me tira una lista de errores que no entiendo.
Alguien me puede dar una mano ??
DOMAINS
cordx, cordy = integer
num = integer
pos = p(cordx,cordy,num)
est = pos*
lest = est*
PREDICATES
append(est,est)
pertenece(pos,est)
pertenece1(est,lest)
mov(cordx,cordy)
intercambio(est,pos,pos,est)
mover(est,est)
pp(est,est,integer,lest,lest)
CLAUSES
append([],L).
append([Ca|Co],[Ca|L]):- append(Co,L).
pertenece(E,[]):- fail.
pertenece(E,[C|_]):- E=C.
pertenece(E,[_|R]):- pertenece(E,R).
pertenece1(E,[]):- fail.
pertenece1(E,[C|_]):- E=C.
pertenece1(E,[_|R]):- pertenece1(E,R).
mov(X,Y):- X= -1, Y= 0.
mov(X,Y):- X= 1, Y= 0.
mov(X,Y):- X= 0, Y= -1.
mov(X,Y):- X= 0, Y= 1.
intercambio([],_,_,S).
intercambio([C|R],P1,P2,S):-
C=P1,
append([P2],S),
intercambio(R,P1,P2,S).
intercambio([C|R],P1,P2,S):-
C=P2,
append([P1],S),
intercambio(R,P1,P2,S).
intercambio([C|R],P1,P2,S):-
append([C],S),
intercambio(R,P1,P2,S).
mover(E1,E2):-
pertenece(p(X,Y,0),E1),
mov(Xp,Yp),
Xm = X + Xp, Ym = Y + Yp,
X <= 3, Y <= 3,
pertenece(p(Xm,Ym,N),E1),write(N),
intercambio(E1,p(X,Y,0),p(Xm,Ym,N),E2).
pp(E,E,_,[E],_).
pp(Ei,Ef,M,[Ei|R],L):-
M > 0,
mover(Ei,Em),
not(pertenece1(Em,L)),
M1= M-1, pp(Em,Ef,M1,R,[Em|L]).
GOAL
/* Ei = [p(1,3,1),p(2,3,8),p(3,3,5),p(1,2,4),p(2,2,3),p(3,2,1),p(1,1,7),p(2,1,2),p(3,1,0)].
Ef = [p(1,3,1),p(2,3,2),p(3,3,3),p(1,2,4),p(2,2,5),p(3,2,6),p(1,1,7),p(2,1,8),p(3,1,0)]. */
pp([p(1,3,1),p(2,3,8),p(3,3,5),p(1,2,4),p(2,2,3),p(3,2,1),p(1,1,7),p(2,1,2),p(3,1,0)],
[p(1,3,1),p(2,3,2),p(3,3,3),p(1,2,4),p(2,2,5),p(3,2,6),p(1,1,7),p(2,1,8),p(3,1,0)],
10,S,[]).
E;Test_Goal, pos: 276, 590 Nondeterministic clause: append
E;Test_Goal, pos: 358, 590 Nondeterministic clause: pertenece
E;Test_Goal, pos: 451, 590 Nondeterministic clause: pertenece1
E;Test_Goal, pos: 520, 590 Nondeterministic clause: mov
E;Test_Goal, pos: 620, 590 Nondeterministic clause: intercambio
E;Test_Goal, pos: 1067, 590 Nondeterministic clause: pp
E;Test_Goal, pos: 1023, 591 Nondeterministic predicate: mover
Hice el sig programa en visual prolog 5.2
un rompecabezas, una matriz de 3 x3 con 8 numeros desordenados, y un casillero libre para mover y ordenar estos numeros.
Use el metod de produccion con reglas y estrategia de control, use primero en profundidad. En la estrategia le paso el estado inicial del la matriz y el estado final.
al hacer TEST GOAL me tira una lista de errores que no entiendo.
Alguien me puede dar una mano ??
DOMAINS
cordx, cordy = integer
num = integer
pos = p(cordx,cordy,num)
est = pos*
lest = est*
PREDICATES
append(est,est)
pertenece(pos,est)
pertenece1(est,lest)
mov(cordx,cordy)
intercambio(est,pos,pos,est)
mover(est,est)
pp(est,est,integer,lest,lest)
CLAUSES
append([],L).
append([Ca|Co],[Ca|L]):- append(Co,L).
pertenece(E,[]):- fail.
pertenece(E,[C|_]):- E=C.
pertenece(E,[_|R]):- pertenece(E,R).
pertenece1(E,[]):- fail.
pertenece1(E,[C|_]):- E=C.
pertenece1(E,[_|R]):- pertenece1(E,R).
mov(X,Y):- X= -1, Y= 0.
mov(X,Y):- X= 1, Y= 0.
mov(X,Y):- X= 0, Y= -1.
mov(X,Y):- X= 0, Y= 1.
intercambio([],_,_,S).
intercambio([C|R],P1,P2,S):-
C=P1,
append([P2],S),
intercambio(R,P1,P2,S).
intercambio([C|R],P1,P2,S):-
C=P2,
append([P1],S),
intercambio(R,P1,P2,S).
intercambio([C|R],P1,P2,S):-
append([C],S),
intercambio(R,P1,P2,S).
mover(E1,E2):-
pertenece(p(X,Y,0),E1),
mov(Xp,Yp),
Xm = X + Xp, Ym = Y + Yp,
X <= 3, Y <= 3,
pertenece(p(Xm,Ym,N),E1),write(N),
intercambio(E1,p(X,Y,0),p(Xm,Ym,N),E2).
pp(E,E,_,[E],_).
pp(Ei,Ef,M,[Ei|R],L):-
M > 0,
mover(Ei,Em),
not(pertenece1(Em,L)),
M1= M-1, pp(Em,Ef,M1,R,[Em|L]).
GOAL
/* Ei = [p(1,3,1),p(2,3,8),p(3,3,5),p(1,2,4),p(2,2,3),p(3,2,1),p(1,1,7),p(2,1,2),p(3,1,0)].
Ef = [p(1,3,1),p(2,3,2),p(3,3,3),p(1,2,4),p(2,2,5),p(3,2,6),p(1,1,7),p(2,1,8),p(3,1,0)]. */
pp([p(1,3,1),p(2,3,8),p(3,3,5),p(1,2,4),p(2,2,3),p(3,2,1),p(1,1,7),p(2,1,2),p(3,1,0)],
[p(1,3,1),p(2,3,2),p(3,3,3),p(1,2,4),p(2,2,5),p(3,2,6),p(1,1,7),p(2,1,8),p(3,1,0)],
10,S,[]).
E;Test_Goal, pos: 276, 590 Nondeterministic clause: append
E;Test_Goal, pos: 358, 590 Nondeterministic clause: pertenece
E;Test_Goal, pos: 451, 590 Nondeterministic clause: pertenece1
E;Test_Goal, pos: 520, 590 Nondeterministic clause: mov
E;Test_Goal, pos: 620, 590 Nondeterministic clause: intercambio
E;Test_Goal, pos: 1067, 590 Nondeterministic clause: pp
E;Test_Goal, pos: 1023, 591 Nondeterministic predicate: mover
Valora esta pregunta


0