2-Prolog :
simulMealy(ENTREES , SORTIES) :-
simulMealy(e0 , ENTREES , SORTIES).
simulMealy(EtatCourant ,[E|ENTREE] , [S|SORTIE]) :-
traite(EtatCourant , E , S , EtatSuivant),
simulMealy(EtatSuivant ,ENTREE , SORTIE).
simulMealy(_ ,[ ] , [ ]).
traite(Etat1 , E , S , Etat2) :-
transition(Etat1 , E , S , Etat2).
transition(e0 ,0 , a , e1).
transition(e0 ,1 , a , e2).
transition(e1 ,0 , b , e1).
transition(e1 ,1 , a , e2).
transition(e2 ,0 , a , e1).
transition(e2 ,1 , b , e2).
3-Hoare :
{V[1..n] & n>0}
i := 0;
{V[1..n] & i=0 & n>0}
while (i!=n &i<n)
invariant
{[universal]x (1<=x & x<=i) -> V[x]=0}
variant {n-i}
do
i := i+1;
V[i] := 0;
end;
{[universal]x (1<=x & x<=n) -> V[x]=0}
4-Java :
/* TestAutomate.java */
public class TestAutomate extends Object {
public Automate automate = new Automate();
public void simulMealy(String args[]) {
for(int i=0;i<args.length;i++){
automate.traite(Integer.parseInt(args[i]));
}
}
public static void main (String args[]) {
new TestAutomate(). simulMealy(args);
}
}
/* Automate.java */
public class Automate extends Object {
public Etat e =new E0();
public Automate() {}
public void traite(int entree) {
e= e.transition(entree);
}
}
/* Etat.java */
public abstract class Etat extends Object {
public abstract Etat transition(int entree);
public void sortie(char s) {
System.out.println(s);
}
}
/* E0.java */
public class E0 extends Etat {
public E0() {}
public Etat transition(int entree) {
sortie('a');
switch(entree){
case 0: return new E1();
case 1: return new E2();
default : throw new Error();
}
}
}
/* E1.java */
public class E1 extends Etat {
public E1() {}
public Etat transition(int entree) {
switch(entree){
case 0: sortie('b');return this;
case 1: sortie('a');return new E2();
default : throw new Error();
}
}
}
/* E2.java */
public class E2 extends Etat {
public E2() {}
public Etat transition(int entree) {
switch(entree){
case 0: sortie('a');return new E1();
case 1: sortie('b');return this;
default : throw new Error();
}
}
}
![]()