diff options
Diffstat (limited to 'TuringMachines.dcl')
-rw-r--r-- | TuringMachines.dcl | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/TuringMachines.dcl b/TuringMachines.dcl new file mode 100644 index 0000000..d97600a --- /dev/null +++ b/TuringMachines.dcl @@ -0,0 +1,40 @@ +definition module TuringMachines + +import StdMaybe +import IterableClass +from StdOverloaded import class ==, class toString +from StdClass import class Eq + +:: TuringMachine a = { alphabet :: [a], + inputs :: [a], + transition :: Int (Maybe a) -> TuringMachineMove a } + +:: TuringMachineState a = { machine :: TuringMachine a, + state :: Int, + tapeHead :: Int, + tape :: Tape a, + running :: TuringMachineTermination } + +:: TuringMachineTermination = Running | Normal | Abnormal + +:: TuringMachineMove a = Step Int (Maybe a) Direction | Halt + +:: Direction = Left | Right + +:: Tape a :== [Maybe a] + +instance == Direction +instance == (TuringMachineMove a) | == a +instance == TuringMachineTermination + +instance toString Direction +instance toString (TuringMachineMove a) | toString a +instance toString TuringMachineTermination +instance toString (Tape a) | toString a +instance toString (TuringMachineState a) | toString a + +instance step (TuringMachineState a) | == a + +initTuringMachine :: (TuringMachine a) (Tape a) -> TuringMachineState a | Eq a +run :: (TuringMachineState a) -> TuringMachineState a | == a + |