\documentstyle{farticle}
\topmargin -1.5cm
\oddsidemargin 0cm
\evensidemargin 0cm
\textheight 25cm
\textwidth 17.0cm
\title{Examen final Prolog / Juin 1994 --- ESSI2  }
\author{Michel Rueher}
\date{}

\begin{document}
\maketitle
\begin{center}
{\large Documents autoris\'es: {\it supports (et notes) de cours de TD}}
\end{center}	
\section{Arbre de recherche et arbre de preuves ---  3 points }
 	Construire l'arbre de recherche et exhiber les arbres de preuves  pour la  
	requ\^ete {\tt plus(X,Y,s(s(s(zero))))} et le le programme ci-dessous:
	{ \small
     \begin{verbatim}
plus(zero,X,X).
plus(s(X),Y,s(Z)) :-
     plus(X,Y,Z).}
\end{verbatim}    } 

\section{Programme {\tt mybagof/3 } ---  5 points }
\begin{itemize}
\item     Expliquer le r\^ole  du {\tt fail} dans la premi\`ere clause du programme ci-dessous :
     { \small
     \begin{verbatim}

 mybagof(O,P,L):-                               add_mylist(O) :- 
      P,                                              retract(mylist(L-S)),
      add_mylist(O),                                  S=[O|S1],             
      fail.                                           assert(mylist(L-S1))  
 
 mybagof(_,_,L) :- !,                           add_mylist(O) :-
      retract(mylist(L-[])).                          not(mylist(_)), !                   
                                                      L = [O|S],
                                                      assert(mylist(L-S)).
\end{verbatim}	}

\item	Construire l'arbre de recherche pour les requ\^etes {\tt mybagof(I,p(I),L) } avec le ``jeu d'essais'' 
	suivant :
	{ \small
	\begin{verbatim}
       p(b).        p(a).       p(c).        p(a).        p(d). 
\end{verbatim}	}
\end{itemize}	


\end{verbatim} }
\section{Programme  {\tt coupure/3 } ---  5 points }
Expliquez le r\^ole du pr\'edicat {\tt coupable/1} dans le programme ci dessous.
	{ \small
	\begin{verbatim}

coupure1([V1,C1,V2|Suite],[V1,-,C1|Reste]):-    coupure1([V1,C1,C2,V2|Suite],[V1,C1,-,C2|Reste]):-
     voyelle(V1),                                          voyelle(V1),
     consonne(C1),                                         consonne(C1),
     voyelle(V2),                                          consonne(C2),
     coupure1([V2|Suite],Reste).                           not non_separable(C1,C2),
                                                           voyelle(V2),
coupure1([V1,C1,C2|Suite],[V1,-,C1|Reste]):-               coupure1([V2|Suite],Reste).
     voyelle(V1),
     consonne(C1),                              coupure1([C1,C2,C3|Suite],[C1,C2,-|Reste]):-
     consonne(C2),                                         consonne(C1),
     non_separable(C1,C2),                                 consonne(C2),
     coupure1([C2|Suite],Reste).                           consonne(C3),
                                                           not non_separable(C2,C3),
coupure1([C1,C2,C3|Suite],[C1,-,C2|Reste]):-               coupure1([C3|Suite],Reste).
     consonne(C1),
     consonne(C2),                              
     consonne(C3),                                       
     non_separable(C2,C3),                      
     coupure1([C3|Suite],Reste).

coupure1([L1|Suite],[L1|Reste]):-
     not coupable([L1|Suite]),
     coupure1(Suite,Reste).

coupable([L1,L2,L3|_]):-     
     voyelle(L1), 
     consonne(L2), 
     voyelle(L3).
coupable([L1,L2,L3,L4|_]):-          
     voyelle(L1), 
     consonne(L2), 
     consonne(L3),
     voyelle(L4) .
coupable([L1,L2,L3|_]):-          
     consonne(L1),
     consonne(L2),
     consonne(L3).

coupure1([],[]).

\end{verbatim}     }

\end{document}     


