Napište iterativní proceduru divided-by-three?, která zjistí, jestli je součet čísel v daném
seznamu (obsahující pouze čísla 0, 1 a 2) dělitelný třemi. K implementaci použijte
tzv. konečný automat, jehož činnost je popsána orientovaným grafem znázorněným na
následujícím obrázku:

Vrcholy označené jako q0, q1, q2 představují stavy, ve kterých se automat muže nacházet,
hrany znázorňují do jakého stavu automat přejde zpracováním čísla určeného ohodnocením
dané hrany. Činnost automatu je podrobněji popsána na následujícím příkladu:
> (divided-by-three? ’(2 0 2 1 1))
#t
Stav automatu na začátku zpracování seznamu je vždy q0 (vrchol oznacený šipkou, která vede „odnikud“).
Automat muže zpracovávat seznam čísel např. zleva doprava, tzn. začne číslem 2.
Prejde tedy ze stavu q0 do stavu q2 (díky hraně, která směřuje z q0 do q2 a je
ohodnocena císlem 2). Poté zpracovává další císlo v seznamu, tzn. císlo 0. Hrana ohodnocená
nulou vycházející z vrcholu q2 vede opět do vrcholu q2, automat tedy zpracováním čísla 0 svůj stav nezmění.
Dál je přečteno číslo 2, automat přejde do stavu q1.
Zpracováním čísla 1 přejde z q1 zpět do q2 a na závěr přečtením čísla 1 přejde do stavu q0.
Pokud bude stav automatu po přečtení všech čísel q0 1, pak je součet všech čísel dělitelný třemi.
Pokud bude jeho stav na konci zpracování jiný než q0, pak soucet není delitelný tremi.
Další příklad:
> (divided-by-three? ’(0 1 2 2 2 2 1))
#f
Automat po přečtení všech čísel skončí ve stavu q1, tzn., že součet čísel 0+1+2+2+2+2+1
není dělitelný třemi.