20 lines
651 B
Text
20 lines
651 B
Text
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));
|
|
}
|