0
I’m honing my Prolog skills, and I’m solving a Rachacuca problem.
This is the first one I try to do, and for some reason, it returns everything as false (What shouldn’t). So I wonder if there are any structural problem in my code, if not, it should just be something wrong in some affirmative (which I checked, but found nothing). Follow the code:
%%Adicionando biblioteca
cor(amarelo).
cor(azul).
cor(branco).
cor(verde).
cor(vermelho).
motorista(vinicius).
motorista(joao).
motorista(limao).
motorista(carol).
motorista(leo).
destino(amazonas).
destino(bahia).
destino(mato_grosso).
destino(minas_gerais).
destino(parana).
carga(adubo).
carga(carvao).
carga(enxofre).
carga(soda_caustica).
carga(trigo).
placa('AAA-1111').
placa('BBB-2222').
placa('CCC-3333').
placa('DDD-4444').
placa('EEE-5555').
km(50).
km(100).
km(150).
km(200).
km(250).
% Definindo alldiferent
alldifferent([]).
alldifferent([H|T]):- not(member(H,T)),
alldifferent(T).
start:- caminhoes([C1, C2, C3, C4,C5]),
writeln("\n CAMINHAO 1: ":C1),
writeln("\n CAMINHAO 2: ":C2),
writeln("\n CAMINHAO 3: ":C3),
writeln("\n CAMINHAO 4: ":C4),
writeln("\n CAMINHAO 5: ":C5).
caminhoes([(COR1, MOTORISTA1, DESTINO1, CARGA1, PLACA1, KM1),
(COR2, MOTORISTA2, DESTINO2, CARGA2, PLACA2, KM2),
(COR3, MOTORISTA3, DESTINO3, CARGA3, PLACA3, KM3),
(COR4, MOTORISTA4, DESTINO4, CARGA4, PLACA4, KM4),
(COR5, MOTORISTA5, DESTINO5, CARGA5, PLACA5, KM5)]):-
%%Vamos lidar com os motoristas
motorista(MOTORISTA1), motorista(MOTORISTA2), motorista(MOTORISTA3),
motorista(MOTORISTA4), motorista(MOTORISTA5),
alldifferent([MOTORISTA1, MOTORISTA2, MOTORISTA3, MOTORISTA4, MOTORISTA5]),
%%O número 1 fala que Jorge é o motorista do caminhão de placa DDD-4444.
(
(MOTORISTA1==limao,PLACA1=='DDD-4444');
(MOTORISTA2==limao,PLACA2=='DDD-4444');
(MOTORISTA3==limao,PLACA3=='DDD-4444');
(MOTORISTA4==limao,PLACA4=='DDD-4444');
(MOTORISTA5==limao,PLACA5=='DDD-4444')
),
%%O número 15 fala que Stênio está dirigindo para Minas Gerais.
(
(MOTORISTA1==leo,DESTINO1==minas_gerais);
(MOTORISTA2==leo,DESTINO2==minas_gerais);
(MOTORISTA3==leo,DESTINO3==minas_gerais);
(MOTORISTA4==leo,DESTINO4==minas_gerais);
(MOTORISTA5==leo,DESTINO5==minas_gerais)
),
%%O 19 fala que Antônio é o motorista do caminhão de placa EEE-5555.
(
(MOTORISTA1==vinicius,PLACA1=='EEE-5555');
(MOTORISTA2==vinicius,PLACA2=='EEE-5555');
(MOTORISTA3==vinicius,PLACA3=='EEE-5555');
(MOTORISTA4==vinicius,PLACA4=='EEE-5555');
(MOTORISTA5==vinicius,PLACA5=='EEE-5555')
),
%%O número 21 fala que Pedro está ao lado do caminhão que vai para
%%o Mato Grosso.
(
(MOTORISTA1==carol,DESTINO2==mato_grosso);
(MOTORISTA2==carol,(DESTINO1==mato_grosso;DESTINO3==mato_grosso));
(MOTORISTA3==carol,(DESTINO2==mato_grosso;DESTINO4==mato_grosso));
(MOTORISTA4==carol,(DESTINO3==mato_grosso;DESTINO5==mato_grosso));
(MOTORISTA5==carol,DESTINO4==mato_grosso)
),
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%Vamos lidar com as cores
cor(COR1), cor(COR2), cor(COR3), cor(COR4), cor(COR5),
alldifferent([COR1, COR2, COR3, COR4, COR5]),
%%O número 4 diz que o caminhão Vermelho está em algum lugar à esquerda
%%do caminhão que vai para o Amazonas.
(
(COR1==vermelho,(DESTINO2==amazonas;DESTINO3==amazonas;DESTINO4==amazonas;DESTINO5==amazonas));
(COR2==vermelho,(DESTINO3==amazonas;DESTINO4==amazonas;DESTINO5==amazonas));
(COR3==vermelho,(DESTINO4==amazonas;DESTINO5==amazonas));
(COR4==vermelho,DESTINO5==amazonas)
),
%%O número 6 fala que o caminhão Vermelho está em algum lugar entre o
%%caminhão que está carregando Enxofre e o caminhão Azul, nessa ordem.
(
(CARGA1==enxofre,COR3==azul,(COR2==vermelho));
(CARGA1==enxofre,COR4==azul,(COR2==vermelho;COR3==vermelho));
(CARGA1==enxofre,COR5==azul,(COR2==vermelho;COR3==vermelho;COR4==vermelho));
(CARGA2==enxofre,COR4==azul,(COR3==vermelho));
(CARGA2==enxofre,COR5==azul,(COR3==vermelho;COR4==vermelho));
(CARGA3==enxofre,COR5==azul,(COR4==vermelho))
),
%%O número 10 fala que o caminhão Branco está em algum lugar à direita do caminhão Verde.
(
(COR1==verde,(COR2==branco;COR3==branco;COR4==branco;COR5==branco));
(COR2==verde,(COR3==branco;COR4==branco;COR5==branco));
(COR3==verde,(COR4==branco;COR5==branco));
(COR4==verde,COR5==branco)
),
%%O número 13 fala que o caminhão Amarelo está exatamente à esquerda do
%%caminhão que tem 200 mil Km rodados.
(
(COR1==amarelo,KM2==200);
(COR2==amarelo,KM3==200);
(COR3==amarelo,KM4==200);
(COR4==amarelo,KM5==200)
),
%%O número 17 fala que o veículo Azul está em algum lugar à direita do
%%veículo de placa AAA-1111.
(
(PLACA1=='AAA-1111',(COR2==azul;COR3==azul;COR4==azul;COR5==azul));
(PLACA2=='AAA-1111',(COR3==azul;COR4==azul;COR5==azul));
(PLACA3=='AAA-1111',(COR4==azul;COR5==azul));
(PLACA4=='AAA-1111',COR5==azul)
),
%%O número 20 fala que o caminhão Azul está em algum lugar à
%%esquerda do caminhão Branco.
(
(COR5==branco,(COR4==azul;COR3==azul;COR2==azul;COR1==azul));
(COR4==branco,(COR3==azul;COR2==azul;COR1==azul));
(COR3==branco,(COR2==azul;COR1==azul));
(COR2==branco,COR1==azul)
),
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%Vamos lidar com os destinos
destino(DESTINO1), destino(DESTINO2), destino(DESTINO3),
destino(DESTINO4), destino(DESTINO5),
alldifferent([DESTINO1, DESTINO2, DESTINO3, DESTINO4, DESTINO5]),
%%O número 2 fala que na quarta posição está o caminhão que vai
%%para Belo Horizonte.
%%LEMBRANDO que Belo Horizonte fica em Minas Gerais.
DESTINO4==minas_gerais,
%%O número 5 fala que o veículo que vai para a região Centro-oeste
%% está ao lado do caminhão que já rodou 100 mil Km.
%%LEMBRANDO que o Mato Grosso fica no centro-oeste.
(
(DESTINO1==mato_grosso,KM2==100);
(DESTINO2==mato_grosso,(KM1==100;KM3==100));
(DESTINO3==mato_grosso,(KM2==100;KM4==100));
(DESTINO4==mato_grosso,(KM3==100;KM5==100));
(DESTINO5==mato_grosso,KM4==100)
),
%%O número 12 fala que quem vai para a região Nordeste está em
%%algum lugar à direita do caminhão Vermelho.
%%LEMBRANDO que a Bahia fica no nordeste.
(
(DESTINO2==bahia,COR1==vermelho);
(DESTINO3==bahia,(COR1==vermelho;COR2==vermelho));
(DESTINO4==bahia,(COR1==vermelho;COR2==vermelho;COR3==vermelho));
(DESTINO5==bahia,(COR1==vermelho;COR2==vermelho;COR3==vermelho;COR4==vermelho))
),
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%Vamos lidar com as cargas
carga(CARGA1), carga(CARGA2), carga(CARGA3), carga(CARGA4),
carga(CARGA5),
alldifferent([CARGA1, CARGA2, CARGA3, CARGA4, CARGA5]),
%%O número 9 fala que o caminhão de placa DDD-4444 está transportando Soda cáustica.
(
(PLACA1=='DDD-4444',CARGA1==soda_caustica);
(PLACA2=='DDD-4444',CARGA2==soda_caustica);
(PLACA3=='DDD-4444',CARGA3==soda_caustica);
(PLACA4=='DDD-4444',CARGA4==soda_caustica);
(PLACA5=='DDD-4444',CARGA5==soda_caustica)
),
%%O número 16 fala que o caminhão com Adubo está em algum lugar entre o caminhão
%%que vai para Bahia e o caminhão com Carvão, nessa ordem.
(
(DESTINO1==bahia,CARGA3==carvao,(CARGA2==adubo));
(DESTINO1==bahia,CARGA4==carvao,(CARGA2==adubo;CARGA3==adubo));
(DESTINO1==bahia,CARGA5==carvao,(CARGA2==adubo;CARGA3==adubo;CARGA4==adubo));
(DESTINO2==bahia,CARGA4==carvao,(CARGA3==adubo));
(DESTINO2==bahia,CARGA5==carvao,(CARGA3==adubo;CARGA4==adubo));
(DESTINO3==bahia,CARGA5==carvao,(CARGA4==adubo))
),
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%Vamos lidar com as placas
placa(PLACA1), placa(PLACA2), placa(PLACA3), placa(PLACA4),
placa(PLACA5),
alldifferent([PLACA1, PLACA2, PLACA3, PLACA4, PLACA5]),
%%O número 8 fala que em uma das pontas está o caminhão de placa AAA-1111.
(PLACA1=='AAA-1111';PLACA5=='AAA-1111'),
%%O número 11 fala que o veículo de placa BBB-2222 está ao lado
%%do veículo mais rodado.
(
(PLACA1=='BBB-2222',KM2==250);
(PLACA2=='BBB-2222',(KM1==250;KM3==250));
(PLACA3=='BBB-2222',(KM2==250;KM4==250));
(PLACA4=='BBB-2222',(KM3==250;KM5==250));
(PLACA5=='BBB-2222',KM4==250)
),
%%O número 14 fala que o veículo de placa CCC-3333 está exatamente
%%à direita do veículo de placa DDD-4444.
(
(PLACA1=='DDD-4444',PLACA2=='CCC-3333');
(PLACA2=='DDD-4444',PLACA3=='CCC-3333');
(PLACA3=='DDD-4444',PLACA4=='CCC-3333');
(PLACA4=='DDD-4444',PLACA5=='CCC-3333')
),
%%O número 18 fala que o caminhão de placa DDD-4444 está ao lado do
%%caminhão que já rodou 100 mil Km.
(
(PLACA1=='DDD-4444',KM2==100);
(PLACA2=='DDD-4444',(KM1==100;KM3==100));
(PLACA3=='DDD-4444',(KM2==100;KM4==100));
(PLACA4=='DDD-4444',(KM3==100;KM5==100));
(PLACA5=='DDD-4444',KM4==100)
),
%%O número 22 fala que em uma das pontas está o caminhão de placa EEE-5555.
(PLACA1=='EEE-5555';PLACA5=='EEE-5555'),
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%Vamos lidar com as quilometragem
km(KM1), km(KM2), km(KM3), km(KM4), km(KM5),
alldifferent([KM1, KM2, KM3, KM4, KM5]),
%%O número 3 diz que o caminhão menos rodado está transportando Carvão.
(
(KM1==50,CARGA1==carvao);
(KM2==50,CARGA2==carvao);
(KM3==50,CARGA3==carvao);
(KM4==50,CARGA4==carvao);
(KM5==50,CARGA5==carvao)
),
%%O número 7 diz que na primeira posição está o caminhão que
%%tem 150 mil Km rodados.
KM1==150.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Please, I’m out of ideas for what’s failing :( When you type start. it returns a "false" instead of the ordered information, I think it’s like it’s not possible. I use the SWI Prolog, by the way