turing(State,[Letter|Left]-Right,FinalTape):- 
c(State,Letter,NewState,Write,Move), 
move(Move,[Write|Left]-Right,NewTape), 
turing(NewState,NewTape,FinalTape). 
turing(State,Tape,Tape):- 
f(State). 
  
move(none,Tape,Tape). 
move(left,[X|Left]-Right,NewLeft-NewRight):- 
(Left=[] -> NewLeft=[free] ; NewLeft=Left), 
(Right=[free] -> NewRight=[X] ; NewRight=[X|Right]). 
move(right,Left-[X|Right],NewLeft-Right):- 
Left=[free] -> NewLeft=[X] ; NewLeft=[X|Left]. 
move(right,Left-[],NewLeft-[]):- 
Left=[free] -> NewLeft=Left ; NewLeft=[free|Left]. 
