【问题标题】:Somebody could help me with this little program in prolog?有人可以帮助我使用序言中的这个小程序吗?
【发布时间】:2014-11-23 23:50:27
【问题描述】:

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

| ?- constraints(C).

结果是:

C = [espacio(chuck,brenda,lewis,cafe,treintayuno),
     espacio(bill,mary,tread,rojo,veinteynueve),
     espacio(史蒂夫,辛迪,科,内格拉,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).*/

【问题讨论】:

  • 这是斑马拼图的变体。答案见标签!

标签: prolog zebra-puzzle


【解决方案1】:

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

constraints/1 本质上是这样的:

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

所以你要求abcdL 的元素。但是你没有说明这个列表应该有多长。您可以通过按 ;Return 查看替代答案来观察这一点。

?- 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 之前。

【讨论】:

  • Tks 寻求帮助,但我还不能修复它:S,仍然不断出现 |A ,|B .... 等。
  • 在“constraints(Campamento):-....”的开头我也尝试了其他点,但我有相同的结果...你能帮我解决这个问题吗,因为那就是为了完成一个课程:S。
  • 长度(坎门托,4)。
  • @EnriqueVMartinez:把新程序放在最后!
【解决方案2】:

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

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

/*
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).

【讨论】:

  • the changes我做的!您需要将目标放在member/2 目标之前!
  • 我已经检查过了,现在我可以看到我错在哪里了....谢谢!!!兄弟!!你真的救了我!!!!谢!!非常!!! ;)
猜你喜欢
  • 1970-01-01
  • 2013-02-28
  • 2020-03-25
  • 1970-01-01
  • 2023-03-24
  • 2017-12-09
  • 1970-01-01
  • 2021-02-12
  • 1970-01-01
相关资源
最近更新 更多