ATM // program napisany dla modelu maszyny Turinga z Uniwersytetu Stanu Nowy Jork w Binghampton; Dodawanie liczb binarnych bez znaku // http://www.cs.binghamton.edu/~software/tm/tmdoc.html 0 1 p = // alfabet wejściowy -- p zamiast plusa, w tym modelu plus znaczy co innego 0 1 p i = B // alfabet taśmy -- B oznacza ,,blank'' -- pustą komórkę 1 // jedna taśma 1 // jedna ścieżka na taśmie 2 // taśma nieskończona z obu stron [init] // stan początkowy [done] // stan końcowy [init] 0 [init] 0 R // stan taśma --> stan taśma kierunek [init] 1 [init] 1 R [init] B [init] B R [init] = [n,1] = R // n,1 = przejście wzdłuż pierwszej liczby [n,1] 0 [n,1] 0 R [n,1] 1 [n,1] 1 R [n,1] B [n,1] B R [n,1] p [n,2] p R // n,2 = przejście wzdłuż drugiej liczby [n,2] 0 [n,2] 0 R [n,2] 1 [n,2] 1 R [n,2] B [e] B L // e = koniec zapisu na taśmie [e] 0 [pick,0] B L // pick,0 = pobieram 0 z drugiej liczby [e] 1 [pick,1] B L // pick,1 = pobieram 1 z drugiej liczby [pick,0] 0 [pick,0] 0 L [pick,0] 1 [pick,0] 1 L [pick,1] 0 [pick,1] 0 L [pick,1] 1 [pick,1] 1 L [pick,0] p [add,0] p L // add,0 = przechodzę z wartością 0 na obszar pierwszej liczby [pick,1] p [add,1] p L // add,0 = przechodzę z wartością 1 na obszar pierwszej liczby [add,0] 0 [=,0] B L // =,0 = składnik sumowania wynosi 0 [add,0] 1 [=,1] B L // =,1 = składnik sumowania wynosi 1 [add,1] 0 [=,1] B L [add,1] 1 [=,2] B L // =,2 = składnik sumowania wynosi 2 [add,0] B [add,0] B L [add,0] = [store,0] = L // store,0 = przechodzę na obszar wyniku z wartością 0 [add,1] = [store,1] = L // store,1 = przechodzę na obszar wyniku z wartością 1 [add,1] B [add,1] B L [=,0] 0 [=,0] 0 L [=,0] 1 [=,0] 1 L [=,1] 0 [=,1] 0 L [=,1] 1 [=,1] 1 L [=,2] 0 [=,2] 0 L [=,2] 1 [=,2] 1 L [=,0] = [store,0] = L [=,1] = [store,1] = L [=,2] = [store,2] = L // store,2 = przechodzę na obszar wyniku z wartością 2 [store,0] 0 [store,0] 0 L [store,1] 0 [store,1] 0 L [store,2] 0 [store,2] 0 L [store,0] 1 [store,0] 1 L [store,1] 1 [store,1] 1 L [store,2] 1 [store,2] 1 L [store,0] B [init] 0 R [store,1] B [init] 1 R [store,2] B [store,i] 0 L // store,i = przeniesienie cyfry w wyniku [store,i] B [init] i R [store,0] i [init] 1 R [store,1] i [store,i] 0 L [store,2] i [store,i] 1 L [store,i] i [store,i] 0 L [init] i [init] i R [e] p [clean] p L // clean = przeniesienie danych po zakończeniu krótszego składnika [clean] B [clean] B L [clean] 0 [=,0] B L [clean] 1 [=,1] B L [clean] = [final] B R // final = wymazanie resztek danych wejściowych [final] B [final] B R [final] p [back0] B L // back0 = powrót do bloku wynikowego [back0] B [back0] B L [back0] 0 [back1] 0 L // back1 = przewinięcie do początku wyniku [back0] 1 [back1] 1 L [back1] 0 [back1] 0 L [back1] 1 [back1] 1 L [back1] i [back1] 1 L [back1] B [done] B R end // koniec instrukcji programu