diff options
author | Camil Staps | 2018-07-06 11:32:35 +0200 |
---|---|---|
committer | Camil Staps | 2018-07-06 11:32:35 +0200 |
commit | 33fa083d6aae58370d377aa60d1c99223d303f5e (patch) | |
tree | 1268f42a4b2b9a681e0ee81e4c7733561492d9b8 /Assignment2 | |
parent | This is so ugly (diff) |
Collect parameters
Diffstat (limited to 'Assignment2')
-rw-r--r-- | Assignment2/src/DTMC.dcl | 7 | ||||
-rw-r--r-- | Assignment2/src/DTMC.icl | 54 |
2 files changed, 34 insertions, 27 deletions
diff --git a/Assignment2/src/DTMC.dcl b/Assignment2/src/DTMC.dcl index 26cbe19..c087860 100644 --- a/Assignment2/src/DTMC.dcl +++ b/Assignment2/src/DTMC.dcl @@ -5,8 +5,9 @@ from Data.Maybe import :: Maybe from System.FilePath import :: FilePath :: *DTMC = - { nr_states :: !Int - , states :: !*{Maybe State} + { nr_states :: !Int + , parameters :: ![String] + , states :: !*{Maybe State} } :: State = @@ -18,4 +19,4 @@ from System.FilePath import :: FilePath stateElimination :: !*DTMC -> *DTMC parseDTMC :: !FilePath !*World -> *(!*DTMC, !*World) printDTMC :: !*DTMC -> *(!String, !*DTMC) -addVars :: *DTMC -> *DTMC +addVars :: !*DTMC -> *DTMC diff --git a/Assignment2/src/DTMC.icl b/Assignment2/src/DTMC.icl index 1d9bafd..d555782 100644 --- a/Assignment2/src/DTMC.icl +++ b/Assignment2/src/DTMC.icl @@ -137,8 +137,9 @@ parseDTMCFromLines lines # [nr_states:_:lines] = tl $ dropWhile ((<>) "@nr_states") lines # states = map parseState $ groupLines "\t" [] lines = - { nr_states = toInt nr_states - , states = {Just s \\ s <- states} + { nr_states = toInt nr_states + , parameters = [] + , states = {Just s \\ s <- states} } where parseState :: ![String] -> State @@ -166,12 +167,13 @@ where | otherwise = [reverse current:groupLines head [line] lines] printDTMC :: !*DTMC -> *(!String, !*DTMC) -printDTMC dtmc=:{nr_states,states} +printDTMC dtmc=:{nr_states,parameters,states} # (state_strings,states) = printStates 0 states -# s = join "\n" +# s = join "\n" $ [ "@type: DTMC" - , "@parameters\n" - , "@reward_models\n" + , "@parameters" + ] ++ if (isEmpty parameters) [""] parameters ++ + [ "@reward_models\n" , "@nr_states" , toString nr_states , "@model" @@ -193,25 +195,29 @@ where # (reprs,ss) = printStates (i+1) ss = (repr ++ reprs,ss) -addVars :: *DTMC -> *DTMC -addVars dtmc = {DTMC | nr_states = dtmc.nr_states, states = addVarsS 0 dtmc.nr_states dtmc.states} +addVars :: !*DTMC -> *DTMC +addVars dtmc=:{nr_states} = addVarsS (nr_states-1) dtmc where - addVarsS :: !Int !Int !*{Maybe State} -> *{Maybe State} - addVarsS fi m ss - | fi >= m = ss - | otherwise = addVarsS (fi + 1) m (addVarsT fi 0 m ss) - - addVarsT :: !Int !Int !Int !*{Maybe State} -> *{Maybe State} - addVarsT fi ti m ss - | ti >= m = ss - # (s, ss) = ss![fi] - = case s of - Nothing -> ss - (Just s) -> addVarsT fi (ti + 1) m {ss & [fi] = Just {s & transitions = alter (addVar fi ti) ti s.transitions}} - - addVar :: Int Int (Maybe String) -> Maybe String - addVar _ _ Nothing = Nothing - addVar f t (Just fn) = Just ("((" <+ fn <+ ") + v" <+ f <+ "_" <+ t <+ ")") + addVarsS :: !Int !*DTMC -> *DTMC + addVarsS i dtmc=:{states} + | i < 0 = dtmc + # (s,states) = states![i] + # dtmc & states = states + | isNothing s = dtmc + # s = fromJust s + # dtmc = seqSt (uncurry $ addVar i) ('M'.toList s.transitions) dtmc + = addVarsS (i-1) dtmc + + addVar :: !Int !Int !String !*DTMC -> *DTMC + addVar f t prob dtmc=:{parameters} + # (s,dtmc) = dtmc!states.[f] + # s = fromJust s + # s & transitions = 'M'.put t ("((" <+ prob <+ ") + " <+ var <+ ")") s.transitions + # dtmc & states.[f] = Just s + # dtmc & parameters = [var:parameters] + = dtmc + where + var = "v" <+ f <+ "_" <+ t Start w # ([prog:args],w) = getCommandLine w |