有人可以帮我解决这个小程序吗?

时间:2014-11-23 23:50:28

标签: prolog zebra-puzzle

当我用这句话运行我的程序时:

| ?- constraints(C).

结果是:

C = [espacio(chuck,brenda,lewis,cafe,treintayuno),
     espacio(bill,mary,tread,rojo,veinteynueve),
     espacio(steve,cindy,branch,negra,cuarentaytres),
     espacio(tom,laura,forrest,azul,treintaycinco)|_A] ?

结果很好,但最后是“| A”,我不知道有什么问题? 这是我的代码:

/*

Cuatro parejas deciden ir a acampar a la selva del estado un fin de semana.
Cada pareja viajo en una van diferente y cada una eligio un espacio de 

campo separado. Todos los sitios para acampar estan etiquetados con un 

numero y mientras estan en la misma area los sitios no se juntan entre si.
Determina el nombre completo de cada pareja, color de van y numero de su 

espacio de campo.

TRADUCCION
1.- BIll quie no esta casado con Laura, no manejo una Van Negra
2.- Chuck y su esposa Brenda no acamparon en el espacio #35. El apellido de 

Breanda no es Forrest
3.- La pareja Lewis quien manejo una van Cafe, acamparon en el espacio 31
4.- Tom acampo en un espacio mas bajo del que acampo Cindy pero mas alto 

que la pareja que manejo una Van Roja.
5.- Tom no esta casado con Mary Tread. Steve Branch no maneja una van azul.
6.- La pareja que maneja la van negra acampo en el espacio #43

ORIGINAL
1. Bill, who is not married to Laura, didn't drive a black van.
2. Chuck and his wife Brenda were not camped in space #35. Brenda's last 

name is not 
Forrest.
3. The Lewis couple, who drove a tan van, camped in space #31.
4. Tom camped in a space numbered lower than the one Cindy camped in but 

higher than the 
couple who drove in the red van did. 
5. Tom isn't married to Mary Tread. Steve Branch didn't drive a blue van. 
6. The couple driving the black van camped in space #43.

*/


use_module( library(basics)).

use_module(library(lists)).

% UN CAMPAMENTO ES UNA LISTA DE 5 ESPACIOS; CADA ESPACIO TIENE UNA PAREJA 

(HOMBRE Y MUJER Y APELLIDO) UNA VAN Y UN NUMERO DE ESPACIO.

campamento([espacio(_,_,_,_,_),
        espacio(_,_,_,_,_),
        espacio(_,_,_,_,_),
            espacio(_,_,_,_,_)]).

% De acuerdo a las sentencias previas podemos establecer lo siguiente:

constraints( Campamento ):-
    member(espacio(chuck,brenda,_,_,_), Campamento), % 2)
    member(espacio(_,_,lewis,cafe,treintayuno), Campamento), % 3)
    member(espacio(_,mary,tread,_,_), Campamento), % 5)
    member(espacio(_,_,_,rojo,veinteynueve), Campamento), %  implicito 

)
    member(espacio(_,_,_,negra,cuarentaytres), Campamento), % 6)
    member(espacio(_,_,_,azul,treintaycinco), Campamento), %  implicito 

)
    member(espacio(bill,_,_,_,veinteynueve), Campamento), %  implicito 

)
    member(espacio(steve,cindy,branch,_,_), Campamento), %  implicito )
    member(espacio(_,cindy,_,_,cuarentaytres), Campamento), %  

implicito )
    member(espacio(tom,laura,forrest,_,_), Campamento). %  implicito )

%   member(espacio(tom,_,_,blue,_), Campamento). %  implicito )
%   member(espacio(_,mary,_,red,_), Campamento). %  implicito )


append([X|Y],Z,[X|W]) :- append(Y,Z,W).  
append([],X,X).

member(X,[X|_]).
member(X,[_|T]) :- member(X,T).

% perm2(X,Y, X,Y).
% perm2(X,Y, Y,X).


/*member(X,[X|T]).
member(X,[H|T]) :- member(X,T).*/

2 个答案:

答案 0 :(得分:1)

(您的程序有几个错误:特别是use_module(xx)必须以:-为前缀

constraints/1基本上是这样的:

constraints(L) :-
   member(a, L),
   member(b, L),
   member(c, L),
   member(d, L).

因此,您要求abcdL的元素。但是你没有说明清单应该有多长。您可以通过按; 返回查看备用答案来观察此情况。

?- constraints(L).
L = [a, b, c, d|_A] ;
L = [a, b, c, _A, d|_B] ;
L = [a, b, c, _A, _B, d|_C] ...

要解决此问题,请在任何目标length(L, 4)之前的开头添加member/2

答案 1 :(得分:0)

好的,这是我的朋友!!!

非常感谢你的帮助!这是我告诉你的代码:

/*
ORIGINAL
1. Bill, who is not married to Laura, didn't drive a black van.
2. Chuck and his wife Brenda were not camped in space #35. Brenda's last name is not 
Forrest.
3. The Lewis couple, who drove a tan van, camped in space #31.
4. Tom camped in a space numbered lower than the one Cindy camped in but higher than the 
couple who drove in the red van did. 
5. Tom isn't married to Mary Tread. Steve Branch didn't drive a blue van. 
6. The couple driving the black van camped in space #43.
*/

%:- use_module( library(basics)).
:- use_module(library(lists)).

campamento([espacio(_,_,_,_,_),
    espacio(_,_,_,_,_),
    espacio(_,_,_,_,_),
        espacio(_,_,_,_,_)]). 

constraints( Campamento ):-
   length(Campamento, 4),
    % campamento(Campamento),
member(espacio(chuck,brenda,_,_,_), Campamento), % 2)
member(espacio(_,_,lewis,cafe,treintayuno), Campamento), % 3)
member(espacio(_,mary,tread,_,_), Campamento), % 5)
member(espacio(_,_,_,rojo,veinteynueve), Campamento), % implicito
member(espacio(_,_,_,negra,cuarentaytres), Campamento), % 6)
member(espacio(_,_,_,azul,treintaycinco), Campamento), % implicito
member(espacio(bill,_,_,_,veinteynueve), Campamento), %  Implicito
member(espacio(steve,cindy,branch,_,_), Campamento), %  implicito 
member(espacio(_,cindy,_,_,cuarentaytres), Campamento), %  implicito 
member(espacio(tom,laura,forrest,_,_), Campamento). %  implicito 

append([],X,X).
append([X|Y],Z,[X|W]) :- append(Y,Z,W).  

member(X,[X|T]).
member(X,[H|T]) :- member(X,T).

perm2(X,Y, X,Y).
perm2(X,Y, Y,X).