1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| (* les 4 couleurs *)
type color =
C3 | C2 | C1 | C0
(* une transition: écrire une couleur c, curseur + i, passer à l'état s *)
let trans (c3,c2,c1,c0) (i3,i2,i1,i0) (s3,s2,s1,s0) tape cursor =
match tape.(cursor) with
| C3 -> tape.(cursor) <- c3; s3 tape (i3 cursor)
| C2 -> tape.(cursor) <- c2; s2 tape (i2 cursor)
| C1 -> tape.(cursor) <- c1; s1 tape (i1 cursor)
| C0 -> tape.(cursor) <- c0; s0 tape (i0 cursor)
(* arrêter la machine *)
let stop cursor = cursor
let halt tape cursor = ()
(* les 7 états et leur transition associée *)
let
rec s0 t = trans (C2,C0,C3,C2) (pred,pred,succ,succ) (s4,s1,s0,s0) t
and s1 t = trans (C1,C0,C3,C0) (pred,pred,succ,pred) (s1,s1,s0,s1) t
and s2 t = trans (C1,C2,C3,C2) (succ,succ,succ,pred) (s2,s2,s2,s4) t
and s3 t = trans (C1,C2,C3,C3) (succ,succ,succ,pred) (s3,s3,s3,s4) t
and s4 t = trans (C1,C2,C3,C0) (pred,pred,pred,stop) (s5,s4,s4,halt) t
and s5 t = trans (C1,C2,C1,C2) (pred,pred,pred,succ) (s5,s5,s6,s2) t
and s6 t = trans (C0,C0,C1,C2) (succ,succ,succ,succ) (s0,s6,s6,s3) t |
Partager