summaryrefslogtreecommitdiff
path: root/Assignment2/src/DTMC.icl
diff options
context:
space:
mode:
Diffstat (limited to 'Assignment2/src/DTMC.icl')
-rw-r--r--Assignment2/src/DTMC.icl32
1 files changed, 22 insertions, 10 deletions
diff --git a/Assignment2/src/DTMC.icl b/Assignment2/src/DTMC.icl
index 7c712e0..3b8b2a7 100644
--- a/Assignment2/src/DTMC.icl
+++ b/Assignment2/src/DTMC.icl
@@ -1,14 +1,21 @@
implementation module DTMC
import StdArray
+import StdBool
import StdClass
import StdFile
+from StdFunc import o
import StdInt
import StdList
import StdString
+import StdTuple
import Data.Error
-from Data.Func import $
+from Data.Func import $, seqSt
+import Data.List
+import qualified Data.Map as M
+from Data.Map import :: Map
+import Data.Maybe
import System.File
import System.FilePath
import Text
@@ -24,24 +31,25 @@ parseDTMCFromLines lines
# states = map parseState $ groupLines "\t" [] lines
=
{ nr_states = toInt nr_states
- , states = {s \\ s <- states}
+ , states = {Just s \\ s <- states}
}
where
parseState :: ![String] -> State
parseState [head:actions] =
- { actions = map parseAction $ groupLines "\t\t" [] actions
- , init = endsWith "init" head
+ { state_id = toInt $ trim $ head % (5,size head-1)
+ , transitions = 'M'.unions $ map (snd o parseAction) $ groupLines "\t\t" [] actions
+ , init = endsWith "init" head
}
where
- parseAction :: ![String] -> Action
+ parseAction :: ![String] -> (!Int, !Map Int String)
parseAction [head:transitions] =
- { action_id = toInt (head % (8, size head-1))
- , transitions = map parseTransition transitions
- }
+ ( toInt (head % (8, size head-1))
+ , 'M'.fromList $ map parseTransition transitions
+ )
where
- parseTransition :: !String -> Transition
+ parseTransition :: !String -> (!Int, !String)
parseTransition s = case split " : " (trim s) of
- [id:prob:_] -> {to_state=toInt id, probability=prob}
+ [id:prob:_] -> (toInt id, prob)
groupLines :: !String ![String] ![String] -> [[String]]
groupLines head current [] = [reverse current]
@@ -49,3 +57,7 @@ where
| startsWith head line = groupLines head [line:current] lines
| isEmpty current = groupLines head [line] lines
| otherwise = [reverse current:groupLines head [line] lines]
+
+Start w
+# (dtmc,w) = parseDTMC "die.drn" w
+= stateElimination dtmc