/*************/
/* Solution1 */
/*************/

/* Les voyelles                                                             */
voyelle(a).
voyelle(e).
voyelle(i).
voyelle(o).
voyelle(u).
voyelle(y).



/* Les consonnes                                                            */
consonne(C):- \+ voyelle(C).



/* Les groupes ch, ph, gn, th sont inseparables */
non_separable(c,h).
non_separable(p,h).
non_separable(g,n).
non_separable(t,h).


/* Le groupe [C,l] est inseparable si C est une consonne differente de l.   */
non_separable(C,l):-
	C \== l,
	consonne(C).


/* Le groupe [C,r] est inseparable si C est une consonne differente de r.   */
non_separable(C,r):-
	C \== r,
	consonne(C).



/* Une consonne placee entre deux voyelles introduit une nouvelle syllabe.  */
coupure([V1,C1,V2|Suite],[V1,-,C1|Reste]):-
	voyelle(V1),
	consonne(C1),
	voyelle(V2),
	coupure([V2|Suite],Reste).


/* De deux consonnes placees entre deux voyelles, la premiere appartient a  */
/* la syllabe precedente, la seconde a la suivante.                         */
/* Exception: le cas des consonnes non separables.                          */
coupure([V1,C1,C2,V2|Suite],[V1,C1,-,C2|Reste]):-
	voyelle(V1),
	consonne(C1),
	consonne(C2),
	\+ non_separable(C1,C2),
	voyelle(V2),
	coupure([V2|Suite],Reste).


/* L'exception sus-citee (on coupe avant les deux consonnes).               */
coupure([V1,C1,C2|Suite],[V1,-,C1|Reste]):-
	voyelle(V1),
	consonne(C1),
	consonne(C2),
	non_separable(C1,C2),
	coupure([C2|Suite],Reste).


/* Quand il y a trois consonnes consecutives a l'interieur d'un mot,        */
/* ordinairement les deux premieres terminent une syllabe, l'autre commence */
/* la suivante sauf si les deux dernieres consonnes sont inseparables.      */
coupure([C1,C2,C3|Suite],[C1,C2,-|Reste]):-
	consonne(C1),
	consonne(C2),
	consonne(C3),
	\+ non_separable(C2,C3),
	coupure([C3|Suite],Reste).

coupure([C1,C2,C3|Suite],[C1,-,C2|Reste]):-
	consonne(C1),
	consonne(C2),
	consonne(C3),
	non_separable(C2,C3),
	coupure([C3|Suite],Reste).



/* Cas terminal                                                             */
coupure([],[]).


/* Si il n'y a pas de separation. (ramasse miettes)                         */
/* Cette solution ou le cas complementaire est a la fin est efficace mais   */
/* introduit un determinisme genant pour l'evolution du programme           */

coupure([L1|Suite],[L1|Reste]):-
	coupure(Suite,Reste).





/******************/
/*  Solution  2   */
/******************/



/* Une consonne placee entre deux voyelles introduit une nouvelle syllabe.  */
coupure1([V1,C1,V2|Suite],[V1,-,C1|Reste]):-
	voyelle(V1),
	consonne(C1),
	voyelle(V2),
	coupure1([V2|Suite],Reste).


/* De deux consonnes placees entre deux voyelles, la premiere appartient a  */
/* la syllabe precedente, la seconde a la suivante.                         */
/* Exception: le cas des consonnes non separables.                          */
coupure1([V1,C1,C2,V2|Suite],[V1,C1,-,C2|Reste]):-
	voyelle(V1),
	consonne(C1),
	consonne(C2),
	\+ non_separable(C1,C2),
	voyelle(V2),
	coupure1([V2|Suite],Reste).


/* L'exception sus-citee (on coupe avant les deux consonnes).               */
coupure1([V1,C1,C2|Suite],[V1,-,C1|Reste]):-
	voyelle(V1),
	consonne(C1),
	consonne(C2),
	non_separable(C1,C2),
	coupure1([C2|Suite],Reste).


/* Quand il y a trois consonnes consecutives a l'interieur d'un mot,        */
/* ordinairement les deux premieres terminent une syllabe, l'autre commence */
/* la suivante sauf si les deux dernieres consonnes sont inseparables.      */
coupure1([C1,C2,C3|Suite],[C1,C2,-|Reste]):-
	consonne(C1),
	consonne(C2),
	consonne(C3),
	\+ non_separable(C2,C3),
	coupure1([C3|Suite],Reste).

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

coupure1([L1|Suite],[L1|Reste]):-
	\+ 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);non_separable(L2,L3)) .
coupable([L1,L2,L3|_]):-		
	consonne(L1),
	consonne(L2),
	consonne(L3).



/* Cas terminal                                                             */
coupure1([],[]).




/*
| ?- coupure1([s,t,r,u,c,t,u,r,e],L).

L = [s,-,t,r,u,c,-,t,u,-,r,e]

true
| ?- coupure1([c,h,a,l,e,u,r],H).

H = [c,h,a,-,l,e,u,r]

true
| ?-  coupure1([e,l,e,l,l,e],X).

X = [e,-,l,e,l,-,l,e]

true
*/
