summaryrefslogtreecommitdiff
path: root/Assignment2
diff options
context:
space:
mode:
Diffstat (limited to 'Assignment2')
-rw-r--r--Assignment2/src/DTMC.dcl1
-rw-r--r--Assignment2/src/DTMC.icl20
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]