turingMachine 0.1.2.0 → 0.1.3.0
raw patch · 3 files changed
+72/−3 lines, 3 files
Files
- src/Math/Model/Turing/FourWays.hs +66/−0
- src/Math/Model/Turing/TwoWays.hs +2/−2
- turingMachine.cabal +4/−1
+ src/Math/Model/Turing/FourWays.hs view
@@ -0,0 +1,66 @@+{-# OPTIONS_GHC -fno-warn-tabs #-}+{-# OPTIONS_HADDOCK show-extensions #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE TypeSynonymInstances #-}+{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE TypeFamilies #-}+{-|+Module : Turing1T4W+Description : Four ways turing machine+Copyright : (c) Jorge Santiago Alvarez Cuadros, 2016+License : GPL-3+Maintainer : sanjorgek@ciencias.unam.mx+Stability : experimental+Portability : portable++Four ways turing machine+-}+module Math.Model.Turing.FourWays where+import Data.Delta+import Data.State+import Data.Sigma+import Math.Model.Turing+import Math.Model.Turing.TwoWays+import Data.List+import Data.Monoid+import qualified Data.Foldable as Fold++data Tracks a = Track [Tape a] (Tape a) [Tape a] deriving(Eq)++instance (Show a) => Show (Tracks a) where+ show (Track xts ts yts) = let + f x = "--"++(show x)++"\n"+ g x = "->"++(show x)++"\n"+ h x y = (concat.(map x)) y+ in (h f xts)++(g ts)++(h f yts)++instance Functor Tracks where+ fmap f (Track xts ts yts) = let + g = map (fmap f)+ in Track (g xts) (fmap f ts) (g yts)++instance Applicative Tracks where+ pure x = Track [] (pure x) []+ (<*>) (Track _ ft _) (Track _ t _) = Track [] (ft <*> t) []++instance (Eq s, Monoid s) => Monoid (Tracks s) where+ mempty = Track [] mempty []+ mappend (Track xts ts yts) (Track zts ss wts) = let + f = zipWith mappend+ in Track (f xts zts) (mappend ts ss) (f yts wts)++instance Tapeable Tracks Symbol where+ getHead (Track _ ts _) = getHead ts+ liftTape ws = Track [] (liftTape ws) []++instance TuringM Tape Symbol FW where + moveHead Rt (T xs a []) = T (xs++[a]) mempty []+ moveHead Rt (T xs a (y:ys)) = T (xs++[a]) y ys+ moveHead Lf (T [] a ys) = T [] mempty (a:ys)+ moveHead Lf (T xs a ys) = T (init xs) (last xs) (a:ys)++instance TuringM Tracks Symbol FW where+ moveHead Up (Track [] ts yts) = Track [] mempty (ts:yts)+ moveHead Up (Track xts ts yts) = Track (init xts) (last xts) (ts:yts)+ moveHead Dw (Track xts ts []) = Track (xts++[ts]) mempty []+ moveHead Dw (Track xts ts (ys:yts)) = Track (xts++[ts]) ys yts
src/Math/Model/Turing/TwoWays.hs view
@@ -7,14 +7,14 @@ {-# LANGUAGE MultiParamTypeClasses #-} {-| Module : Turing1T4W-Description : Maquina de turing de cinta infinita+Description : Two ways turing machine Copyright : (c) Jorge Santiago Alvarez Cuadros, 2016 License : GPL-3 Maintainer : sanjorgek@ciencias.unam.mx Stability : experimental Portability : portable -Maquina de turing de cinta infinita+Two ways turing machine -} module Math.Model.Turing.TwoWays where import Data.Delta
turingMachine.cabal view
@@ -5,7 +5,7 @@ -- PVP summary: +-+------- breaking API changes -- | | +----- non-breaking API additions -- | | | +--- code changes with no API change-version: 0.1.2.0+version: 0.1.3.0 synopsis: An implementation of Turing Machine and Automaton description: An implementation of Turing Machine and Automaton for language theory@@ -33,12 +33,15 @@ , Math.Model.Automaton.Stack , Math.Model.Turing , Math.Model.Turing.TwoWays+ , Math.Model.Turing.FourWays -- other-modules: other-extensions: TypeSynonymInstances , TypeOperators , MultiParamTypeClasses , GADTSyntax , ExistentialQuantification+ , TypeFamilies+ , FlexibleInstances build-depends: base >=4.8 && <4.9 , containers >= 0.5.6.2 hs-source-dirs: src