var [const] D=Dictionary; // short cut // blank symbol and terminating state(s) are Void var Lt=-1, Sy=0, Rt=1; // Left, Stay, Right fcn printTape(tape,pos){ tape.keys.apply("toInt").sort() .pump(String,'wrap(i){ ((pos==i) and "(%s)" or " %s ").fmt(tape[i]) }) .println(); } fcn turing(state,[D]tape,[Int]pos,[D]rules,verbose=True,n=0){ if(not state){ print("%d steps. Length %d. Tape: ".fmt(n,tape.len())); printTape(tape,Void); return(tape); } r:=rules[state][tape[pos] = tape.find(pos)]; if(verbose) printTape(tape,pos); tape[pos]=r[0]; return(self.fcn(r[2],tape,pos+r[1],rules,verbose,n+1)); }