diff options
-rw-r--r-- | Assignment2/src/DTMC.dcl | 1 | ||||
-rw-r--r-- | Assignment2/src/DTMC.icl | 20 |
2 files changed, 20 insertions, 1 deletions
diff --git a/Assignment2/src/DTMC.dcl b/Assignment2/src/DTMC.dcl index a4cf524..5d948fb 100644 --- a/Assignment2/src/DTMC.dcl +++ b/Assignment2/src/DTMC.dcl @@ -16,3 +16,4 @@ from System.FilePath import :: FilePath } parseDTMC :: !FilePath !*World -> *(!*DTMC, !*World) +addVars :: *DTMC -> *DTMC diff --git a/Assignment2/src/DTMC.icl b/Assignment2/src/DTMC.icl index abcfd06..d3071c1 100644 --- a/Assignment2/src/DTMC.icl +++ b/Assignment2/src/DTMC.icl @@ -14,7 +14,7 @@ import Data.Error from Data.Func import $, mapSt, seqSt import Data.List import qualified Data.Map as M -from Data.Map import :: Map +from Data.Map import :: Map, alter import Data.Maybe import System.File import System.FilePath @@ -164,6 +164,24 @@ where | isEmpty current = groupLines head [line] lines | otherwise = [reverse current:groupLines head [line] lines] +addVars :: *DTMC -> *DTMC +addVars dtmc = {DTMC | nr_states = dtmc.nr_states, states = addVarsS 0 dtmc.nr_states dtmc.states} +where + addVarsS :: !Int !Int !*{Maybe State} -> *{Maybe State} + addVarsS i m ss + | i >= m = ss + | otherwise = addVarsS (i + 1) m {ss & [i]=addVarsT 0 m ss.[i]} + + addVarsT :: Int Int (Maybe State) -> (Maybe State) + addVarsT _ _ Nothing = Nothing + addVarsT i m (Just s) + | i >= m = Just s + | otherwise = (addVarsT (i + 1) m (Just {s & transitions = alter (addVar i s.state_id) i s.transitions})) + + addVar :: Int Int (Maybe String) -> Maybe String + addVar _ _ Nothing = Nothing + addVar f t (Just fn) = Just ("((" <+ fn <+ ") + " <+ f <+ "_" <+ t <+ ")") + Start w # (dtmc,w) = parseDTMC "die.drn" w = [(s.state_id, 'M'.toList s.transitions, '\n') \\ Just s <-: (stateElimination dtmc).states] |