

%**********************************************
%*           LANGAGE NATUREL                  *
%**********************************************

:-consult('util_saisie.pro').
:-consult('devoirprolog_part1_2.pro').

% Requête du type :"quel est le vehicule de tel type et de tel couleur?".

% requete_qui(+Liste1,-qui(Liste2)). A partir d'une requête tokenisée sous la forme de la liste 'Liste1',
% requete_qui renvoie un terme Prolog qui(Liste2) 
% 'Liste2' contient les informations importantes de la requête. C'est à partir des ces informations que le terme
% Prolog qui(Liste2) sera interprété.

requete_qui([],qui([])).

% Si la requête contient des informations sur la couleur, le type et la position
requete_qui([X|L],qui([type(T),devant(N),couleur(C)])) :- 
	member(X, [quel, quelle, quels, quelles]), 
	member(T,L), 
	member(C,L), 
	member(N,L), 
	member(devant,L),
	vehicule(N,_,_), 
	vehicule(_,T,C).

requete_qui([X|L],qui([type(T),derriere(N),couleur(C)])) :- 
	member(X, [quel, quelle, quels, quelles]), 
	member(T,L),
	member(C,L),
	member(N,L), 
	member(derrière,L), 
	vehicule(N,_,_), 
	vehicule(_,T,C).

requete_qui([X|L],qui([type(T),juste_devant(N),couleur(C)])) :- 
	member(X, [quel, quelle, quels, quelles]), 
	member(T,L), 	
	member(C,L), 
	member(N,L), 
	member(juste,L), 
	member(devant,L), 
	vehicule(N,_,_), 
	vehicule(_,T,C).

requete_qui([X|L],qui([type(T),juste_derriere(N),couleur(C)])) :- 
	member(X, [quel, quelle, quels, quelles]), 
	member(T,L), 	
	member(C,L), 
	member(N,L), 
	member(juste,L), 
	member(derrière,L), 
	vehicule(N,_,_), 
	vehicule(_,T,C).

requete_qui([X|L],qui([type(T),tete,couleur(C)])) :- 
	member(X, [quel, quelle, quels, quelles]), 
	member(T,L), 
	member(C,L),
	member(tete,L), 
	vehicule(_,T,C).

requete_qui([X|L],qui([type(T),queue,couleur(C)])) :-
	member(X, [quel, quelle, quels, quelles]), 
	member(T,L), 
	member(C,L), 	
	member(queue,L), 
	vehicule(_,T,C).

requete_qui([X|L],qui([type(T),couleur(C)])) :- 
	member(X, [quel, quelle, quels, quelles]),
	member(T,L), 
	member(C,L), 	
	vehicule(_,T,C).

requete_qui([X|L],qui([devant(N),couleur(C)])) :- 
	member(X, [quel, quelle, quels, quelles]),
	member(C,L), 
	member(N,L), 	
	member(devant,L), 
	vehicule(_,_,C), 
	vehicule(N,_,_).

requete_qui([X|L],qui([derriere(N),couleur(C)])) :- 
	member(X, [quel, quelle, quels, quelles]), 
	member(C,L), 
	member(N,L), 	
	member(derriere,L), 
	vehicule(_,_,C), 
	vehicule(N,_,_).

requete_qui([X|L],qui([juste_devant(N),couleur(C)])) :- 
	member(X, [quel, quelle, quels, quelles]), 
	member(C,L), 
	member(N,L), 
	member(juste,L),
	member(devant,L),
	vehicule(_,_,C), 
	vehicule(N,_,_).

requete_qui([X|L],qui([juste_derriere(N),couleur(C)])) :- 
	member(X, [quel, quelle, quels, quelles]), 
	member(C,L),
	member(N,L), 
	member(juste,L),
	member(derrière,L), 
	vehicule(_,_,C), 
	vehicule(N,_,_).

requete_qui([X|L],qui([queue,couleur(C)])) :- 
	member(X, [quel, quelle, quels, quelles]), 
	member(C,L),
	member(queue,L), 
	vehicule(_,_,C). 
	
requete_qui([X|L],qui([tete,couleur(C)])) :- 
	member(X, [quel, quelle, quels, quelles]), 
	member(C,L), 
	member(tête,L), 
	vehicule(_,_,C). 
	

requete_qui([X|L],qui([type(T),devant(N)])) :- 
	member(X, [quel, quelle, quels, quelles]), 
	member(T,L), 
	member(N,L), 	
	member(devant,L), 
	vehicule(N,_,_),
	vehicule(_,T,_).

requete_qui([X|L],qui([type(T),derriere(N)])) :- 
	member(X, [quel, quelle, quels, quelles]), 
	member(T,L), 
	member(N,L), 	
	member(derrière,L), 
	vehicule(N,_,_),
	vehicule(_,T,_).

requete_qui([X|L],qui([type(T),juste_devant(N)])) :- 
	member(X, [quel, quelle, quels, quelles]), 
	member(T,L),
	member(N,L),
	member(juste,L),	
	member(devant,L), 
	vehicule(N,_,_),
	vehicule(_,T,_).

requete_qui([X|L],qui([type(T),juste_derriere(N)])) :- 
	member(X, [quel, quelle, quels, quelles]), 
	member(T,L), 
	member(N,L),
	member(juste,L),	
	member(derrière,L),
	vehicule(N,_,_),
	vehicule(_,T,_).

requete_qui([X|L],qui([type(T),tete])) :- 
	member(X, [quel, quelle, quels, quelles]), 
	member(T,L), 
	member(tête,L), 
	vehicule(_,T,_).

requete_qui([X|L],qui([type(T),queue])) :- 
	member(X, [quel, quelle, quels, quelles]), 
	member(T,L), 
	member(queue,L), 
	vehicule(_,T,_).

requete_qui([X|L],qui([couleur(C)])) :- 
	member(X, [quel, quelle, quels, quelles]), 
	member(C,L), 
	vehicule(_,_,C).

requete_qui([X|L],qui([type(T)])) :- 
	member(X, [quel, quelle, quels, quelles]), 
	member(T,L), 
	vehicule(_,T,_).

requete_qui([X|L],qui([devant(N)])) :- 
	member(X, [quel, quelle, quels, quelles]), 
	member(N,L), 
	member(devant,L),
	vehicule(N,_,_).

requete_qui([X|L],qui([juste_devant(N)])) :- 
	member(X, [quel, quelle, quels, quelles]),
	member(N,L), 
	member(juste,L), 
	member(devant,L), 
	vehicule(N,_,_).

requete_qui([X|L],qui([derriere(N)])) :- 
	member(X, [quel, quelle, quels, quelles]), 
	member(N,L), 
	member(derrière,L), 
	vehicule(N,_,_).

requete_qui([X|L],qui([juste_derriere(N)])) :- 
	member(X, [quel, quelle, quels, quelles]), 
	member(N,L), 
	member(juste,L), 	
	member(derrière,L),
	vehicule(N,_,_).

requete_qui([X|L],qui([tete])) :- 
	member(X, [quel, quelle, quels, quelles]), 	
	member(tête,L). 
	
requete_qui([X|L],qui([queue])) :- 
	member(X, [quel, quelle, quels, quelles]), 
	member(queue,L). 	
	
reponse_qui(qui([type(T),devant(N),couleur(C)]),S) :- 
	S=[la,T,M], 
	vehicule(M,T,C),
	vehicule(N,_,_),  
	vrai([couleur(M,C)]), 	
	vrai([type(M,T)]), 
	vrai([devant(M,N)]).

reponse_qui(qui([type(T),devant(N),couleur(C)]),S) :- 
	S=[le,T,M], 
	T=camion,
	vehicule(M,T,C), 
	vehicule(N,_,_), 
	vrai([couleur(M,C)]),
	vrai([type(M,T)]), 
	vrai([devant(M,N)]).

reponse_qui(qui([type(T),derriere(N),couleur(C)]),S) :- 
	S=[la,T,M],
	vehicule(M,T,C), 
	vehicule(N,_,_),  
	vrai([couleur(M,C)]),
	vrai([type(M,T)]), 
	vrai([derriere(M,N)]).

reponse_qui(qui([type(T),derriere(N),couleur(C)]),S) :- 
	S=[le,T,M],
	T=camion, 
	vehicule(M,T,C), 
	vehicule(N,_,_),  
	vrai([couleur(M,C)]), 	
	vrai([type(M,T)]), 
	vrai([derriere(M,N)]).

reponse_qui(qui([type(T),juste_devant(N),couleur(C)]),S) :- 
	S=[la,T,M], 
	vehicule(M,T,C), 
	vehicule(N,_,_),  
	vrai([couleur(M,C)]), 	
	vrai([type(M,T)]), 
	vrai([juste_devant(M,N)]).

reponse_qui(qui([type(T),juste_devant(N),couleur(C)]),S) :- 
	S=[le,T,M],
	T=camion,
	vehicule(M,T,C), 
	vehicule(N,_,_),  
	vrai([couleur(M,C)]), 	
	vrai([type(M,T)]), 
	vrai([juste_devant(M,N)]).

reponse_qui(qui([type(T),juste_derriere(N),couleur(C)]),S) :-
	S=[la,T,M], 
	vehicule(M,T,C), 
	vehicule(N,_,_),  
	vrai([couleur(M,C)]), 	
	vrai([type(M,T)]), 
	vrai([juste_derriere(M,N)]).

reponse_qui(qui([type(T),juste_derriere(N),couleur(C)]),S) :- 
	S=[le,T,M], 
	T=camion,
	vehicule(M,T,C), 
	vehicule(N,_,_),  
	vrai([couleur(M,C)]), 	
	vrai([type(M,T)]), 
	vrai([juste_derriere(M,N)]).

reponse_qui(qui([type(T),tete,couleur(C)]),S) :- 
	S=[la,T,M],
	vehicule(M,T,C), 
	vrai([couleur(M,C)]), 	
	vrai([type(M,T)]), 
	vrai([tete_de_file(M)]).

reponse_qui(qui([type(T),tete,couleur(C)]),S) :- 
	S=[le,T,M],
	T=camion, 
	vehicule(M,T,C), 
	vrai([couleur(M,C)]), 	
	vrai([type(M,T)]), 
	vrai([tete_de_file(M)]).

reponse_qui(qui([type(T),queue,couleur(C)]),S) :- 
	S=[la,T,M],
	vehicule(M,T,C),
	vrai([couleur(M,C)]), 	
	vrai([type(M,T)]), 
	vrai([queue_de_file(M)]).

reponse_qui(qui([type(T),queue,couleur(C)]),S) :- 
	S=[le,T,M],
	T=camion, 
	vehicule(M,T,C),
	vrai([couleur(M,C)]), 
	vrai([type(M,T)]), 
	vrai([queue_de_file(M)]).

reponse_qui(qui([type(T),couleur(C)]),S) :-
	S=[la,T,N], 
	vehicule(N,T,C), 
	vrai([couleur(N,C)]), 
	vrai([type(N,T)]).

reponse_qui(qui([type(T),couleur(C)]),S) :-
	S=[le,T,N], 
	T=camion,
	vehicule(N,T,C), 
	vrai([couleur(N,C)]), 
	vrai([type(N,T)]).

reponse_qui(qui([devant(N),couleur(C)]),S) :- 
	S=[la,T,M],
	vehicule(N,_,_), 
	vehicule(M,T,C), 
	vrai([couleur(M,C)]), 	
	vrai([devant(M,N)]).

reponse_qui(qui([devant(N),couleur(C)]),S) :- 
	S=[le,T,M],
	T=camion, 
	vehicule(N,_,_), 
	vehicule(M,T,C), 
	vrai([couleur(M,C)]), 	
	vrai([devant(M,N)]).

reponse_qui(qui([derriere(N),couleur(C)]),S) :- 
	S=[la,T,M],
	vehicule(N,_,_), 
	vehicule(M,T,C), 
	vrai([couleur(M,C)]), 	
	vrai([derriere(M,N)]).

reponse_qui(qui([derriere(N),couleur(C)]),S) :- 
	S=[le,T,M],
	T=camion, 
	vehicule(N,_,_), 
	vehicule(M,T,C), 
	vrai([couleur(M,C)]), 	
	vrai([derriere(M,N)]).

reponse_qui(qui([juste_devant(N),couleur(C)]),S) :- 
	S=[la,T,M], 
	vehicule(N,_,_),
	vehicule(M,T,C), 
	vrai([couleur(M,C)]), 	
	vrai([juste_devant(M,N)]).

reponse_qui(qui([juste_devant(N),couleur(C)]),S) :- 
	S=[le,T,M], 
	T=camion,
	vehicule(N,_,_),
	vehicule(M,T,C), 
	vrai([couleur(M,C)]), 	
	vrai([juste_devant(M,N)]).

reponse_qui(qui([juste_derriere(N),couleur(C)]),S) :- 
	S=[la,T,M],
	vehicule(N,_,_), 
	vehicule(M,T,C), 
	vrai([couleur(M,C)]), 	
	vrai([juste_derriere(M,N)]).

reponse_qui(qui([juste_derriere(N),couleur(C)]),S) :- 
	S=[le,T,M],
	T=camion, 
	vehicule(N,_,_), 
	vehicule(M,T,C), 
	vrai([couleur(M,C)]), 	
	vrai([juste_derriere(M,N)]).

reponse_qui(qui([tete,couleur(C)]),S) :- 
	S=[la,T,M], 
	vehicule(M,T,C), 
	vrai([couleur(M,C)]), 	
	vrai([tete_de_file(M)]).

reponse_qui(qui([tete,couleur(C)]),S) :- 
	S=[le,T,M], 
	T=camion,
	vehicule(M,T,C), 
	vrai([couleur(M,C)]), 	
	vrai([tete_de_file(M)]).

reponse_qui(qui([queue,couleur(C)]),S) :- 
	S=[la,T,M],
	vehicule(M,T,C), 
	vrai([couleur(M,C)]), 	
	vrai([queue_de_file(M)]).

reponse_qui(qui([queue,couleur(C)]),S) :- 
	S=[le,T,M],
	T=camion,
	vehicule(M,T,C), 
	vrai([couleur(M,C)]), 	
	vrai([queue_de_file(M)]).

reponse_qui(qui([type(T),devant(N)]),S) :- 
	S=[la,T,M],
	vehicule(N,_,_), 
	vehicule(M,T,_), 
	vrai([devant(M,N)]), 	
	vrai([type(M,T)]).

reponse_qui(qui([type(T),devant(N)]),S) :- 
	S=[le,T,M],
	T=camion, 
	vehicule(N,_,_), 
	vehicule(M,T,_), 
	vrai([devant(M,N)]), 	
	vrai([type(M,T)]).

reponse_qui(qui([type(T),derriere(N)]),S) :-
	S=[la,T,M],
	vehicule(N,_,_), 
	vehicule(M,T,_),
	vrai([derriere(M,N)]), 	
	vrai([type(M,T)]).

reponse_qui(qui([type(T),derriere(N)]),S) :- 
	S=[le,T,M], 
	T=camion,
	vehicule(N,_,_), 
	vehicule(M,T,_), 
	vrai([derriere(M,N)]), 
	vrai([type(M,T)]).

reponse_qui(qui([type(T),juste_devant(N)]),S) :- 
	S=[la,T,M], 
	vehicule(N,_,_), 
	vehicule(M,T,_), 
	vrai([juste_devant(M,N)]), 	
	vrai([type(M,T)]).

reponse_qui(qui([type(T),juste_devant(N)]),S) :- 
	S=[le,T,M], 
	T=camion,
	vehicule(N,_,_), 
	vehicule(M,T,_), 
	vrai([juste_devant(M,N)]), 	
	vrai([type(M,T)]).

reponse_qui(qui([type(T),juste_derriere(N)]),S) :- 
	S=[la,T,M],
	vehicule(N,_,_), 
	vehicule(M,T,_), 
	vrai([juste_derriere(M,N)]), 	
	vrai([type(M,T)]).

reponse_qui(qui([type(T),juste_derriere(N)]),S) :- 
	S=[le,T,M],
	T=camion, 
	vehicule(N,_,_), 
	vehicule(M,T,_), 
	vrai([juste_derriere(M,N)]), 	
	vrai([type(M,T)]).

reponse_qui(qui([type(T),tete]),S) :- 
	S=[la,T,M],
	vehicule(M,T,_), 
	vrai([tete_de_file(M)]), 	
	vrai([type(M,T)]).

reponse_qui(qui([type(T),tete]),S) :- 
	S=[le,T,M], 
	T=camion,
	vehicule(M,T,_), 
	vrai([tete_de_file(M)]), 	
	vrai([type(M,T)]).

reponse_qui(qui([type(T),queue]),S) :- 
	S=[la,T,M],
	vehicule(M,T,_), 
	vrai([queue_de_file(M)]), 	
	vrai([type(M,T)]).

reponse_qui(qui([type(T),queue]),S) :- 
	S=[le,T,M],
	T=camion, 
	vehicule(M,T,_), 
	vrai([queue_de_file(M)]), 	
	vrai([type(M,T)]).

reponse_qui(qui([couleur(C)]),S) :- 
	S=[la,T,N],
	vehicule(N,T,C), 
	vrai([couleur(N,C)]).
	


reponse_qui(qui([couleur(C)]),S) :- 
	S=[le,T,N],
	T=camion, 
	vehicule(N,T,C), 
	vrai([couleur(N,C)]).
	

reponse_qui(qui([type(T)]),S) :- 
	S=[la,T,N],
	vehicule(N,T,_), 
	vrai([type(N,T)]).

reponse_qui(qui([type(T)]),S) :- 
	S=[le,T,N],
	T=camion, 
	vehicule(N,T,_), 
	vrai([type(N,T)]).

reponse_qui(qui([devant(N)]),S) :- 
	S=[la,T,M],
	vehicule(M,T,_), 
	vehicule(N,_,_), 
	vrai([devant(M,N)]).

reponse_qui(qui([devant(N)]),S) :- 
	S=[le,T,M],
	T=camion, 
	vehicule(M,T,_), 
	vehicule(N,_,_), 
	vrai([devant(M,N)]).

reponse_qui(qui([derriere(N)]),S) :- 
	S=[la,T,M],
	vehicule(M,T,_), 
	vehicule(N,_,_), 
	vrai([derriere(M,N)]).

reponse_qui(qui([derriere(N)]),S) :- 
	S=[le,T,M],
	T=camion, 
	vehicule(M,T,_), 
	vehicule(N,_,_), 
	vrai([derriere(M,N)]).

reponse_qui(qui([juste_devant(N)]),S) :- 
	S=[la,T,M],
	vehicule(M,T,_), 
	vehicule(N,_,_), 
	vrai([juste_devant(M,N)]).

reponse_qui(qui([juste_devant(N)]),S) :- 
	S=[le,T,M], 
	T=camion,
	vehicule(M,T,_), 
	vehicule(N,_,_), 
	vrai([juste_devant(M,N)]).

reponse_qui(qui([juste_derriere(N)]),S) :- 
	S=[la,T,M],
	vehicule(M,T,_), 
	vehicule(N,_,_), 
	vrai([juste_derriere(M,N)]).

reponse_qui(qui([juste_derriere(N)]),S) :- 
	S=[le,T,M],
	T=camion,
	vehicule(M,T,_), 
	vehicule(N,_,_), 
	vrai([juste_derriere(M,N)]).

reponse_qui(qui([tete]),S) :- 
	S=[la,T,M],
	vehicule(M,T,_), 
	vrai([tete_de_file(M)]).

reponse_qui(qui([tete]),S) :- 
	S=[le,T,M],
	T=camion,
	vehicule(M,T,_), 
	vrai([tete_de_file(M)]).

reponse_qui(qui([queue]),S) :- 
	S=[la,T,M],
	vehicule(M,T,_), 
	vrai([queue_de_file(M)]).

reponse_qui(qui([queue]),S) :- 
	S=[le,T,M],
	T=camion,
	vehicule(M,T,_), 
	vrai([queue_de_file(M)]).

requete_ou([],ou([])).

requete_ou([X|L],ou([type(T),nom(N),couleur(C)])) :- 
	X=où, 
	member(T,L), 
	member(C,L), 
	member(N,L), 
	vehicule(N,T,C).

requete_ou([X|L],ou([type(T),couleur(C)])) :- 
	X=où,
	member(T,L), 
	member(C,L), 	
	vehicule(_,T,C).

requete_ou([X|L],ou([nom(N),couleur(C)])) :- 
	X=où, 
	member(C,L), 
	member(N,L), 	
	vehicule(N,_,C). 
	

requete_ou([X|L],ou([type(T),nom(N)])) :- 
	X=où, 
	member(T,L), 
	member(N,L), 	
	vehicule(N,T,_).
	
requete_ou([X|L],ou([couleur(C)])) :- 
	X=où, 
	member(C,L), 
	vehicule(_,_,C).

requete_ou([X|L],ou([type(T)])) :- 
	X=où, 
	member(T,L), 
	vehicule(_,T,_).

requete_ou([X|L],ou([nom(N)])) :- 
	X=où, 
	member(N,L), 
	vehicule(N,_,_).

reponse_ou(ou([type(T),nom(N),couleur(C)]),R) :-
	R=[la,T,N,est,devant,M],
	vehicule(N,T,C),
	vehicule(M,_,_),	
	vrai([devant(N,M)]).

reponse_ou(ou([type(T),nom(N),couleur(C)]),R) :-
	R=[le,T,N,est,devant,M],
	T=camion,
	vehicule(N,T,C),
	vehicule(M,_,_),	
	vrai([devant(N,M)]).

reponse_ou(ou([type(T),nom(N),couleur(C)]),R) :-
	R=[la,T,N,est,derrière,M],
	vehicule(N,T,C),
	vehicule(M,_,_),	
	vrai([derriere(N,M)]).

reponse_ou(ou([type(T),nom(N),couleur(C)]),R) :-
	R=[le,T,N,est,derriere,M],
	T=camion,
	vehicule(N,T,C),
	vehicule(M,_,_),	
	vrai([derrriere(N,M)]).

reponse_ou(ou([type(T),nom(N),couleur(C)]),R) :-
	R=[la,T,N,est,juste,devant,M],
	vehicule(N,T,C),
	vehicule(M,_,_),	
	vrai([juste_devant(N,M)]).

reponse_ou(ou([type(T),nom(N),couleur(C)]),R) :-
	R=[le,T,N,est,juste,devant,M],
	T=camion,
	vehicule(N,T,C),
	vehicule(M,_,_),	
	vrai([juste_devant(N,M)]).

reponse_ou(ou([type(T),nom(N),couleur(C)]),R) :-
	R=[la,T,N,est,juste,derrière,M],
	vehicule(N,T,C),
	vehicule(M,_,_),	
	vrai([juste_derriere(N,M)]).

reponse_ou(ou([type(T),nom(N),couleur(C)]),R) :-
	R=[le,T,N,est,juste,derrière,M],
	T=camion,
	vehicule(N,T,C),
	vehicule(M,_,_),	
	vrai([juste_derriere(N,M)]).

reponse_ou(ou([type(T),nom(N),couleur(C)]),R) :-
	R=[la,T,N,est,en,tête,de,file],
	vehicule(N,T,C),
	vrai([tete_de_file(N)]).

reponse_ou(ou([type(T),nom(N),couleur(C)]),R) :-
	R=[le,T,N,est,en,tête,de,file],
	T=camion,
	vehicule(N,T,C),
	vrai([tete_de_file(N)]).

reponse_ou(ou([type(T),nom(N),couleur(C)]),R) :-
	R=[la,T,N,est,en,queue,de,file],
	vehicule(N,T,C),
	vrai([queue_de_file(N)]).

reponse_ou(ou([type(T),nom(N),couleur(C)]),R) :-
	R=[le,T,N,est,en,queue,de,file],
	T=camion,
	vehicule(N,T,C),
	vrai([queue_de_file(N)]).

reponse_ou(ou([type(T),couleur(C)]),R) :-
	R=[la,T,N,est,devant,M],
	vehicule(N,T,C),
	vehicule(M,_,_),	
	vrai([devant(N,M)]).

reponse_ou(ou([type(T),couleur(C)]),R) :-
	R=[le,T,N,est,devant,M],
	T=camion,
	vehicule(N,T,C),
	vehicule(M,_,_),	
	vrai([devant(N,M)]).

reponse_ou(ou([type(T),couleur(C)]),R) :-
	R=[la,T,N,est,derrière,M],
	vehicule(N,T,C),
	vehicule(M,_,_),	
	vrai([derriere(N,M)]).

reponse_ou(ou([type(T),couleur(C)]),R) :-
	R=[le,T,N,est,derriere,M],
	T=camion,
	vehicule(N,T,C),
	vehicule(M,_,_),	
	vrai([derrriere(N,M)]).

reponse_ou(ou([type(T),couleur(C)]),R) :-
	R=[la,T,N,est,juste,devant,M],
	vehicule(N,T,C),
	vehicule(M,_,_),	
	vrai([juste_devant(N,M)]).

reponse_ou(ou([type(T),couleur(C)]),R) :-
	R=[le,T,N,est,juste,devant,M],
	T=camion,
	vehicule(N,T,C),
	vehicule(M,_,_),	
	vrai([juste_devant(N,M)]).

reponse_ou(ou([type(T),couleur(C)]),R) :-
	R=[la,T,N,est,juste,derrière,M],
	vehicule(N,T,C),
	vehicule(M,_,_),	
	vrai([juste_derriere(N,M)]).

reponse_ou(ou([type(T),couleur(C)]),R) :-
	R=[le,T,N,est,juste,derrière,M],
	T=camion,
	vehicule(N,T,C),
	vehicule(M,_,_),	
	vrai([juste_derriere(N,M)]).

reponse_ou(ou([type(T),couleur(C)]),R) :-
	R=[la,T,N,est,en,tête,de,file],
	vehicule(N,T,C),
	vrai([tete_de_file(N)]).

reponse_ou(ou([type(T),couleur(C)]),R) :-
	R=[le,T,N,est,en,tête,de,file],
	T=camion,
	vehicule(N,T,C),
	vrai([tete_de_file(N)]).

reponse_ou(ou([type(T),couleur(C)]),R) :-
	R=[la,T,N,est,en,queue,de,file],
	vehicule(N,T,C),
	vrai([queue_de_file(N)]).

reponse_ou(ou([type(T),couleur(C)]),R) :-
	R=[le,T,N,est,en,queue,de,file],
	T=camion,
	vehicule(N,T,C),
	vrai([queue_de_file(N)]).

reponse_ou(ou([nom(N),couleur(C)]),R) :-
	R=[la,T,N,est,devant,M],
	vehicule(N,T,C),
	vehicule(M,_,_),	
	vrai([devant(N,M)]).

reponse_ou(ou([nom(N),couleur(C)]),R) :-
	R=[le,T,N,est,devant,M],
	T=camion,
	vehicule(N,T,C),
	vehicule(M,_,_),	
	vrai([devant(N,M)]).

reponse_ou(ou([nom(N),couleur(C)]),R) :-
	R=[la,T,N,est,derrière,M],
	vehicule(N,T,C),
	vehicule(M,_,_),	
	vrai([derriere(N,M)]).

reponse_ou(ou([nom(N),couleur(C)]),R) :-
	R=[le,T,N,est,derriere,M],
	T=camion,
	vehicule(N,T,C),
	vehicule(M,_,_),	
	vrai([derrriere(N,M)]).

reponse_ou(ou([nom(N),couleur(C)]),R) :-
	R=[la,T,N,est,juste,devant,M],
	vehicule(N,T,C),
	vehicule(M,_,_),	
	vrai([juste_devant(N,M)]).

reponse_ou(ou([nom(N),couleur(C)]),R) :-
	R=[le,T,N,est,juste,devant,M],
	T=camion,
	vehicule(N,T,C),
	vehicule(M,_,_),	
	vrai([juste_devant(N,M)]).

reponse_ou(ou([nom(N),couleur(C)]),R) :-
	R=[la,T,N,est,juste,derrière,M],
	vehicule(N,T,C),
	vehicule(M,_,_),	
	vrai([juste_derriere(N,M)]).

reponse_ou(ou([nom(N),couleur(C)]),R) :-
	R=[le,T,N,est,juste,derrière,M],
	T=camion,
	vehicule(N,T,C),
	vehicule(M,_,_),	
	vrai([juste_derriere(N,M)]).

reponse_ou(ou([nom(N),couleur(C)]),R) :-
	R=[la,T,N,est,en,tête,de,file],
	vehicule(N,T,C),
	vrai([tete_de_file(N)]).

reponse_ou(ou([nom(N),couleur(C)]),R) :-
	R=[le,T,N,est,en,tête,de,file],
	T=camion,
	vehicule(N,T,C),
	vrai([tete_de_file(N)]).

reponse_ou(ou([nom(N),couleur(C)]),R) :-
	R=[la,T,N,est,en,queue,de,file],
	vehicule(N,T,C),
	vrai([queue_de_file(N)]).

reponse_ou(ou([nom(N),couleur(C)]),R) :-
	R=[le,T,N,est,en,queue,de,file],
	T=camion,
	vehicule(N,T,C),
	vrai([queue_de_file(N)]).

reponse_ou(ou([type(T),nom(N)]),R) :-
	R=[la,T,N,est,devant,M],
	vehicule(N,T,_),
	vehicule(M,_,_),	
	vrai([devant(N,M)]).

reponse_ou(ou([type(T),nom(N)]),R) :-
	R=[le,T,N,est,devant,M],
	T=camion,
	vehicule(N,T,_),
	vehicule(M,_,_),	
	vrai([devant(N,M)]).

reponse_ou(ou([type(T),nom(N)]),R) :-
	R=[la,T,N,est,derrière,M],
	vehicule(N,T,_),
	vehicule(M,_,_),	
	vrai([derriere(N,M)]).

reponse_ou(ou([type(T),nom(N)]),R) :-
	R=[le,T,N,est,derriere,M],
	T=camion,
	vehicule(N,T,_),
	vehicule(M,_,_),	
	vrai([derrriere(N,M)]).

reponse_ou(ou([type(T),nom(N)]),R) :-
	R=[la,T,N,est,juste,devant,M],
	vehicule(N,T,_),
	vehicule(M,_,_),	
	vrai([juste_devant(N,M)]).

reponse_ou(ou([type(T),nom(N)]),R) :-
	R=[le,T,N,est,juste,devant,M],
	T=camion,
	vehicule(N,T,_),
	vehicule(M,_,_),	
	vrai([juste_devant(N,M)]).

reponse_ou(ou([type(T),nom(N)]),R) :-
	R=[la,T,N,est,juste,derrière,M],
	vehicule(N,T,_),
	vehicule(M,_,_),	
	vrai([juste_derriere(N,M)]).

reponse_ou(ou([type(T),nom(N)]),R) :-
	R=[le,T,N,est,juste,derrière,M],
	T=camion,
	vehicule(N,T,_),
	vehicule(M,_,_),	
	vrai([juste_derriere(N,M)]).

reponse_ou(ou([type(T),nom(N)]),R) :-
	R=[la,T,N,est,en,tête,de,file],
	vehicule(N,T,_),
	vrai([tete_de_file(N)]).

reponse_ou(ou([type(T),nom(N)]),R) :-
	R=[le,T,N,est,en,tête,de,file],
	T=camion,
	vehicule(N,T,_),
	vrai([tete_de_file(N)]).

reponse_ou(ou([type(T),nom(N)]),R) :-
	R=[la,T,N,est,en,queue,de,file],
	vehicule(N,T,_),
	vrai([queue_de_file(N)]).

reponse_ou(ou([type(T),nom(N)]),R) :-
	R=[le,T,N,est,en,queue,de,file],
	T=camion,
	vehicule(N,T,_),
	vrai([queue_de_file(N)]).

reponse_ou(ou([type(T)]),R) :-
	R=[la,T,N,est,devant,M],
	vehicule(N,T,_),
	vehicule(M,_,_),	
	vrai([devant(N,M)]).

reponse_ou(ou([type(T)]),R) :-
	R=[le,T,N,est,devant,M],
	T=camion,
	vehicule(N,T,_),
	vehicule(M,_,_),	
	vrai([devant(N,M)]).

reponse_ou(ou([type(T)]),R) :-
	R=[la,T,N,est,derrière,M],
	vehicule(N,T,_),
	vehicule(M,_,_),	
	vrai([derriere(N,M)]).

reponse_ou(ou([type(T)]),R) :-
	R=[le,T,N,est,derriere,M],
	T=camion,
	vehicule(N,T,_),
	vehicule(M,_,_),	
	vrai([derrriere(N,M)]).

reponse_ou(ou([type(T)]),R) :-
	R=[la,T,N,est,juste,devant,M],
	vehicule(N,T,_),
	vehicule(M,_,_),	
	vrai([juste_devant(N,M)]).

reponse_ou(ou([type(T)]),R) :-
	R=[le,T,N,est,juste,devant,M],
	T=camion,
	vehicule(N,T,_),
	vehicule(M,_,_),	
	vrai([juste_devant(N,M)]).

reponse_ou(ou([type(T)]),R) :-
	R=[la,T,N,est,juste,derrière,M],
	vehicule(N,T,_),
	vehicule(M,_,_),	
	vrai([juste_derriere(N,M)]).

reponse_ou(ou([type(T)]),R) :-
	R=[le,T,N,est,juste,derrière,M],
	T=camion,
	vehicule(N,T,_),
	vehicule(M,_,_),	
	vrai([juste_derriere(N,M)]).

reponse_ou(ou([type(T)]),R) :-
	R=[la,T,N,est,en,tête,de,file],
	vehicule(N,T,_),
	vrai([tete_de_file(N)]).

reponse_ou(ou([type(T)]),R) :-
	R=[le,T,N,est,en,tête,de,file],
	T=camion,
	vehicule(N,T,_),
	vrai([tete_de_file(N)]).

reponse_ou(ou([type(T)]),R) :-
	R=[la,T,N,est,en,queue,de,file],
	vehicule(N,T,_),
	vrai([queue_de_file(N)]).

reponse_ou(ou([type(T)]),R) :-
	R=[le,T,N,est,en,queue,de,file],
	T=camion,
	vehicule(N,T,_),
	vrai([queue_de_file(N)]).

reponse_ou(ou([couleur(C)]),R) :-
	R=[la,T,N,est,devant,M],
	vehicule(N,T,C),
	vehicule(M,_,_),	
	vrai([devant(N,M)]).

reponse_ou(ou([couleur(C)]),R) :-
	R=[le,T,N,est,devant,M],
	T=camion,
	vehicule(N,T,C),
	vehicule(M,_,_),	
	vrai([devant(N,M)]).

reponse_ou(ou([couleur(C)]),R) :-
	R=[la,T,N,est,derrière,M],
	vehicule(N,T,C),
	vehicule(M,_,_),	
	vrai([derriere(N,M)]).

reponse_ou(ou([couleur(C)]),R) :-
	R=[le,T,N,est,derriere,M],
	T=camion,
	vehicule(N,T,C),
	vehicule(M,_,_),	
	vrai([derrriere(N,M)]).

reponse_ou(ou([couleur(C)]),R) :-
	R=[la,T,N,est,juste,devant,M],
	vehicule(N,T,C),
	vehicule(M,_,_),	
	vrai([juste_devant(N,M)]).

reponse_ou(ou([couleur(C)]),R) :-
	R=[le,T,N,est,juste,devant,M],
	T=camion,
	vehicule(N,T,C),
	vehicule(M,_,_),	
	vrai([juste_devant(N,M)]).

reponse_ou(ou([couleur(C)]),R) :-
	R=[la,T,N,est,juste,derrière,M],
	vehicule(N,T,C),
	vehicule(M,_,_),	
	vrai([juste_derriere(N,M)]).

reponse_ou(ou([couleur(C)]),R) :-
	R=[le,T,N,est,juste,derrière,M],
	T=camion,
	vehicule(N,T,C),
	vehicule(M,_,_),	
	vrai([juste_derriere(N,M)]).

reponse_ou(ou([couleur(C)]),R) :-
	R=[la,T,N,est,en,tête,de,file],
	vehicule(N,T,C),
	vrai([tete_de_file(N)]).

reponse_ou(ou([couleur(C)]),R) :-
	R=[le,T,N,est,en,tête,de,file],
	T=camion,
	vehicule(N,T,C),
	vrai([tete_de_file(N)]).

reponse_ou(ou([couleur(C)]),R) :-
	R=[la,T,N,est,en,queue,de,file],
	vehicule(N,T,C),
	vrai([queue_de_file(N)]).

reponse_ou(ou([couleur(C)]),R) :-
	R=[le,T,N,est,en,queue,de,file],
	T=camion,
	vehicule(N,T,C),
	vrai([queue_de_file(N)]).

reponse_ou(ou([nom(N)]),R) :-
	R=[la,T,N,est,devant,M],
	vehicule(N,T,_),
	vehicule(M,_,_),	
	vrai([devant(N,M)]).

reponse_ou(ou([nom(N)]),R) :-
	R=[le,T,N,est,devant,M],
	T=camion,
	vehicule(N,T,_),
	vehicule(M,_,_),	
	vrai([devant(N,M)]).

reponse_ou(ou([nom(N)]),R) :-
	R=[la,T,N,est,derrière,M],
	vehicule(N,T,_),
	vehicule(M,_,_),	
	vrai([derriere(N,M)]).

reponse_ou(ou([nom(N)]),R) :-
	R=[le,T,N,est,derriere,M],
	T=camion,
	vehicule(N,T,_),
	vehicule(M,_,_),	
	vrai([derrriere(N,M)]).

reponse_ou(ou([nom(N)]),R) :-
	R=[la,T,N,est,juste,devant,M],
	vehicule(N,T,_),
	vehicule(M,_,_),	
	vrai([juste_devant(N,M)]).

reponse_ou(ou([nom(N)]),R) :-
	R=[le,T,N,est,juste,devant,M],
	T=camion,
	vehicule(N,T,_),
	vehicule(M,_,_),	
	vrai([juste_devant(N,M)]).

reponse_ou(ou([nom(N)]),R) :-
	R=[la,T,N,est,juste,derrière,M],
	vehicule(N,T,_),
	vehicule(M,_,_),	
	vrai([juste_derriere(N,M)]).

reponse_ou(ou([nom(N)]),R) :-
	R=[le,T,N,est,juste,derrière,M],
	T=camion,
	vehicule(N,T,_),
	vehicule(M,_,_),	
	vrai([juste_derriere(N,M)]).

reponse_ou(ou([nom(N)]),R) :-
	R=[la,T,N,est,en,tête,de,file],
	vehicule(N,T,_),
	vrai([tete_de_file(N)]).

reponse_ou(ou([nom(N)]),R) :-
	R=[le,T,N,est,en,tête,de,file],
	T=camion,
	vehicule(N,T,_),
	vrai([tete_de_file(N)]).

reponse_ou(ou([nom(N)]),R) :-
	R=[la,T,N,est,en,queue,de,file],
	vehicule(N,T,_),
	vrai([queue_de_file(N)]).

reponse_ou(ou([nom(N)]),R) :-
	R=[le,T,N,est,en,queue,de,file],
	T=camion,
	vehicule(N,T,_),
	vrai([queue_de_file(N)]).

requete_action([X|L],act([av(X)])) :- 
	vehicule(X,_,_),
	member(avance,L).

requete_action([X|L],act([doub(X,Y)])) :- 
	vehicule(X,_,_),
	member(Y,L),
	vehicule(Y,_,_),
	member(double,L).

requete_action([X|L],act([rec(X)])) :- 
	vehicule(X,_,_),
	member(recule,L).

reponse_action(act([rec(X)])) :-
	vehicule(X,_,_),
	action(recule(X)).

reponse_action(act([av(X)])) :-
	vehicule(X,_,_),
	action(avance(X)).

reponse_action(act([doub(X,Y)])) :-
	vehicule(X,_,_),
	vehicule(Y,_,_),
	action(double(X,Y)).

requete1 :- 
	lire_phrase(Q), 
	tokenise(Q,S), 
	setof(R, requete_qui(S,R), L), 
	last(L,M), 
	reponse_qui(M,N), 
	affiche2(N),
	setof(B,reponse_qui(B,N),N).

requete2 :- 
	lire_phrase(Q), 
	tokenise(Q,S), 
	setof(R, requete_ou(S,R), L), 
	last(L,M), 
	reponse_ou(M,N),
	affiche2(N),
	setof(B,reponse_ou(B,N),N). 

requete3 :- 
	lire_phrase(Q), 
	tokenise(Q,S), 
	requete_action(S,R),
	reponse_action(R).

affiche2([]).
affiche2([X|Liste]) :-  write(X), write(' '), affiche2(Liste), write('\n'), n=1.

