% Author:
% Date: 05/01/2011

:- dynamic(etudiants/4).
:- op(1100,fx,afficheTout).
:- op(1100,fx,afficheElement).

%etudiants(IdEtudiant,Nom,Prenom,Classe)

etudiants(1,'Funck','Thibaut','ING2').
etudiants(2,'Machizaud','Andrea','ING2').
etudiants(3,'Montreau','Clément','ING1').

%notes(IdNote,Matiere,IdEtudiant,Note)

notes(1,'Microeconomie',1,20).
notes(2,'Microeconomie',2,9).

for(X,Y):- X,Y,fail.
for(_X,_Y).

%damier(Case,Etat,Ligne)

damier(1,'o',1).
damier(2,'o',1).
damier(3,'o',1).
damier(4,'o',1).
damier(5,'o',1).
damier(6,'o',2).
damier(7,'o',2).
damier(8,'o',2).
damier(9,'o',2).
damier(10,'o',2).
damier(11,'o',3).
damier(12,'o',3).
damier(13,'o',3).
damier(14,'o',3).
damier(15,'o',3).
damier(16,'o',4).
damier(17,'o',4).
damier(18,'o',4).
damier(19,'o',4).
damier(20,'o',4).
damier(21,' ',5).
damier(22,' ',5).
damier(23,' ',5).
damier(24,' ',5).
damier(25,' ',5).
damier(26,' ',6).

afficheDamier :-
      damier(_,_,Ligne),
      afficheLigne(Ligne),nl.
      
afficheLigne(Ligne) :-
    damier(Numero,_,Ligne),
    afficheCase(Numero).

afficheCase(Case) :-
    damier(Case,Etat,_),
    write(Etat), tab(1), fail.
    
age(jean,84).
age(richard,62).
age(nicolas,35).
age(francois,58).
age(bernard,60).
age(paul,79).
age(toto,19).
age(hugo,4).
age(thomas,2).

ageSup(X,Borne) :-
    age(X,Age),
    Age =< Borne.

afficheElement[Elt,Critere] :- nl,
                               for(Critere,(write(Elt),nl)).

afficheTout X :- afficheElement[X,X].
  
promote(IdEtudiant) :-
 retract( etudiants(IdEtudiant,Nom,Prenom,_OldPromo) ),
 %Handle OldPromo case
 assert( etudiants(IdEtudiant,Nom,Prenom,'ING3') ).